创建内存设备上下文...用于位图,而不是设备(不显示)

时间:2015-10-17 01:19:05

标签: c++ windows bitmap image-comparison

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

所以BitBlt(记得BitBlt?)有一个名为SRCINVERT的ROP就是这样做的。而且速度惊人。工作一种享受。但是......它想要使用源和目标DC(Device Context)...你可以SelectObject将位图放入这些DC中,但是你必须拥有DC'秒。

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

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

2 个答案:

答案 0 :(得分:1)

在内存上下文中选择位图后,其位深度/像素大小将由位图中的位图接收。

答案 1 :(得分:0)

没关系......傻男孩......我正在使用CreateDC(L“DISPLAY”,NULL,NULL,NULL);制作目的地DC和我尝试CreateCompatibleDC(0);我必须只改变源DC ......哎呀。 CreateCompatibleDC(0);是一种享受。

https://github.com/JamesNewton/WinBitBltImageCompare