创build内存设备上下文…为一个位图,而不是一个设备(不显示)

我想这可能是错误的,所以请让我先说明一下目标:我想通过将两个图像异或来比较两个图像,然后将结果保存(不显示)为文件。 其实,我想平均所有的比特值来获得一个百分比匹配,但这一部分并不难。

所以BitBlt (记住BitBlt?)有一个叫做SRCINVERT的ROP,它正是这样做的。 而且尖叫得很快。 作品一种享受。 但是…它想要一个源和目标DC( 设备上下文 )… …您可以select一个位图到这些DC的位图,但你必须有DC。

使用CreateCompatibleDC(0)可以方便地创buildDC。 甚至CreateDC(L“DISPLAY”,NULL,NULL,NULL); 但是…这些都是基于当前硬件显示的像素深度,尺寸等。 {编辑:Nop,CreateCompatibleDC(0); 从所选的位图中获取所有的东西,我只是没有真正使用它}我不关心这一点,我想像素深度等工作,我正在加载的位图文件从。 其实这是一个命令行程序, 它永远不会有一个窗口。 编辑:但是因为DC是用于实际的屏幕,当使用CreateDC(L“DISPLAY”,NULL,NULL,NULL)时,我看到图像显示(覆盖桌面)之前,它被保存到一个文件。

我卡住了吗? 我是否必须find另一个graphics库来执行我的异或function? 或者有没有办法使用BitBlt? 更普遍的是,有没有办法做GDI或GDIPlustypes的东西与目前的系统中不存在的DC? 这对于能够处理图像文件的程序来说不是一件非常有用的事情,而不必显示结果吗?

一旦你选择了一个位图到一个内存上下文中,它的位深度/像素大小将被来自位图的位图接管。

从来没有…愚蠢的男孩…我正在使用CreateDC(L“DISPLAY”,NULL,NULL,NULL); 使目的地DC,当我尝试CreateCompatibleDC(0); 我必须只改变源DC …哎呀。 CreateCompatibleDC(0); 作品一种享受。

https://github.com/JamesNewton/WinBitBltImageCompare