日期:2014-05-18  浏览次数:20744 次

在线求助图片比较 BitmapData LockBits 急。。。。
如何利用 LockBits 快速比较图片呢?
例如已有图片如下:
 
然後我有小图片 笑脸 跟 红心 ,我该如何利用 BitmapData LockBits 来比较呢?
图片的宽高为250pix组成的~
C# code

private void button1_Click( object sender, EventArgs e)
{
Bitmap b = pictureBox1.Image as Bitmap;

int width = b.Width;
int height = b.Height;
BitmapData bd = b.LockBits ( new Rectangle( 0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb );
IntPtr imgPtr = bd.Scan0;
int stride = bd.Stride;
int widthByte = width*3;
int skipByte = stride - widthByte;
int [,,] rgbData = new int [width,height,3 ];
#region 讀取 RGB 資料
unsafe
{
byte* p = ( byte*) ( void*) imgPtr;
for ( int j = 0; j < height; j++)
{
for ( int i = 0; i < width; i++)
{
rgbData[i, j, 2 ] = p[ 0 ];
p++;
rgbData[i, j, 0 ] = p[ 0 ];
p++;
rgbData[i, j, 1 ] = p[ 0 ];
p++;
}
p += skipByte;
}
}
#endregion


看到别人的例子,这样可以读入到rgbData[]阵列,
但是就是不知道要如何用小图笑脸来比较大图,
PS:小图的宽高也是250pix

------解决方案--------------------
http://www.cnblogs.com/blsong/archive/2010/09/10/1823248.html
------解决方案--------------------
小图片是缩略图吗?
如果是 用这个方法是比较不出来的
此方法只能比较完全相同的图片 大小不一样 比较不出来的

比较两张图片是否完全相同 还可以 将图片读入到内存流 然后转换成byte数组 比较数组是否一致


楼主如果想研究 图像匹配的话 赶紧停止这种方式 网上搜索 OpenCV 或者 Emgu CV