嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
指定小图从大图中找出相同的图,显示坐标信息等。
/// <summary>
/// 在大图里找小图
/// </summary>
/// <param name="S_bmp">大图</param>
/// <param name="P_bmp">小图</param>
/// <param name="similar">容错值 取值0--255,数值越高效率越低,不建议超过50</param>
/// <returns></returns>
public static List<Point> FindPic(int left, int top, int width, int height, Bitmap S_bmp, Bitmap P_bmp, int similar)
{
if (S_bmp.PixelFormat != PixelFormat.Format24bppRgb) { throw new Exception("颜色格式只支持24位bmp"); }
if (P_bmp.PixelFormat != PixelFormat.Format24bppRgb) { throw new Exception("颜色格式只支持24位bmp"); }
int S_Width = S_bmp.Width;
int S_Height = S_bmp.Height;
int P_Width = P_bmp.Width;
int P_Height = P_bmp.Height;
//取出4个角的颜色
int px1 = P_bmp.GetPixel(0, 0).ToArgb(); //左上角
int px2 = P_bmp.GetPixel(P_Width - 1, 0).ToArgb(); //右上角
int px3 = P_bmp.GetPixel(0, P_Height - 1).ToArgb(); //左下角
int px4 = P_bmp.GetPixel(P_Width - 1, P_Height - 1).ToArgb(); //右下角
Color BackColor = P_bmp.GetPixel(0, 0); //背景色
BitmapData S_Data = S_bmp.LockBits(new Rectangle(0, 0, S_Width, S_Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData P_Data = P_bmp.LockBits(new Rectangle(0, 0, P_Width, P_Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
List<Point> List;
if (px1 == px2 && px1 == px3 && px1 == px4) //如果4个角的颜色相同
{
//透明找图
List = _FindPic(left, top, width, height, S_Data, P_Data, GetPixelData(P_Data, BackColor), similar);
}
else if (similar > 0)
{
//相似找图
List = _FindPic(left, top, width, height, S_Data, P_Data, similar);
}
else
{
//全匹配找图效率最高
List = _FindPic(left, top, width, height, S_Data, P_Data);
}
S_bmp.UnlockBits(S_Data);
P_bmp.UnlockBits(P_Data);
return List;
}