在图像比较期间忽略bmp图像中的矩形区域

时间:2015-03-16 05:42:30

标签: c image bitmapimage bmp

下面是通过忽略包含动态数据的矩形区域来比较两个图像的伪代码

#include <stdio.h>

#define WID 200
#define DEP 600

typedef struct {
int left;
int top;
int right;
int bot;
} rect;

char image1[WID*DEP];
char image2[WID*DEP];

int inrect (int x, int y, rect r) {
if (x<r.left || x>r.right || y<r.top || y>r.bot)
    return 0;
return 1;
}

  int compareimages (char *im1, char* im2, int wid, int dep, rect *rarr,   int rects) 
{
   int x, y, n, ignore;
   for (y=0; y<dep; y++)
    for (x=0; x<wid; x++) {
        int read_bytes = fread(&k, 1, 1, image1)
        ignore = 0;
       for (n=0; n<rects; n++)
            ignore |= inrect (x, y, rarr[n]);
        if (!ignore)
            if (im1[y*wid+x] != im2[y*wid+x])   // compare pixels
                return 0;
    }
return 1;
}

int main(void) {
rect rectarr[2] = { {10, 10, 50, 50}, { 40, 40, 90, 90 }};
// ... load images ...

// put pixel in one of the rectangles
image1[20*WID+20] = 1;
if (compareimages (image1, image2, WID, DEP, rectarr, 2))
    printf ("Same\n");
else
    printf ("Different\n");

// put pixel outside any rectangles
image1[0] = 1;
if (compareimages (image1, image2, WID, DEP, rectarr, 2))
    printf ("Same\n");
else
    printf ("Different\n");
return 0;
}

如果每个像素有1个字节,上面的代码工作正常,但如果我想比较bmp图像,其中每个像素每个字节有4个字节,红色,绿色,蓝色和alpha通道如何做到这一点请帮助

0 个答案:

没有答案