我有一個32位整數(ARGB像素:uint32 *mypixels
)和int width
和int height
陣列形式的位圖圖像。我需要將它們輸出到打印機。如何繪製到設備上下文
我有打印機方面:HDC hdcPrinter;
當我瞭解,我需要先創建一個兼容方面:
HDC hdcMem = CreateCompatibleDC(hdcPrinter);
然後我需要創建一個HBITMAP
對象,選入兼容的情況下,並呈現:
HBITMAP hBitmap = ...?
SelectObject(hdcMem, hBitmap);
BitBlt(printerContext, 0, 0, width, height, hdcMem, 0, 0, SRCCOPY);
最後清理:
DeleteObject(hBitmap);
DeleteDC(hdcMem);
我的問題是如何創建一個HBITMAP
對象並將其放入mypixels
?
我發現了兩個選項:
HBITMAP hBitmap = CreateCompatibleBitmap(hdcPrinter, width, height);
看起來不錯,但你如何
mypixels
進入這個位圖?HBITMAP hBitmap = CreateDIBSection(hdcPrinter /*or hdcMem?*/, ...);
可以嗎?它比選項1好嗎?
可以使用或[SetDIBits](https://msdn.microsoft.com/en-us/library/windows/desktop/dd162973(V = vs.85)的.aspx)之後[CreateCompatibleBitmap]( https://msdn.microsoft.com/en-us/library/windows/desktop/dd183488(v=vs.85).aspx) - 或者單獨調用[CreateDIBitmap](https://msdn.microsoft .com/en-us/library/windows/desktop/dd183491(v = vs.85).aspx) - '從DIB創建兼容位圖(DDB),並且可選地設置位圖位' – RbMm
很多方式,事情來自哪裏。基本上來自文件,資源,內存位置。您必須關注位圖的來源,代碼片段會自動從任何基本的Google查詢中彈出。注意代碼中的錯誤,你永遠不能忽略SelectObject()的返回值。設備上下文必須恢復,否則會導致內存泄漏。強烈建議使用庫來做到這一點,也有助於避免使用谷歌搜索。 –