ファイルからロードされた24ビットビットマップのビットが、すでにメモリにあるビットの配列内に存在するかどうかを判断するアルゴリズムを作成しようとしています。これは思ったほど簡単ではありません。配列memBmp
はから返されるGetDIBits
ため、一連の行とパディングです。したがって、サブビットマップが存在するかどうかを確認するには、内の連続するサブ配列を比較するだけでは不十分ですmemBmp
。
例:
memBmp:
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;
}