首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在位图中查找子位图?

在位图中查找子位图?
EN

Stack Overflow用户
提问于 2013-03-07 07:21:58
回答 2查看 243关注 0票数 0

我正在尝试编写一个算法,以确定从文件加载的24位位图中的位是否存在于内存中已有的位数组中。这并不像听起来那么简单:数组memBmp是从GetDIBits返回的,所以它是一系列行和填充;因此,确定子位图是否存在并不只是比较memBmp中连续的子数组。

示例:

memBmp:

0 0 0 1 0 1 0 0

0 0 0 1 0 1 0 0

0 0 0 1 0 1 0 0

如果从文件加载的位图包含:

1 0 1

1 0 1

1 0 1

该算法需要识别出这是memBmp的“子位图”。

我已经建立了基本的大纲,但是我完全不知道如何编写这个算法的匹配检查部分:

代码语言:javascript
运行
复制
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;

}
EN

Stack Overflow用户

发布于 2013-03-07 07:26:30

将数组倒置,并添加第四列零。对子位图执行相同的操作。现在认识到一行中的四个位代表十六进制数字,为两个都构造十六进制字符串(一个为8个元素长,另一个为一些值)。使用字符串匹配函数查看其中一个是否存在于另一个中。

您给出的位图示例:

代码语言:javascript
运行
复制
00010100
00010100
00010100

把它翻过来,加零:

代码语言:javascript
运行
复制
0000 = '0'
0000 = '0'
0000 = '0'
1110 = 'E'
0000 = '0'
0000 = 'E'
0000 = '0'
0000 = '0'

对子阵列执行相同的操作:

代码语言:javascript
运行
复制
1110 = 'E'
0000 = '0'
0000 = 'E'

因此,您现在可以在"000E0E00“中搜索"E0E”-这将匹配。

您实际上不需要添加0-您可以将一行中的三位视为一个八进制数(0-7)。但是使用字符串匹配函数作为最后的“是否X属于Y”会让你的生活更轻松……

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15260148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档