底部坐标被正确的取了出来

完美!现在取出顶点和底部坐标!
观察发现
·背景颜色为渐变色,所以横向比较,与前一个点差别最大的点就是顶点
·平面颜色一般为纯色,也可能是渐变色,所以得到顶点后作竖向比较,最后一个与前点 差别最大的点就是底部坐标
·顶点的y轴坐标在区间[650-1050]
首先写一个判断颜色相似度的方法
bool ColorAbout(Colorcolor0, Color color1)
{
int i = 20; //颜色差值
int r =Math.Max(color0.R,color1.R)- Math.Min(color0.R, color1.R);
int g = Math.Max(color0.G,color1.G) - Math.Min(color0.G, color1.G);
int b = Math.Max(color0.B,color1.B) - Math.Min(color0.B, color1.B);
return!((Math.Max(Math.Max(r,g),b) + Math.Min(Math.Min(r, g), b)) > i);
}
还是写一个遍历点的循环,调用颜色相似度方法作横向比较取出顶点坐标和底部坐标
Point rectVertex = new Point();
Point rectEnd = new Point();
for (int y = 650; y < 1050;y++)
{
for (int x = 1; x <bitmap.Width; x++)
{
boolisColorAbout = !ColorAbout(bitmap.GetPixel(x - 1, y), bitmap.GetPixel(x, y));
if ((x < chess.X - 75 || x > chess.X + 75)&& isColorAbout) //排除棋子坐标,避免错误的将棋子作顶点
{
rectVertex.X = x;
rectVertex.Y = y;
break;
}
}
if (rectVertex !=new Point())
{
break;
}
}
if (rectVertex ==new Point())
{
MessageBox.Show("未知的物体!初始化失败!");
bitmap.Dispose();
return;
}
ColorrectColor = bitmap.GetPixel(rectVertex.X,rectVertex.Y+1);
if (rectEnd == new Point())
{
for (int y = rectVertex.Y; y< 1200; y++)
{
boolisColorAbout = ColorAbout(rectColor, bitmap.GetPixel(rectVertex.X, y));
if(isColorAbout)
{
rectEnd.X = rectVertex.X;
rectEnd.Y = y;
}
}
}
OK!取出了坐标剩下的就是计算距离(正好前几天才学的两点距离公式)和跳跃了!开始循环!
LanQ 2017.1.6 GitHub-WeCharJump抛砖引玉 仅供学习!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。
注:相关教程知识阅读请移步到c#教程频道。










