Título: Java Colores
Publicado por: TriBlack en 14 Agosto 2013, 22:47 pm
Buenas... me gustaria saber si existe algun metodo en java para tomar el color de algo al dar un click me explico xD que por ejemplo de click en el boton de "Inicio" en el Windows y me de su color en hexadecimal o decimal... Gracias de antemano :)
Título: Re: Java Colores
Publicado por: 1mpuls0 en 14 Agosto 2013, 23:27 pm
try { Color color = robot. getPixelColor(500, 500); System. out. println("Red = " + color. getRed()); System. out. println("Green = " + color. getGreen()); System. out. println("Blue = " + color. getBlue()); e.printStackTrace(); }
Con mouseClicked obtienes las coordenadas donde se hizo clic. Saludos.
Título: Re: Java Colores
Publicado por: TriBlack en 15 Agosto 2013, 00:13 am
try { Color color = robot. getPixelColor(500, 500); System. out. println("Red = " + color. getRed()); System. out. println("Green = " + color. getGreen()); System. out. println("Blue = " + color. getBlue()); e.printStackTrace(); }
Con mouseClicked obtienes las coordenadas donde se hizo clic. Saludos. Muchas gracias amigo :) ... me gustaria hacer otra pregunta y disculpa tantas molestas... Se puede hacer que java detecte en tiempo real los colores y con la clase Robot mueva al mouse a dicho color ? Me explicare mejor xD por ejemplo que de click en todo el color rojo que se consiga en la pantalla pero de manera automatica algo parecido a un bot nose si me entiendes :-\
Título: Re: Java Colores
Publicado por: 1mpuls0 en 15 Agosto 2013, 05:58 am
Algo así podría servirte. package Intermediate; import java.awt.Color; import java.awt.Robot; import java.awt.AWTException; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class ClickMouse extends javax. swing. JFrame { public static void main (String args []) { try { BufferedImage bufferedImage = robot. createScreenCapture(captureSize ); marchThroughImage(bufferedImage); /*File outputfile = new File("image.jpg"); ImageIO.write(bufferedImage, "jpg", outputfile);*/ e.printStackTrace(); } /*catch (IOException e) { e.printStackTrace(); }*/ } int w = image.getWidth(); int h = image.getHeight(); System. out. println("width, height: " + w + ", " + h ); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { System. out. println("x,y: " + j + ", " + i ); int pixel = image.getRGB(j, i); printPixelARGB(pixel); } } } public static void printPixelARGB(int pixel) { int alpha = (pixel >> 24) & 0xff; int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel) & 0xff; System. out. println("argb: " + alpha + ", " + red + ", " + green + ", " + blue ); } }
Lo que hace primero es hacer una captura de pantalla, después la guarda en el buffer y de ahí muestra el rgb de los pixeles. Podrías ajustarlo para guardarlo en un array, además de la posición y después compararlo con el color que definas. Espero que sea algo parecido a lo que necesitas. Saludos.
Título: Re: Java Colores
Publicado por: TriBlack en 16 Agosto 2013, 04:21 am
Algo así podría servirte. package Intermediate; import java.awt.Color; import java.awt.Robot; import java.awt.AWTException; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class ClickMouse extends javax. swing. JFrame { public static void main (String args []) { try { BufferedImage bufferedImage = robot. createScreenCapture(captureSize ); marchThroughImage(bufferedImage); /*File outputfile = new File("image.jpg"); ImageIO.write(bufferedImage, "jpg", outputfile);*/ e.printStackTrace(); } /*catch (IOException e) { e.printStackTrace(); }*/ } int w = image.getWidth(); int h = image.getHeight(); System. out. println("width, height: " + w + ", " + h ); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { System. out. println("x,y: " + j + ", " + i ); int pixel = image.getRGB(j, i); printPixelARGB(pixel); } } } public static void printPixelARGB(int pixel) { int alpha = (pixel >> 24) & 0xff; int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel) & 0xff; System. out. println("argb: " + alpha + ", " + red + ", " + green + ", " + blue ); } }
Lo que hace primero es hacer una captura de pantalla, después la guarda en el buffer y de ahí muestra el rgb de los pixeles. Podrías ajustarlo para guardarlo en un array, además de la posición y después compararlo con el color que definas. Espero que sea algo parecido a lo que necesitas. Saludos. Gracias amigo me ha servido mucho... y si las iré guardando en arrays tanto los colores comos las coordenadas para luego mover el mouse a esa coordenada ^^ de nuevo muchas gracias :D
Título: Re: Java Colores
Publicado por: TriBlack en 21 Agosto 2013, 04:36 am
Algo así podría servirte. package Intermediate; import java.awt.Color; import java.awt.Robot; import java.awt.AWTException; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class ClickMouse extends javax. swing. JFrame { public static void main (String args []) { try { BufferedImage bufferedImage = robot. createScreenCapture(captureSize ); marchThroughImage(bufferedImage); /*File outputfile = new File("image.jpg"); ImageIO.write(bufferedImage, "jpg", outputfile);*/ e.printStackTrace(); } /*catch (IOException e) { e.printStackTrace(); }*/ } int w = image.getWidth(); int h = image.getHeight(); System. out. println("width, height: " + w + ", " + h ); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { System. out. println("x,y: " + j + ", " + i ); int pixel = image.getRGB(j, i); printPixelARGB(pixel); } } } public static void printPixelARGB(int pixel) { int alpha = (pixel >> 24) & 0xff; int red = (pixel >> 16) & 0xff; int green = (pixel >> 8) & 0xff; int blue = (pixel) & 0xff; System. out. println("argb: " + alpha + ", " + red + ", " + green + ", " + blue ); } }
Lo que hace primero es hacer una captura de pantalla, después la guarda en el buffer y de ahí muestra el rgb de los pixeles. Podrías ajustarlo para guardarlo en un array, además de la posición y después compararlo con el color que definas. Espero que sea algo parecido a lo que necesitas. Saludos. Buenas amigo... la verdad tu metodo me ha funcionado pero es algo lento :S ya que la imagen es una 800 * 600 y podras imaginar lo que tarde en recorrerla pixel por pixel ¿ No existe otro metodo XD ?
Título: Re: Java Colores
Publicado por: 1mpuls0 en 21 Agosto 2013, 16:31 pm
No sé que tiempo te tomó en recorrer la imagen pero en mi caso fue una imagen mayor y por lo que debe hacer el algoritmo es un tiempo considerablemente aceptado.
No sé si existe otro método.
Saludos.
Título: Re: Java Colores
Publicado por: TriBlack en 22 Agosto 2013, 18:38 pm
No sé que tiempo te tomó en recorrer la imagen pero en mi caso fue una imagen mayor y por lo que debe hacer el algoritmo es un tiempo considerablemente aceptado.
No sé si existe otro método.
Saludos.
Buenas amigo he conseguido otro metodo y es mas rapido por lo que he visto solo tengo un problema el valor que arroja lo da en argb y en negativo de casualidad sabes como pasarlo de argb a rgb ¿? Aqui el metodo int[][] result = new int[height][width]; if (hasAlphaChannel) { final int pixelLength = 4; for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) { int argb = 0; argb += (((int) pixels[pixel] & 0xff) << 24); // alpha argb += ((int) pixels[pixel + 1] & 0xff); // blue argb += (((int) pixels[pixel + 2] & 0xff) << 8); // green argb += (((int) pixels[pixel + 3] & 0xff) << 16); // red result[row][col] = argb; col++; if (col == width) { col = 0; row++; } } } else { final int pixelLength = 3; for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) { int argb = 0; argb += -16777216; // 255 alpha argb += ((int) pixels[pixel] & 0xff); // blue argb += (((int) pixels[pixel + 1] & 0xff) << 8); // green argb += (((int) pixels[pixel + 2] & 0xff) << 16); // red result[row][col] = argb; col++; if (col == width) { col = 0; row++; } } } return result; }
Todo queda guardado en la matriz pero si la muestras los resultados son numeros negativos y en arbg como te dije arriba :S
|