我正在尝试编写一个算法来确定从文件加载的 24 位位图中的位是否存在于内存中已经存在的位数组中。这并不像听起来那么容易:数组memBmp
是从 中返回的GetDIBits
,所以它是一系列行和填充;因此,查找子位图是否存在不仅仅涉及比较memBmp
.
例子:
内存Bmp:
0 0 0 0 0 1 0 1 0 0
0 0 0 0 0 1 0 1 0 0
0 0 0 0 0 1 0 1 0 0
如果从文件加载的位图包括:
1 0 1
1 0 1
1 0 1
该算法需要识别这是 memBmp 的“子位图”。
我已经设置了基本大纲,但我完全不知道如何编写该算法的匹配检查部分:
int FindBitmap(TCHAR *file, BYTE *memBmp, int membmpWidth, int membmpHeight)
{
HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, file, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
BITMAP bm;
HDC hDC1 = CreateCompatibleDC(NULL);
BITMAPINFO bi;
BYTE *data;
if(!hBitmap)
{
return -1;
}
GetObject(hBitmap, sizeof(bm), &bm);
SelectObject(hDC1, hBitmap);
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = bm.bmWidth;
bi.bmiHeader.biHeight = -bm.bmHeight;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biSizeImage = 0;
data = (BYTE*)malloc(4*bm.bmWidth*bm.bmHeight);
GetDIBits(hDC1, hBitmap, 0, bm.bmHeight, data, &bi, DIB_RGB_COLORS);
// Now what?
free(data);
return 0;
}