【发布时间】:2011-06-03 01:18:01
【问题描述】:
是否可以使用 BitBlt 直接从 GDI+ 位图中复制而不使用 GetHBitmap?
GetHBitmap 很慢,因为它会创建整个图像的新副本,除了 BitBlt 副本之外并且比它慢,并且必须释放给定的 HBITMAP。图片很大。
有没有办法让BitBlt使用原始GDI+图像的像素数据?
编辑:我可以获得指向 GDI+ 位图像素数据在内存中的位置的指针。我可以创建一个指向 GDI+ 位图像素数据的 HBITMAP 以避免额外的副本,以及由此产生的 BitBlt 吗?
【问题讨论】:
-
BitBlt 从一个 DC 复制到另一个。要将位图绘制到 DC 上,请将位图选择到源 DC,然后将其 BitBlt 到目标。如果这就是您想要对 GDI+
Bitmap对象执行的操作,您不应该只使用Graphics.DrawImage,其中Graphics对象包装了预期的目标 DC 吗?为什么要通过HBitmap? -
我需要 BitBlt 的原因是它的光栅操作。 DrawImage 无法从一个图像到另一个图像执行 OR 操作。我已经用 GDI 位图完成了,但是如何将 GDI+ 位图选择到 HDC 中呢?我真的很想知道这是否可能。
-
呃,s/it's/its