VC++如何打开两幅BMP 图像?
有两幅相同格式的BMP位图,想用VC++6.0打开,读取数据,进行比较。不知如何下手处理。先告诉我大概做法,我试试,有问题在请教。谢谢您...
有两幅相同格式的BMP 位图,想用VC++6.0 打开,读取数据,进行比较。 不知如何下手处理。先告诉我大概做法,我试试,有问题在请教。谢谢您
展开
1个回答
展开全部
将两个图读入到内存,先对比长和宽,然后每个点对比颜色值。以下代码请参考。
Mem1.CreateCompatibleDC(0);
HBITMAP old1=(HBITMAP)Mem1.SelectObject(m_image1);
Mem2.CreateCompatibleDC(0);
HBITMAP old2=(HBITMAP)Mem2.SelectObject(m_image2);
COLORREF c1,c2;
DIBSECTION ds1,ds2;
BITMAPINFOHEADER &bm1=ds1.dsBmih;
GetObject(m_image1,sizeof(ds1),&ds1);
int w1=bm1.biWidth;
int h1=bm1.biHeight;
BITMAPINFOHEADER &bm2=ds2.dsBmih;
GetObject(m_image2,sizeof(ds2),&ds2);
int w2=bm2.biWidth;
int h2=bm2.biHeight;
if(w1!=w2 || h1!=h2) return false;
CPoint point;
for(point.x=1;point.x<=w1;point.x++)
for(point.y=1;point.y<=h1;point.y++)
{
c1=Mem1.GetPixel(point);
c2=Mem2.GetPixel(point);
if(c1-c2>150000)
{
ng++;//这里指不同的值差多少算不相同
}
else ok++;
//if(ok/(ok+ng)<0.8) return false;
}
Mem1.CreateCompatibleDC(0);
HBITMAP old1=(HBITMAP)Mem1.SelectObject(m_image1);
Mem2.CreateCompatibleDC(0);
HBITMAP old2=(HBITMAP)Mem2.SelectObject(m_image2);
COLORREF c1,c2;
DIBSECTION ds1,ds2;
BITMAPINFOHEADER &bm1=ds1.dsBmih;
GetObject(m_image1,sizeof(ds1),&ds1);
int w1=bm1.biWidth;
int h1=bm1.biHeight;
BITMAPINFOHEADER &bm2=ds2.dsBmih;
GetObject(m_image2,sizeof(ds2),&ds2);
int w2=bm2.biWidth;
int h2=bm2.biHeight;
if(w1!=w2 || h1!=h2) return false;
CPoint point;
for(point.x=1;point.x<=w1;point.x++)
for(point.y=1;point.y<=h1;point.y++)
{
c1=Mem1.GetPixel(point);
c2=Mem2.GetPixel(point);
if(c1-c2>150000)
{
ng++;//这里指不同的值差多少算不相同
}
else ok++;
//if(ok/(ok+ng)<0.8) return false;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询