Java???????????
???????????? ???????[ 2014/12/11 10:48:36 ] ????????JAVA ??? ???????
35 public ImageFindDemo(String keyImagePath) {
36 screenShotImage = this.getFullScreenShot();
37 keyImage = this.getBfImageFromPath(keyImagePath);
38 screenShotImageRGBData = this.getImageGRB(screenShotImage);
39 keyImageRGBData = this.getImageGRB(keyImage);
40 scrShotImgWidth = screenShotImage.getWidth();
41 scrShotImgHeight = screenShotImage.getHeight();
42 keyImgWidth = keyImage.getWidth();
43 keyImgHeight = keyImage.getHeight();
44
45 //???????
46 this.findImage();
47
48 }
49
50 /**
51 * ??????
52 * @return ????BufferedImage
53 */
54 public BufferedImage getFullScreenShot() {
55 BufferedImage bfImage = null;
56 int width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
57 int height = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
58 try {
59 Robot robot = new Robot();
60 bfImage = robot.createScreenCapture(new Rectangle(0?? 0?? width?? height));
61 } catch (AWTException e) {
62 e.printStackTrace();
63 }
64 return bfImage;
65 }
66
67 /**
68 * ????????????????
69 * @param keyImagePath - ??·??
70 * @return ????????BufferedImage????
71 */
72 public BufferedImage getBfImageFromPath(String keyImagePath) {
73 BufferedImage bfImage = null;
74 try {
75 bfImage = ImageIO.read(new File(keyImagePath));
76 } catch (IOException e) {
77 e.printStackTrace();
78 }
79 return bfImage;
80 }
81
82 /**
83 * ????BufferedImage?????RGB????
84 * @param bfImage
85 * @return
86 */
87 public int[][] getImageGRB(BufferedImage bfImage) {
88 int width = bfImage.getWidth();
89 int height = bfImage.getHeight();
90 int[][] result = new int[height][width];
91 for (int h = 0; h < height; h++) {
92 for (int w = 0; w < width; w++) {
93 //???getRGB(w?? h)?????????????ARGB????????????????????RGB???????????ARGB?????RGB????bufImg.getRGB(w?? h) & 0xFFFFFF??
94 result[h][w] = bfImage.getRGB(w?? h) & 0xFFFFFF;
95 }
96 }
97 return result;
98 }
99
100
101 /**
102 * ??????
103 */
104 public void findImage() {
105 findImgData = new int[keyImgHeight][keyImgWidth][2];
106 //???????????????????
107 for(int y=0; y<scrShotImgHeight-keyImgHeight; y++) {
108 for(int x=0; x<scrShotImgWidth-keyImgWidth; x++) {
109 //???????????磬?????????????????????????????
110 //?ж?????????????????B??????????????????????
111 //???????????????????Χ??????е?????????????е????б???
112 if((keyImageRGBData[0][0]^screenShotImageRGBData[y][x])==0
113 && (keyImageRGBData[0][keyImgWidth-1]^screenShotImageRGBData[y][x+keyImgWidth-1])==0
114 && (keyImageRGBData[keyImgHeight-1][keyImgWidth-1]^screenShotImageRGBData[y+keyImgHeight-1][x+keyImgWidth-1])==0
115 && (keyImageRGBData[keyImgHeight-1][0]^screenShotImageRGBData[y+keyImgHeight-1][x])==0) {
116
117 boolean isFinded = isMatchAll(y?? x);
118 //?????????????????????????????????????λ????????????????????顣
119 if(isFinded) {
120 for(int h=0; h<keyImgHeight; h++) {
121 for(int w=0; w<keyImgWidth; w++) {
122 findImgData[h][w][0] = y+h;
123 findImgData[h][w][1] = x+w;
124 }
125 }
126 return;
127 }
128 }
129 }
130 }
131 }
132
133 /**
134 * ?ж????????????????Χ????????????????С???????????
135 * @param y - ????????????????????????????y????
136 * @param x - ????????????????????????????x????
137 * @return
138 */
139 public boolean isMatchAll(int y?? int x) {
140 int biggerY = 0;
141 int biggerX = 0;
142 int xor = 0;
143 for(int smallerY=0; smallerY<keyImgHeight; smallerY++) {
144 biggerY = y+smallerY;
145 for(int smallerX=0; smallerX<keyImgWidth; smallerX++) {
146 biggerX = x+smallerX;
147 if(biggerY>=scrShotImgHeight || biggerX>=scrShotImgWidth) {
148 return false;
149 }
150 xor = keyImageRGBData[smallerY][smallerX]^screenShotImageRGBData[biggerY][biggerX];
151 if(xor!=0) {
152 return false;
153 }
154 }
155 biggerX = x;
156 }
157 return true;
158 }
159
160 /**
161 * ??????????????????
162 */
163 private void printFindData() {
164 for(int y=0; y<keyImgHeight; y++) {
165 for(int x=0; x<keyImgWidth; x++) {
166 System.out.print("("+this.findImgData[y][x][0]+"?? "+this.findImgData[y][x][1]+")");
167 }
168 System.out.println();
169 }
170 }
171
172
173 public static void main(String[] args) {
174 String keyImagePath = "D:/key.png";
175 ImageFindDemo demo = new ImageFindDemo(keyImagePath);
176 demo.printFindData();
177 }
178
179 }
???????????????????????????????в???????????????????????????????????????????и??·????????????4??????Χ?????????????????????????90%????????????????????0.9??
??????????????????Ч?????????????????????ó????в????????Ч?????????????????????£???????????и???????????????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11