问题
我有一个32位像素数据的数组,它保存了一个位图图像。
TPixel = packed record
B: Byte;
G: Byte;
R: Byte;
A: Byte;
end;
Size = MyBitmapWidth * MyBitmapHeight;
MyBitmapData : array[0..Size-1] of TPixel;
能否创建一个新的TCanvas对象并将其附加到现有的像素数据上?该画布对象还需要分配一个句柄。
背景
我正在使用一个第三方库来创建位图数据(作为32位像素数组)。我想在另一个函数中使用相同的像素数据,该函数需要TCanvas.Handle作为参数。
TCanvas.Handle
作为其参数,则您实际上并不需要一个TCanvas
。您需要的是一个HDC
- Windows 设备上下文的句柄。 - Rob KennedyHBitmap
来持有对像素缓冲区的引用,然后创建一个DC(使用CreateCompatibleDC),最后将位图选择到DC中(使用SelectObject)。我不确定的唯一部分是第一个;我无法从文档中确定CreateDIBitmap
或CreateDIBSection
是否保留对原始数据的引用。(TCanvas
与此过程无关,但如果您真的需要它,只需在准备就绪时分配Handle := hDC
即可。) - Rob Kennedy