C#ImageSearch DLL

时间:2017-04-30 15:59:20

标签: c# image dll screen

所以我最近创建了一个程序,在屏幕上找到特定的图像并返回它的位置,我实际上在stackoverflow上找到了这部分代码,它使用的是AutoIT3中的ImageSearch.dll。

它运作得很好,然而,缺少一件事,我不知道该怎么做。我的意思是宽容。这是它的作用的原始定义:

";                $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                            image differ from desktop. e.g GIF"

即使存在一些差异,基本上也可以找到图像。

所以这就是我得到的代码:

    DllImport("ImageSearch.dll")]
    public static extern IntPtr ImageSearch(int x, int y, int right, int bottom, [MarshalAs(UnmanagedType.LPStr)]string imagePath);

        public static string[] UseImageSearch(string imgPath)
    {

        IntPtr result = ImageSearch(0, 0, Screen.PrimaryScreen.WorkingArea.Right, Screen.PrimaryScreen.WorkingArea.Bottom, imgPath);
        string res = Marshal.PtrToStringAnsi(result);

        if (res[0] == '0') return null;

        string[] data = res.Split('|');

        int x; int y;
        int.TryParse(data[1], out x);
        int.TryParse(data[2], out y);

        return data;
    }

我想以某种方式使宽容工作与原版一样。那可能吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我其实想要做同样的事情所以我想我会发布我是如何做到的。我向UseImageSearch()添加了第二个参数string tolerance,并附加了tolerance字符串,前缀为*并且后缀为imgPath字符串的空格,我将新字符串传递给DLL,它返回一个带有所需结果的字符串[]。

using System;
using System.Runtime.InteropServices;
using System.Windows;

我引用了这些家伙

[DllImport(@"C:\ImageSearchDLL.dll")]
    public static extern IntPtr ImageSearch(int x, int y, int right, int bottom, [MarshalAs(UnmanagedType.LPStr)]string imagePath);

    public static string[] UseImageSearch(string imgPath, string tolerance)
    {
        imgPath = "*" + tolerance + " " + imgPath;

        IntPtr result = ImageSearch(0, 0, 1920, 1080, imgPath);
        string res = Marshal.PtrToStringAnsi(result);

        if (res[0] == '0') return null;

        string[] data = res.Split('|');

        int x; int y;
        int.TryParse(data[1], out x);
        int.TryParse(data[2], out y);

        return data;
    }

然后我使用图像路径和所需的容差级别0-255

调用UseImageSearch
 string image = (@"C:\Capture.PNG");

        string[] results = UseImageSearch(image, "30");
        if (results == null)
        {
            MessageBox.Show("null value bro, sad day");
        }
        else
        {
            MessageBox.Show(results[1] + ", " + results[2]);
        }

根据需要执行。

enter image description here