如何比较像素的颜色是否与另一个像素的颜色相似
How to compare if the color of a pixel Is similar to another
我正在制作一个程序,它可以自动玩一个叫做 bemuse 的游戏。目前,我已经设置了所有组件,但是,我正在确定色块是否在您点击的区域上方。
我尝试使用有类似问题的线程中提供的距离公式,但我总是得到错误的结果。
boolean similarTo(Color c,Color v){
double distance = Math.sqrt((c.getRed() - v.getRed())*(c.getRed() - v.getRed()) + (c.getGreen() - v.getGreen())*(c.getGreen() - v.getGreen()) + (c.getBlue() - v.getBlue())*(c.getBlue() - v.getBlue()));
// double average1 = c.getRed()+c.getBlue()+c.getGreen();
// double average2 = v.getRed()+v.getBlue()+v.getGreen();
if(distance < 100 ){
return true;
}else{
return false;
}
}
使用它应该在像素变得相似时按下,但结果总是不同,比如它说它们一直都是一样的,永远不会更新。
您的问题可能是因为使用了错误的Color
class。您可以在 JDK:
中找到 2 Color
classes
java.awt.Color
:公开返回 int
值的 getRed、getGreen、getBlue 方法 0-255 .
javafx.scene.paint.Color
:公开返回 double
值的 getRed、getGreen、getBlue 方法 0-1 .
如果您使用 javafx.scene.paint.Color
,您的距离将永远不会超过 1.73。您需要使用 java.awt.Color
来获得 0 - 441.67
之间的距离
我正在制作一个程序,它可以自动玩一个叫做 bemuse 的游戏。目前,我已经设置了所有组件,但是,我正在确定色块是否在您点击的区域上方。
我尝试使用有类似问题的线程中提供的距离公式,但我总是得到错误的结果。
boolean similarTo(Color c,Color v){
double distance = Math.sqrt((c.getRed() - v.getRed())*(c.getRed() - v.getRed()) + (c.getGreen() - v.getGreen())*(c.getGreen() - v.getGreen()) + (c.getBlue() - v.getBlue())*(c.getBlue() - v.getBlue()));
// double average1 = c.getRed()+c.getBlue()+c.getGreen();
// double average2 = v.getRed()+v.getBlue()+v.getGreen();
if(distance < 100 ){
return true;
}else{
return false;
}
}
使用它应该在像素变得相似时按下,但结果总是不同,比如它说它们一直都是一样的,永远不会更新。
您的问题可能是因为使用了错误的Color
class。您可以在 JDK:
Color
classes
java.awt.Color
:公开返回int
值的 getRed、getGreen、getBlue 方法 0-255 .javafx.scene.paint.Color
:公开返回double
值的 getRed、getGreen、getBlue 方法 0-1 .
如果您使用 javafx.scene.paint.Color
,您的距离将永远不会超过 1.73。您需要使用 java.awt.Color
来获得 0 - 441.67