Olá,
Nunca trabalhei com manipulação de imagens em Java, e agora acabei me interessando por isso. O que eu quero fazer é algo que não parece ser tão complicado, visto que as APIs da linguagem Java atendem várias demandas e necessidades do programador. Qual seria a melhor forma de transformar uma foto colorida em uma foto em preto-e-branco?
O código desse tópico está fazendo algumas coisas estranhas, como ler a altura e largura da imagem (que são int) em variáveis double, e depois fazer o cast novamente para int no construtor do bufferedimage.
Para um exemplo mais conciso e completo, dê uma olhada:
Também mostra como fazer binarização (ou seja, deixar a imagem realmente preta-e-branca).
[quote=ViniGodoy]O código desse tópico está fazendo algumas coisas estranhas, como ler a altura e largura da imagem (que são int) em variáveis double, e depois fazer o cast novamente para int no construtor do bufferedimage.
Para um exemplo mais conciso e completo, dê uma olhada:
Também mostra como fazer binarização (ou seja, deixar a imagem realmente preta-e-branca).[/quote]
Obrigado, ViniGodoy. Seu código me parece um pouco mais complicado, vou tentar entende-lo.
[quote=Andre Rosa][quote=ViniGodoy]O código desse tópico está fazendo algumas coisas estranhas, como ler a altura e largura da imagem (que são int) em variáveis double, e depois fazer o cast novamente para int no construtor do bufferedimage.
Para um exemplo mais conciso e completo, dê uma olhada:
Também mostra como fazer binarização (ou seja, deixar a imagem realmente preta-e-branca).[/quote]
Obrigado, ViniGodoy. Seu código me parece um pouco mais complicado, vou tentar entende-lo.
Obrigado.[/quote]
Não se assuste, a função que faz a conversão da imagem para preto e branco é só essa aqui, quase idêntica a que o colega postou no exemplo:
/**
* Converte a imagem para escala de cinza.
*
* @param image Imagem a ser convertida
* @return a Imagem convertida.
*/
private static BufferedImage toGrayscale(BufferedImage image) {
BufferedImage output = new BufferedImage(image.getWidth(),
image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = output.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
return output;
}
[quote=ViniGodoy][quote=Andre Rosa][quote=ViniGodoy]O código desse tópico está fazendo algumas coisas estranhas, como ler a altura e largura da imagem (que são int) em variáveis double, e depois fazer o cast novamente para int no construtor do bufferedimage.
Para um exemplo mais conciso e completo, dê uma olhada:
Também mostra como fazer binarização (ou seja, deixar a imagem realmente preta-e-branca).[/quote]
Obrigado, ViniGodoy. Seu código me parece um pouco mais complicado, vou tentar entende-lo.
Obrigado.[/quote]
Não se assuste, a função que faz a conversão da imagem para preto e branco é só essa aqui, quase idêntica a que o colega postou no exemplo:
/**
* Converte a imagem para escala de cinza.
*
* @param image Imagem a ser convertida
* @return a Imagem convertida.
*/
private static BufferedImage toGrayscale(BufferedImage image) {
BufferedImage output = new BufferedImage(image.getWidth(),
image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = output.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
return output;
}
[/quote]
Obrigado, bem mais amigável, hehe.
[quote=juliocbq]Não é certo falar preto e branco. Isso são para imagens limiarizadas(binarizadas - imagens com 2 bits por pixel).
Imagem na escala de cinza ou luminância, com apenas 8 bits por pixel(uma banda de cor).
[/quote]
Puxa, eu não sabia a diferença. O que eu procurava, então, era imagens na escala de cinza ou luminância. Feito!