硬盘上的图片是什么格式?jpg?bmp
比全部图像还是部分?

解决方案 »

  1.   

    jpg或bmp都可以,最好就是比较部分就是更好了
    好像vbs 有个方法 FindPic 不知道用c#如何才能做到和这个方法一样的功能
      

  2.   

    找找hough算子和隐Makrkov模型方面的资料看看...
      

  3.   

    liujia_0421 你好,绝对的相同的是如何做的,先做简单再做复杂的,能说出来大家探讨一下吗
      

  4.   

    我是这样获得一幅图片的并保存起来的
               this.Hide();
                Thread.Sleep(2000);
               SendKeys.SendWait("%{PRTSC}");
                Bitmap myCapture = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
                myCapture.Save(@"C:\myCapture.bmp", System.Drawing.Imaging.ImageFormat.Bmp);现在是如何再通过
    SendKeys.SendWait("%{PRTSC}");
                Bitmap myCapture = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);叛断“myCapture” 与“C:\myCapture.bmp ”是否相同
      

  5.   

    绝对的相同就是比较每个bit……
      

  6.   

    谢谢aihui109 能提供一下把二进流的形式读取图片文件的源码吗
      

  7.   

    //存下来比较文件private bool SameBytes(byte[] ABuffer1, byte[] ABuffer2)
    {
        if (ABuffer1.Length != ABuffer2.Length) return false;
        for (int i = 0; i < ABuffer1.Length; i++)
            if (ABuffer1[i] != ABuffer2[i]) return false;
        return true;
    }private bool SameFile(string AFileName1, string AFileName2)
    {
        FileInfo vFileInfo1 = new FileInfo(AFileName1);
        FileInfo vFileInfo2 = new FileInfo(AFileName2);
        if (vFileInfo1.Length != vFileInfo2.Length) return false;
        FileStream vFileStream1 = new FileStream(AFileName1,
            FileMode.Open, FileAccess.Read, FileShare.Read);
        FileStream vFileStream2 = new FileStream(AFileName2,
            FileMode.Open, FileAccess.Read, FileShare.Read);    byte[] vBuffer1 = new byte[0x1000];
        byte[] vBuffer2 = new byte[0x1000];
        int vReadLength1 = vFileStream1.Read(vBuffer1, 0, vBuffer1.Length);
        int vReadLength2 = vFileStream2.Read(vBuffer2, 0, vBuffer2.Length);
        while ((vReadLength1 > 0) && (vReadLength2 > 0))
        {
            vReadLength1 = vFileStream1.Read(vBuffer1, 0, vBuffer1.Length);
            vReadLength2 = vFileStream2.Read(vBuffer2, 0, vBuffer2.Length);
            if (!SameBytes(vBuffer1, vBuffer2)) return false;
        }
        vFileStream1.Close();
        vFileStream2.Close();
        return true;
    }private void button1_Click(object sender, EventArgs e)
    {
        Text = SameFile(@"C:\myCapture.bmp", @"C:\myCapture2.bmp").ToString();
    }
      

  8.   


    用二进流的形式读取图片文件,然后比较两个流是或一样.
    这个办法是经过试验的,决对可行!~~~
    …………………………………………………………………………
    正解。任何文件都可以解读成2进制流。搂住现在只需要关心怎么把获取的截图转化为2进制流。
    =======================================================================================直接用ToBase64转换编码得到编码序列,直接比较也可以.
      

  9.   

    谢谢楼上两们大哥,对了
    “直接用ToBase64转换编码得到编码序列,直接比较也可以”方法源码又是怎写的,能贴出来吗
      

  10.   

    我用读流的方法试了,如果不是用复制的两幅图来比较,用剪出来的两幅一样图来比较,还是返回false的
      

  11.   

    楼主,你错了.你剪出来的两幅图不可能一样.只要差一点都返回false;
    用二进制流来比较是决对可行的.是决对准确的!~~~
      

  12.   

    楼主,你错了.你剪出来的两幅图不可能一样.只要差一点都返回false;
    用二进制流来比较是决对可行的.是决对准确的!~~~
      

  13.   

    如果,你们公司舍得换钱,用mil试试,matrox image library.
    它提供了丰富的图像识别,也包括对比的函数库。
      

  14.   

    楼主要做的事情跟下面这个类似,人家的思路是比对前后两幅图片,只要80%相同就OK,设置一个阀值比如80%,看起来不起眼,其实很关键,这就是技巧。
    http://www.codeproject.com/csharp/motion_detection.asp
      

  15.   

    ruan_hg(阿阮) 说得很正确,便是这个阀值是如何提取出来的呀
      

  16.   

    我有一个思路,可以利用程序从图片中抽取一定的样本点
    然后比较样本点的RGB值相对差异
      

  17.   

    我看过一些按键精灵方面的软件,它们抓图对比都是比较准确和快捷的
    例如这个方法就是它们抓图语句:
    VBSCall FindPic(575,299,628,340,"c:\图片.bmp",1,x,y)
      

  18.   

    VBSCall Call FindPic
    VBSCall Call FindPic(iLeft,iTop,iRight,iBottom,szFileName,fSimilar,ByRef FoundX,ByRef FoundY)
    '这个函数用于在屏幕范围内查找图片
    这个功能允许您在屏幕的某个区域查找指定相似度的图片,并把找到的坐标保存在变量中
    格式
    VBSCall Call FindPic(left,top,right,bottom,filename,similar,x,y)
    在区域内从左到右,从上到下找文件名为filename的bmp文件,把找到的坐标保存在变量x和y中
    left,top,right,bottom都是整数或者整数型变量,说明了区域的左,上,右,下界限
    filename是一个bmp格式的图片,需要您自己抓取,最好是24位,把边缘都设为单一的颜色
    similar为相似度,取0.5到1之间的小数。数值越大,对图片的相似度要求越严格,速度也越快。推荐取0.9
    如果没有找到图片,则x和y的值都被置为-1
    推荐使用周围颜色单一的图片。如下图,右边的QQ图片比左边的好用的多例子
    VBSCall Call FindPic(0,0,1023,767,"1.bmp",0.9,x,y)
    If x>=0 and y>=0
    MoveTo x y
    EndIf 在区域(0,0,1023,767)中找与文件1.bmp中的图形比较接近的地方,如果找到,则把鼠标移动到这个地方c#该如何做出这方面的功能呢