Imagem preto e branco (Transformar)

1 resposta
pedroroxd

Pessoal...
Tem como passar uma imagem para preto e branco?

Pq eu tenho um programa que procura certa coisa na tela, e se achar, ele a move para tar lugar, com 1 robot... Mas existe ela de várias cores... Por isso o ideal seria passar ela para preto e branco, em vez de comparar com várias imagens... Postei uma parte de meu código para vcs verem (DE UMA OLHADA NA LINHA 106):
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.lang.Thread.State;

import javax.imageio.ImageIO;


public class PegaGps {

	private BufferedImage ball1
	private BufferedImage img1gp, img2gp, img3gp, img4gp, img5gp, img6gp, img7gp, img8gp
	private BufferedImage[] variasimagens;
	private Robot robot;
	private int padLeft, padTop, w, h;
	private boolean flag;
	private TSThread t = new TSThread();

	public void setflag(boolean m) {
		flag = m;
		
		if (flag) {
			if (!t.getState().equals(State.TIMED_WAITING)) {
				System.out.println("Esperando 5 segundos...");
				try {
					Thread.sleep(5000);
					System.out.println("On");
				} catch (InterruptedException e) {
				}
				t = new TSThread();
			}
			t.start();
		}
	}

	public PegaGps() {

		padLeft = 1114;
		padTop = 732;
		w = 35;
		h = 35;

		try {
			img1 = ImageIO.read(new File("Imagens", "image1gp.png"));
			img2 = ImageIO.read(new File("Imagens", "image2gp.png"));
			img3 = ImageIO.read(new File("Imagens", "image3gp.png"));
			img4 = ImageIO.read(new File("Imagens", "image4gp.png"));
			img5 = ImageIO.read(new File("Imagens", "image5gp.png"));
			img6 = ImageIO.read(new File("Imagens", "image6gp.png"));
			img7 = ImageIO.read(new File("Imagens", "image7gp.png"));
			img8 = ImageIO.read(new File("Imagens", "image8gp.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}

		try {
			robot = new Robot();
		} catch (AWTException e) {
			e.printStackTrace();
		}

		BufferedImage[] listagps = new BufferedImage[] { img1gp, img2gp,
				img3gp, img4gp, img5gp, img6gp, img7gp, img8gp };

		this.variasimagens = listagps;
	}

	class TSThread extends Thread {

		boolean result;

		public void run() {
			while (flag) {
				ball1 = robot.createScreenCapture(new Rectangle(padLeft,
						padTop, w, h));

				for (int z = 0; z < variasimagens.length; z++) {
					result = compareImage(variasimagens[z], ball1); //compara as imagens

					if (result == true) {
						// faz um tanto de coisa com o robot, movendo, clicando, delay
					}

				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		}
	}
	
	private boolean compareImage(BufferedImage image1, BufferedImage image2) {
		if (image1.getWidth() != image2.getWidth()
				|| image1.getHeight() != image2.getHeight()) {
			return false;

		}

//COMPARA VARIOS PIXELS DAS IMAGENS, QUERIA QUE A COR NÃO FOSSE IMPORTANTE... PASSAR TUDO PARA PRETO E BRANCO.
		for (int x = 5; x < image1.getWidth() - 5; x++) {
			for (int y = 5; y < image1.getHeight() - 5; y++) {
				if (image1.getRGB(x, y) != image2.getRGB(x, y)) {
					return false;
				}
			}
		}
		return true;
	}

}

1 Resposta

pedroroxd

Talvez não tenha ficado claro.
Tenho uma classe que fica batendo foto de 1 quadrado da tela de 1 robot (imagine que nesse quadrado tenha uma imagem de um penguin amarelo).
Então eu comparo a imagem do penguin amarelo com a que eu tenho na pasta, e se for igual, ele faz algo com o penguin.

Mas existem penguins de todas as cores, não só amarelo, mas o desenho deles é sempre o mesmo, por isso tenho a necessidade de “ignorar” a cor do penguin.
Uma das soluções que eu pensei, é que quando eu bater a foto, passar ela para preto e branco, e comparar com a da pasta (passada para preto e branco também)

Vlws !

Criado 30 de março de 2010
Ultima resposta 31 de mar. de 2010
Respostas 1
Participantes 1