我有一个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()的返回值。设备上下文必须恢复,否则会导致内存泄漏。强烈建议使用库来做到这一点,也有助于避免使用谷歌搜索。 –