Create Memory Device Context... 用于位图,而不是设备(不显示)

Create Memory Device Context... for a bitmap, not a device (not display)

我的想法可能全错了,所以请让我先说明目标:我想通过对两幅图像进行异或运算来比较它们,然后将结果保存(而不是显示)为文件。实际上,我想对所有位值进行平均以获得百分比匹配,但这部分并不难。

因此 BitBlt (remember BitBlt?) has a ROP called SRCINVERT that does exactly this. And screamingly fast. Works a treat. But... it wants a source and destination DC (Device Context) to work with... you can SelectObject 将位图放入那些 DC,但您必须拥有 DC。

使用 CreateCompatibleDC(0) 可以轻松制作 DC;甚至 CreateDC(L"DISPLAY", NULL, NULL, NULL);但是……这些是基于当前硬件显示器的像素深度、大小等……。 {编辑:不,CreateCompatibleDC(0);从选择的位图中获取所有内容,我实际上并没有使用它。} 我不关心那个,我想使用像素深度等...我的文件'从加载位图。实际上,这是一个命令行程序;它永远不会有 window。编辑:但是因为 DC 用于实际屏幕,所以在使用 CreateDC(L"DISPLAY", NULL, NULL, NULL) 时,我在将图像保存到文件之前在显示器上看到了图像(覆盖桌面) .

我卡住了吗?我是否必须找到另一个图形库来执行我的 XOR 函数?或者有没有办法使用 BitBlt?更一般地说,有没有办法用当前系统上不存在的 DC 来做 GDI 或 GDIPlus 类型的东西?对于处理图像文件而不一定显示结果的程序来说,这不是一件非常有用的事情吗?

一旦您将位图 select 放入内存上下文,其位 depth/pixel 大小将由位图中的位接管。

没关系...傻孩子...我正在使用 CreateDC(L"DISPLAY", NULL, NULL, NULL);制作目标 DC 以及当我尝试 CreateCompatibleDC(0) 时;我一定只是更改了源 DC...哎呀。创建兼容DC(0);可以请客。

https://github.com/JamesNewton/WinBitBltImageCompare