利用vb实现两张图像(bmp或tif)颜色相减(直接文件操作,或者picturebox都可以),并保存下来。 
也就是为了找出图片A和B的区别,最好有点(关键)代码 
API,MatrixVB....只要能实现都可以,不要用GetPixel:效率太低 
谢谢啦

解决方案 »

  1.   

    楼主对 BMP 文件结构熟悉的话,可以直接存取像素位进行减法运算。现在 BMP 常见的无外乎 8 bpp 和 24 bpp 的。对于前者,其实操作起来更简单,直接把调色板读入内存,后面的像素位就是指针,配合内存操作函数,速度是很快的。
    不过 BMP 文件的组织形式比较多,要是图省事,不妨让 Windows 给做这件事,涉及到的函数是 GetDIBits
      

  2.   

     GetDIBits,如何实现对像素位进行减法运算
    如何获取象素值,如何相减,谢谢~谢谢
      

  3.   

    不知道你的算法是什么,这里只给出怎样得到像素的值。首先先把一幅 BMP 加载到 PictureBox 中(AutoRedraw 设为 True)。Dim tBmpInfo As BITMAPINFO
    Dim nbPerLine As Long
    Dim byBits() As Byte
    '取得缓存 DC 中的 Bmp 像素位
    With tBmpInfo.bmiHeader
        .biSize = Len(tBmpInfo.bmiHeader)
        .biWidth = (图像宽)
        .biHeight = (图像高)
        .biPlanes = 1
        .biBitCount = 24
        .biCompression = BI_RGB
    End With
    nbPerLine = (tBmpInfo.bmiHeader.biWidth * 3 + 3) And &HFFFFFFFC
    ReDim byBits(nbPerLine - 1, tBmpInfo.bmiHeader.biHeight  - 1) As Byte
    Call GetDIBits(Picture1.hDC, Picture1.Picture.Handle, 0, tBmpInfo.bmiHeader.biHeight, byBits(0, 0), tBmpInfo, DIB_RGB_COLORS)其中数组 byBits 的第一维代表 x 轴像素位置,第二维代表 y 轴。注意每个像素占 3 个字节,因此(x, y)的像素值位于 byBits(x * 3, y) 开始的三个字节中,分别是蓝、绿、红分量。此外还要注意整个位图在数组里是上下颠倒存放的。