原理:截图+图片比较,调用第三方库实现全局热键
首先是截图部分
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
BufferedImage screenshot = null;
try {
screenshot = (new Robot())
.createScreenCapture(new Rectangle(0, 0, (int) d
.getWidth(), (int) d.getHeight()));
} catch (AWTException e1) {
e1.printStackTrace();
}
ByteArrayOutputStream f1=new ByteArrayOutputStream();
try {
ImageIO.write(screenshot, format_jpg, f1);
Iterator<ImageReader> readers = ImageIO
.getImageReadersByFormatName(format_jpg);
ImageReader reader = readers.next();
InputStream source = new ByteArrayInputStream(f1.toByteArray());
ImageInputStream iis = ImageIO
.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
ImageReadParam param2 = reader.getDefaultReadParam();
//截取图片
Rectangle rect1 = new Rectangle(computeRalitiveX(8), computeRalitiveY(192), computeRalitiveX(498), computeRalitiveY(448));
Rectangle rect2 = new Rectangle(computeRalitiveX(517), computeRalitiveY(192), computeRalitiveX(498), computeRalitiveY(448));
param.setSourceRegion(rect1);
BufferedImage bi = reader.read(0, param);
param2.setSourceRegion(rect2);
BufferedImage bi2 = reader.read(0, param2);
ByteArrayOutputStream p1 = new ByteArrayOutputStream();
ImageIO.write(bi, format_jpg, p1);
ByteArrayInputStream p1in = new ByteArrayInputStream(p1.toByteArray());
panel.addImagePath(p1in);
p1.close();
p1in.close();
ByteArrayOutputStream p2 = new ByteArrayOutputStream();
ImageIO.write(bi2, format_jpg, p2);
ByteArrayInputStream p2in = new ByteArrayInputStream(p2.toByteArray());
p2.close();
p2in.close();
source.close();
out.close();
} catch (IOException e1) {
e1.printStackTrace();
}
然后是图片比较部分,也就是说在相同位置能否找到一样的颜色。
public static int isSameInRange(int img1_x, int img1_y, int x, int y, int r,
BufferedImage bi, BufferedImage bi2) {
int minX = x;
int maxX = x + r;
if (x + r > bi2.getWidth())
maxX = bi2.getWidth();
if (x - r < 0)
minX = 0;
int minY = y;
int maxY = y + r;
if (y + r > bi2.getHeight())
maxY = bi2.getHeight();
if (y - r < 0)
minY = 0;
int result = Integer.MAX_VALUE;
for (int j = minY; j < maxY; j++) {
for (int i = minX; i < maxX; i++) {
byte r1 = (byte) (bi.getRGB(img1_x, img1_y) >> 24);
byte g1 = (byte) (bi.getRGB(img1_x, img1_y) >> 16);
byte b1 = (byte) (bi.getRGB(img1_x, img1_y) >> 8);
byte gr1 = (byte) (bi.getRGB(img1_x, img1_y));
byte r2 = (byte) (bi2.getRGB(i, j) >> 24);
byte g2 = (byte) (bi2.getRGB(i, j) >> 16);
byte b2 = (byte) (bi2.getRGB(i, j) >> 8);
byte gr2 = (byte) (bi2.getRGB(i, j));
int diff = Math.abs(r1 - r2) + Math.abs(g1 - g2)
+ Math.abs(b1 - b2) + Math.abs(gr1 - gr2);
result = result > diff ?diff : result;
}
}
return result;
}
好啦,最后是系统热键部分
String OS = System.getProperty( "sun.arch.data.model") ;
final PictureCompareWin own = this;
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
if(!OS.equals("64")){
JIntellitype.setLibraryLocation("lib/JIntellitype.dll");
}else{
JIntellitype.setLibraryLocation("lib/JIntellitype64.dll");
}
if(JIntellitype.checkInstanceAlreadyRunning("QQ Picture Compare"))
System.exit(1);
if(JIntellitype.isJIntellitypeSupported()){
JIntellitype.getInstance().registerHotKey(PRINT_SCREEN, 0,44);
JIntellitype.getInstance().addHotKeyListener(new HotkeyListener(){
public void onHotKey(int arg0) {
if(arg0==PRINT_SCREEN){
doCompare();
}
}
});
}
下面是演示效果
左边图像
右边图像
显示不同(蓝色部分)
- 大小: 56.1 KB
- 大小: 57.6 KB
- 大小: 68.2 KB
分享到:
相关推荐
QQ美女找茬是一款深受玩家喜爱的休闲游戏,而“QQ美女找茬辅助工具源码”则是针对这款游戏的辅助程序的源代码。这个辅助工具可能是为了帮助玩家在游戏中更快地找到不同之处,提高游戏体验。源码的开发环境是...
【Java版QQ找茬测试版】是一个利用编程技术实现的自动化辅助工具,旨在帮助玩家在游戏中自动识别并找出图片之间的差异。这款应用的核心功能是自动找茬,减轻了玩家手动寻找不同之处的压力,尤其是在时间限制下增加了...
java编写的QQ连连助手。 运用多线程,比较两幅图片的区别
QQ美女找茬辅助工具易语言源码 .版本 2 .支持库 spec .局部变量 游戏窗口, 矩形_ .局部变量 鼠标X坐标, 整数型 .局部变量 鼠标Y坐标, 整数型 .局部变量 热键, 整数型 画板1.高度 = 450 画板1.宽度 = 508 画板1....
玩QQ美女找茬的时候主要看美女去了,找的很慢很慢,老是被虐,于是网上找了找相关资料写了这个小助手,主要是比较两副图片,然后在左侧显示出不同之处,在右边点出不同就可以了,源码和程序一并奉上,别笑话我就谢谢...
【VC实现QQ找茬助手】是一款基于Visual C++(简称VC)编程环境开发的应用程序,其主要功能是协助用户在玩QQ找茬游戏时能够快速、准确地发现两张图片之间的差异,提高游戏体验和通关效率。QQ找茬游戏通常会展示两张...
纯Java版QQ含源码和包.rar 下载后有Demo可以运行纯Java版QQ含源码和包.rar 下载后有Demo可以运行纯Java版QQ含源码和包.rar 下载后有Demo可以运行纯Java版QQ含源码和包.rar 下载后有Demo可以运行纯Java版QQ含源码和包...
qq 同步助手 JAVA 版本 社用于S40系统
【标题】"用JAVA SWING做的qq游戏大家来找茬的辅助程序"是一个基于Java Swing开发的桌面应用程序,专为QQ游戏“大家来找茬”提供辅助功能。Swing是Java的标准库,用于创建图形用户界面(GUI),在本项目中被用来构建...
QQ找茬辅助工具是一款专为QQ游戏中的"美女来找茬"和"大家来找茬"设计的软件,旨在帮助玩家在视觉识别上有困难时提供便利。该工具由作者自行编写,包含程序及其源代码,因此对编程爱好者来说,它不仅是一个实用的辅助...
QQ游戏“大家来找茬”自推出以来便吸引了大量玩家的眼球,成为了人们茶余饭后缓解压力的优选。这款游戏中,玩家将面临一项挑战:在两张极为相似的图片中,找出那些微小的差别。这项活动看似简单,实际上却能够充分...
Java版QQ是一款基于Java编程语言开发的即时通讯软件,它主要实现了文字聊天、语音通话以及视频聊天等功能,为用户提供了一种跨平台的社交体验。在本文中,我们将深入探讨Java版QQ实现这些功能背后的技术原理和相关...
Java版QQ聊天室是一款基于Java编程语言实现的即时通讯应用,它模仿了QQ群的功能,让用户可以在一个虚拟的聊天环境中进行实时交流。这个项目利用了Java的多线程技术,确保了在高并发情况下的稳定性和性能。接下来,...
【QQ找茬游戏识别小软件】是一个基于JAVA编程语言的净荷项目,名为"netBeams"。这个项目的核心功能是实现对“QQ找茬”这款游戏的自动化识别,通过技术手段辅助玩家找到游戏中的差异之处。以下是该项目涉及的几个关键...
Java版QQ(很好很强大) Java版QQ(很好很强大) Java版QQ(很好很强大)
【Java版QQ源码解析】 Java版QQ是一个基于Java Swing技术开发的仿QQ聊天工具,它巧妙地利用了Java的图形用户界面库Swing来构建交互式的聊天界面,并结合Socket编程实现了客户端与服务器之间的实时通信。这个项目...
手机QQ 2008 java版。。。。。。。。。。。。。。。。。。。。。 手机QQ 2008 java版手机QQ 2008 java版
JAVA版的欢乐斗地主哦!240*320亲测可用!
【Java版仿QQ】是一个基于Java技术实现的简易聊天应用程序,它综合运用了Java的多线程、IO流、网络编程、图形用户界面(GUI)以及集合等核心知识。这个项目旨在提供一个基础的在线聊天环境,支持一对一的单独聊天和...