Alterando o espaço de cores

No Java temos uma classe muito importante para se trabalhar com conversão do espaço de cores em imagens: java.awt.image.ColorConvertOp. Essa classe realiza a conversão pixel a pixel do espaço de cores. Dessa forma, podemos facilmente converter uma imagem de um espaço de cores qualquer para algum definido. É necessário apenas criar um objeto dela passando o espaço de cores de origem e o de destino e depois chamar o método filter passando as duas imagens (origem e destino).

Por exemplo, se desejamos converter uma imagem de colorida para preto e branco, basta executar o seguinte código:

		BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(),
				BufferedImage.TYPE_BYTE_BINARY);
		ColorConvertOp op = new ColorConvertOp(src.getColorModel()
				.getColorSpace(), dest.getColorModel().getColorSpace(), null);
		op.filter(src, dest);

Na linha 1 é criada uma imagem cinza não indexada (BufferedImage.TYPE_BYTE_GRAY) com o mesmo tamanho da imagem de origem (src.getWidth(), src.getHeight()). Os tipos você pode consultar no javadoc da java.awt.image.BufferedImage. Na linha 4 é criado um objeto que faz a conversão no espaço de cores e é passado os dois espaços de cores (origem e destino) a partir do ColorModel da imagem (img.getColorModel().getColorSpace()). Após isso é só invocar o método filter passando as duas imagens como parâmetro (linha 7).

Abaixo segue o resultado de conversão da bandeira do Brasil (primeira imagem), com três tipos de imagens: TYPE_BYTE_BINARY (segunda imagem), TYPE_BYTE_GRAY (terceira imagem) e TYPE_3BYTE_BGR (quarta imagem).

Brasil-Transformacao
Brasil-Transformacao

A conversão feita com o tipo TYPE_BYTE_BINARY foi utilizado no artigo do CAPTCHA para remoção do fundo.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6