【发布时间】:2011-09-30 09:32:50
【问题描述】:
我需要它使用 GDI 函数处理 RGB24 数据(特别是 StretchBlt(),它非常快),我不能使用 CreateCompatibleDC(),因为它只能使用其他 DC 的颜色深度创建内存 DC。通常它与屏幕 DC 一起使用(通过将 NULL 指针传递给函数),通常屏幕的颜色深度值为 32。此外,我不能依赖它,因为如果屏幕设置发生更改,我的应用程序可能无法工作。
所以我需要一些方法来创建具有特定颜色深度的内存 DC。到目前为止,我只找到了一种使用 CreateDC() 函数的方法,但它需要许多特定于设备的参数,而且对我来说似乎有些不可靠。此外,有太多字段需要填充适当的值来调用 CreateDC()。
有没有更简单的方法来创建特定的内存 DC 而不是依赖某些设备?或者即使创建 24 bpp 的内存 DC?
附:我需要它来制作一些快速的图形。我已经尝试手动将 alpha 通道添加到位图,以便将其与兼容屏幕 32bpp 内存 DC 的情况下使用,它成功了,但速度太慢了。正如我上面所说,我不能依赖可以更改的屏幕设置。
【问题讨论】:
-
需要专门使用gdi吗?如果没有,您是否调查过 Direct2D?我自己并没有真正对 D2D 做过任何事情,只是玩了一点矩形之类的东西,所以我不知道它是否适合您的问题。
-
@markh44 我没试过 Direct2D。我需要使用图形在 Win 组件和 DirectDraw 过滤器上绘图。 Direct2D 是否适合与 Windows 控件一起使用?
-
我不知道 D2D 是否可以做到这一点。我猜是的,但看起来你已经找到了解决方案,所以你可能会想要坚持你所拥有的。