2010-05-28 62 views
3

我可以將Qt對象繪製到QImage上,然後將圖像繪製到HDC或CDC。這可能會損害我們應用程序的性能。如果我可以將Qt對象直接繪製到Win32 HDC或MFC CDC上,那將會很棒。我希望有一類,說QWin32Image清晰,那麼我就可以這樣使用它:我可以直接將Qt對象繪製到Win32 DC(設備上下文)嗎?

QWin32Image image(hdc, 100, 100, Format_ARGB32_Premultiplied); 
QPainter painter(&image); 
painter.drawText(....); 

是否有可能對我的思想?或者有更好的方法來做到這一點?

回答

4

簡短的回答 - 在Qt中沒有第AFAIK,他們抽象整個用戶界面的平臺獨立在應用程序代碼級別。 Qt將它的所有小部件繪製到它自己的緩衝區中,然後繪製到屏幕上。

長答案 - 合格是的。

Qt提供Win/MFC Integration Library這將允許Qt對象與HDC和MFC對象進行交互。這個庫工作得很好。但是,直到我明白它是如何工作的,我才發現使用它有些困惑。

該庫的功能允許您在Qt框架中的MFC窗口或MFC窗口中顯示QWindows。只要你牢記這一點,就可以使其工作。另外,QImage.scanLine(0)指向整個原始位圖,您可以使用它直接使用其中一個窗口函數直接寫入屏幕。即使函數名稱是掃描線,使用這種方法指向原始像素緩衝區的開始。

+0

爲此可以使用哪些windows功能? QPixmap可以將QImage轉換爲Windows位圖句柄:QPixmap :: fromImage(image).toWinHBITMAP(QPixmap :: PremultipliedAlpha),考慮到性能,哪種方法更好? – 2010-06-01 03:19:00

+0

這樣做沒有太多的經驗。在我們的應用程序中,我們一直使用QImage.scanLine(0)來直接操作具有英特爾性能基元庫的原始像素緩衝區,因爲這更符合我們的應用。我的經驗是,你需要做的轉換越少越好。特別是在調試模式下,QImage和QPixmap有時會很慢。發佈模式雖然沒有這個問題。 – 2010-06-02 02:52:50

+0

'bits()'相當於'scanLine(0)'http://doc.qt.io/qt-4.8/qimage.html#bits – Winand 2016-02-26 10:20:10

相關問題