如何利用VBS来实现两个bmp格式的图片通过像素进行对比?求高人指点!!!
用下面的代码试了一下,提示fColor1 = mybmp1.Point(X, Y)的Point无法执行,换成abs也不行Dim mybmp1
Dim mybmp2
Set mybmp1 = LoadPicture ("c:\lcd.bmp")
Set mybmp2 = LoadPicture ("c:\lcd1.bmp")
msgbox mybmp1.Height
msgbox mybmp1.Width
For Y = 0 To mybmp1.Height
For X = 0 To mybmp2.Width
fColor1 = mybmp1.Point(X, Y)
fColor2 = mybmp2.Point(X, Y)
if fColor1<>fColor2 then
msgbox "不一样!"
End If
Next 'X
Next 'Y

解决方案 »

  1.   

    关于BMP的比较可以把它转换为二进制比较,比使用点对点的比较高效很多。
      

  2.   

    是啊,可是上面的脚本无法执行,提示是对象不支持point方法;其它的能支持对图片进行部分区域对比也可以
      

  3.   

    这个在VBS下比较痛苦,,,不支持
      

  4.   

    可以尝试一下API函数:GetPixel来读取点的颜色值
      

  5.   

    1,排除文件头部无用信息
    2,将数据读到两个byte数组中
    3,异或
    ……
    这是最快的算法了~~
      

  6.   

    能给出代码么?现在我就搞不懂如何读取.bmp文件里的像素,我要进行部分区域的比较,所以二进制方式貌似行不通...
      

  7.   

    vbs办不到,你的代码也不是vbs的,LoadPicture函数是vb6中的。建议借用picturebox控件来读取点阵一个个比较。
      

  8.   


    我是在QTP9.5中编写和运行的,应该是VBScript吧?那用picturebox控件如何运用,能详细说下么?谢谢!
      

  9.   

    尽管都是vb语言的脚本,但是负责解析的东西不同。比如你的什么qtp环境就支持LoadPicture方法,但是windows的vbs负责解析执行的wscript.exe就不行。说用picturebox是要在vb6.0环境下处理的。
      

  10.   

    VBS下....
    可能二进制才是你的最佳选择,给定一个bmp图片的二进制数据里面是包含图片的长度和宽度等信息的
    获取到长度和宽度后你就可以知道每行有多少个点 每列有多少个点了,定义一个对应的二维数组pp(w,h)获取图片数据,这样想比较哪个点直接就可以比较这两张图片的pp数组了 能间接实现point方法的效果
      

  11.   

    BMP 图像的扫描方式是按从左到右、从下到上的顺序,读数据时要格外注意
      

  12.   

    我帮楼主问下吧,能给出代码么?现在我就搞不懂如何读取.bmp文件里的像素
      

  13.   

    二进制法读到临时数组里 这个数组里就包含所有的图片信息和数据了,剩下的工作就是要读取哪些数组元素的问题了,如果还不明白可以搜索一下bmp的格式 
      

  14.   

    Set st = Wscript.createobject("ADODB.Stream")
    st.Type = 1
    st.Mode = 3
    st.open()
    '加载图片二进制流,并读取图片头信息
    st.LoadFromFile(picName)
    st.position = 10
    '获取数据偏移
    dataOff = BinVal(st.read(4))
    st.read(4)
    '图片宽、高(象素)
    imgW = BinVal(st.read(4))
    imgH = BinVal(st.read(4))
      

  15.   

    用WIA可以进行图像比较,下载微软的wiaaut.dll,并注册
        Dim mybmp1 As Object    Dim mybmp2 As Object    Set mybmp1 = CreateObject("wia.ImageFile")
        Set mybmp2 = CreateObject("wia.ImageFile")
        mybmp1.loadfile "d:\3.jpg"
        mybmp2.loadfile "d:\2.jpg"
        Dim fColor1 As Long, fColor2 As Long
        Dim x As Long, y As Long
        Dim v1 As Object, v2 As Object
        Set v1 = CreateObject("wia.vector")
        Set v2 = CreateObject("wia.vector")
        Set v1 = mybmp1.argbdata
        Set v2 = mybmp2.argbdata
        For y = 1 To mybmp1.height
            For x = 1 To mybmp1.width
                
                fColor1 = v1.Item(x + (y - 1) * mybmp1.width)
                
                fColor2 = v2.Item(x + (y - 1) * mybmp2.width)            If fColor1 <> fColor2 Then
                    msgbox Str(x) & Str(y) & "不一样!"
                End If
            Next 'X
        Next 'Y
    如果图片较大,还是算了吧,超慢
      

  16.   

    方法可用,确实像你说的,超慢!
    这个帖子给的分数太少了,你去下面的网址,回个帖子;我就结贴了;
    http://topic.csdn.net/u/20110223/11/ced07389-d4b1-4167-9fbb-7d882e73274f.html