如何将现有的内存缓冲区包装为本机win32中的DC



我在内存中定义了一个数组32位ARGB值的图像。我想要得到它的一个DC,然后在同一个数组中得到结果。图像永远不会被比特化显示在屏幕上。

是否可以不复制周围的图像数据?

当我查看msdn的CreateDC()页面时,它需要一个驱动程序名称和一个设备。但是直流电不需要与任何设备兼容。此外,如果显示器以16位或32位颜色深度运行,我不希望结果有所不同。我想我需要一个与我的内存布局兼容的DC,而不是与某些设备兼容。我该怎么做呢?

谢谢Marc

CreateDIBSection允许您指定存储位图的内存位置。

您需要创建一个位图并将该位图选择到您的DC中。位图是使用内存缓冲区创建的。

使用CreateBitmap(设备独立)或CreateDIBitmap(设备独立);这是我推荐的,特别是因为你不想让它受到显示颜色深度的影响——这意味着它应该是独立于设备的。)两者都有指向现有内存缓冲区的参数。例如,对于CreateDIBitmap,您需要传递CBM_INIT标志,然后传递指向缓冲区的指针作为lpbInit参数。您还需要传入一个BITMAPINFO结构,该结构描述了位图的格式。

CreateBitmap让你以稍微简单的方式做同样的事情,但是位图(依赖于设备)使用起来不那么灵活。

(顺便说一下,您可能希望使用CreateCompatibleDC而不是CreateDC,这取决于,但这通常是您所追求的。)

有关使用dc和位图的更多信息,请阅读类似本文的内容。(从你的问题中我不确定你对它们或通用GDI编程有多熟悉。)

最新更新