Pessoal…
Como colorir determinado pixel de uma imagem e depois gravar ela?
Ex.: Em uma imagem 800X600 pintar ela inteira de vermelho, mas o pixel 50 X 50 de branco, o 80X80 de azul, o 75X97 de verde, etc???
A única coisa que consegui fazer até agora é:
[code] BufferedImage imagem = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
Graphics2D g1 = imagem.createGraphics();
g1.setColor(Color.red); //pintar o fundo dela de vermelho
g1.fillRect(0, 0, 800, 600);
g1.dispose();
try {
ImageIO.write(imagem, "jpg", new File("Imagens", "argh.jpg"));
} catch (IOException e) {
e.printStackTrace();
} [/code]
Agora quero pintar o Pixel [x,y] de alguma cor que eu quiser, tipo html (#F…)
Agradeço!
Basta vc criar um Color novo, e chamar o método fillRect
//Pinta um pixel na coordenada x, y
g1.fillRect(x, y, 1, 1)
para criar uma que você diferente basta instanciar um obejto Color passando parâmetros R, G ,B
// R G B
Color c = new Color(200, 0, 0);
[]s
Entendi…
Não tem como eu usar Color com código html tipo #fffff?
Sim é só usar o construtor que recebe 3 ints:
Color c = new Color(0xFE, 0xAB, 0x1A);
Para pintar um único pixel, use o método setRgb da classe BufferedImage. Se precisar fazer isso com eficiência, vai ter que usar o Raster:
http://javaboutique.internet.com/tutorials/rasters/
http://javaboutique.internet.com/tutorials/rasters2/
[quote=pedroroxd]Entendi…
Não tem como eu usar Color com código html tipo #fffff?[/quote]
Se tem eu não sei como fazer, cheguei a dar uma pesquisada rápida e nada encontrei.
Acho que não deve ser complicado converter o código html para RGB, caso você realmente precise da cor neste formato.
[]s
Para converter do HTML para Color, é só usar o Integer.parseInt com base 16.
O contrário é fácil também, basta usar o String.format.
Um exemplo:
String.format("%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
Preciso da ajuda de vcs…
Tipo, antes de pintar os pixels eu pinto o background de branco, assim:
BufferedImage imagem = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
g1 = imagem.createGraphics();
g1.setColor(new Color(255,255,255)); //BRANCO
g1.fillRect(0, 0, 800, 600);
Depois, pinto o primeiro pixel assim:
g1.setColor(c); //cor que eu quero
g1.fillRect(0, 0, 1, 1);
System.out.println(c.getRGB()); // Só pra Teste
g1.dispose();
Olha a diferença…
Quando eu imprimo nessa hora acima o RGB, a saída é -2302756
Depois eu vou fazer a leitura do arquivo, e mando ler o pixel 0,0 assim:
System.out.println(img1gp.getRGB(0, 0));
e a saída é -1842205
Todo o resto da imagem a saída é -1 (pq é branco)… O primeiro pixel é o único pintado… Porque dá essa diferença no RGB???
Por que você está usando um fillRect para pintar um único pixel? Não é melhor usar o setRGB, como eu indiquei?
O fillRect pode sofrer suavização. Normalmente isso só é feito se você ligar a qualidade máxima de gráficos, mas não é um método tão confiável se você quiser precisão de cores.
Outra coisa. Faz pouco sentido exibir o número do getRGB para decimal. O ideal mesmo é imprimir em hexadecimal, usando o Integer.toString() com base 16.
Ou, usando o método de print que eu passei acima.
Com o setRGB como ficaria?
Tipo, pintar o pixel 0,0 com a cor 248 248 255…
E depois para ler?
Leio com o getRGB mesmo? “img1gp.getRGB(0, 0)”