日期:2014-05-20  浏览次数:20736 次

关于Java图像的
刚刚学JAVA没多久。。写了一个在桌面找图的方法
public int[] SearchFig(int offX,int offY,int terminalX,int terminalY,File file ) throws AWTException {

int[] XY = {-1,-1};  

if(!file.exists())//判断指定的文件是否以存在
{
System.out.println("图片不存在!");
return XY;


BufferedImage Color = null;
try {
Color = ImageIO.read(file);
} catch (Exception e) {
// TODO: handle exception
}

Robot shiyan = new Robot();//定义变量
Rectangle a=new Rectangle(offX,offY,terminalX,terminalY);//定义找图范围
BufferedImage Big = shiyan.createScreenCapture(a);//把寻找区域当成一个截图保存到Big变量中
int reachX = Color.getWidth();//获取要寻找的图片的宽
int reachY = Color.getHeight();//获取要寻找的图片的高
System.out.println("X="+reachX+" Y="+reachY);//输出图片高宽
long LittleColor = Color.getRGB(0, 0);//获取要找的图片的一个像素
System.out.println(LittleColor);
for (int i = offX; i < terminalX; i++) {
for (int j = offY; j < terminalY; j++) {
long LittleBig = Big.getRGB(i, j);//获取寻找区域的一个像素
if (LittleBig == LittleColor) {
CodeTest self = new CodeTest();//定义自己的变量
if(self.HueParallel(Big,Color,i,j)){
/*这个方法就是发现有一点颜色相等后,然后就把图片掉出来检查
* 这个图像和他是否对的上,返回boolean.
*/
long rgb=(LittleBig&0xFF0000)>>16;//位移操作
long rgb1=(LittleBig&0xFF00)>>8;//位移操作
long rgb2=(LittleBig&0xFF);//位移操作
System.out.println("R="+rgb+" G="+rgb1+" B="+rgb2);
XY[0] = i;
XY[1] = j;
return XY;//返回结果
}
}
}
}
return XY;//返回结果
}
/**
* @param 区域
* @param 图片
* @param X
* @param Y
* @return
*/
private boolean HueParallel(BufferedImage 区域,BufferedImage 图片,int X,int Y) {
int printX = 图片.getMinX();//图片宽
int printY = 图片.getMinY();//图片高

for (int i = X,PX = 0; i < printX+X; i++,PX++) {
for (int j = Y,PY = 0; j < printY+Y; j++,PY++) {
long LittleBig = 区域.getRGB(i, j);//获取 《区域 》图片i,j的颜色值
long LittleColor = 图片.getRGB(PX, PY);//获取 《颜色》 图片PX,PY的颜色值
if (LittleBig != LittleColor) {//如果2个点颜色不同就返回false
return false;
}
}
}
return true;
}
问题就是找图速度太慢了点。。。能有快捷点的办法不。。。或者说JAVA有没自带的找图功能

------解决方案--------------------
学习了。