Autor
|
Tema: Java Colores (Leído 4,797 veces)
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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.
|
|
|
En línea
|
abc
|
|
|
TriBlack
Desconectado
Mensajes: 12
|
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
|
|
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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.
|
|
|
En línea
|
abc
|
|
|
TriBlack
Desconectado
Mensajes: 12
|
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
|
|
|
En línea
|
|
|
|
TriBlack
Desconectado
Mensajes: 12
|
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 ?
|
|
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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.
|
|
|
En línea
|
abc
|
|
|
TriBlack
Desconectado
Mensajes: 12
|
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
|
|
|
En línea
|
|
|
|
|
|