2021SC@SDUSC
目录
案例——draw_compare
BitmapCompareUtil类
getCanArrivePos方法
private static List<Point> getCanArrivePos(int[][] state, Point currentPos) {
List<Point> result = new ArrayList<>();
for (int i = 0; i < 8; i++) {
Point tmp = getNextPosition(currentPos, i);
//检查下一个点是否越界
if ((tmp.x > -1 && tmp.x < state.length) && (tmp.y > -1 && tmp.y < state.length))
//检查这个点是否已经被标记过无效
if (state[tmp.y][tmp.x] != 1) {
result.add(tmp);
//标记该点无效
state[tmp.y][tmp.x] = 1;
}
}
return result;
}
该方法根据当前点获取周围8个相邻的点,如下:
1 2 3
4 * 5
6 7 8
参数state是状态映射表,currentPos是当前坐标点,返回值为可以到达的像素点。
首先遍历这8个邻接的点,然后获得当前的坐标点,判断是否越界,如果没有再判断该点是否已经被标记过无效,如果未被标记,则将其加入到result中。
getNextPosition方法
private static Point getNextPosition(Point currentPos, int direction) {
Point result = new Point(currentPos.x, currentPos.y);
switch (direction) {
//左
case 0:
result.x -= 1;
break;
//上
case 1:
result.y -= 1;
break;
//下
case 2:
result.y += 1;
break;
//右
case 3:
result.x += 1;
break;
//左上
case 4:
result.x -= 1;
result.y -= 1;
break;
//左下
case 5:
result.x -= 1;
result.y += 1;
break;
//右上
case 6:
result.x += 1;
result.y -= 1;
break;
//右下
case 7:
result.x += 1;
result.y += 1;
break;
}
return result;
}
该函数根据当前点和方向获取下一个点和方向。参数currentPos为当前坐标点,direction为要获取的方向,返回对应的点。
DiffInfo内部类
public static class DiffInfo {
public int srcPixelCount, //原图对应颜色像素点数
targetPixelCount,//目标图对应颜色像素点数
hitCount, //完全重合的像素点数
nearCount, //相近的像素点数
awayCount; //不匹配的像素点数
public float similarityDegree; //自己计算的相似度
public DiffInfo(int srcPixelCount, int targetPixelCount, int hitCount, int nearCount, int awayCount, float similarityDegree) {
this.srcPixelCount = srcPixelCount;
this.targetPixelCount = targetPixelCount;
this.hitCount = hitCount;
this.nearCount = nearCount;
this.awayCount = awayCount;
this.similarityDegree = similarityDegree;
}
@Override
public String toString() {
return String.format(Locale.getDefault(),
"自己计算的相似度: %s\n原图对应颜色像素点数: %s\n目标图对应颜色像素点数: %s\n完全重合的像素点数: %s\n相近的像素点数: %s\n不匹配的像素点数: %s",
similarityDegree, srcPixelCount, targetPixelCount, hitCount, nearCount, awayCount);
}
}
该类中包括的变量srcPixelCount原图对应颜色像素点数,targetPixelCount目标图独赢颜色像素点数,hitCount完全重合的像素点数,nearCount相近的像素点数,awayCount不匹配的像素点数。similarityDegree为自己计算的相似度。