Olá
Programinha para identificar valores RGB e gerar imagens pixel a pixel pelo valor RGB.
[sourcecode lang=”java”]
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.event.*;
public class IdentificadorRGB extends JFrame implements MouseMotionListener {
private JLabel l_imagem, l_red, l_green, l_blue, l_r, l_g, l_b;
private BufferedImage imagem,
img_red, img_blue, img_green;
Container c;
IdentificadorRGB() {
super(“Identificador de valores RGB pixel a pixel”);
try {
//Leitura da imagem do disco
imagem = ImageIO.read(new File(“imagem.png”));
img_blue = ImageIO.read(new File(“imagem.png”));
img_red = ImageIO.read(new File(“imagem.png”));
img_green = ImageIO.read(new File(“imagem.png”));
} catch (IOException e) {
e.printStackTrace();
}
getContentPane().setLayout(null);
c = getContentPane();
l_r = new JLabel();
l_r.setBounds(300, 0, 270, 185);
c.add(l_r);
l_g = new JLabel();
l_g.setBounds(300, 190, 270, 185);
c.add(l_g);
l_b = new JLabel();
l_b.setBounds(5, 245, 270, 185);
c.add(l_b);
l_imagem = new JLabel();
l_imagem.setIcon(new ImageIcon(imagem));
l_imagem.setBounds(0, 0, 270, 185);
c.add(l_imagem);
l_red = new JLabel();
l_red.setText(“R:”);
l_red.setBounds(5, 190, 100, 15);
c.add(l_red);
l_green = new JLabel();
l_green.setText(“G:”);
l_green.setBounds(5, 210, 100, 15);
c.add(l_green);
l_blue = new JLabel();
l_blue.setText(“B:”);
l_blue.setBounds(5, 225, 100, 15);
c.add(l_blue);
WritableRaster raster = imagem.getRaster();
int pixels[] = new int[4];
for (int i = 0; i < imagem.getWidth(); i++)
for (int j = 0; j < imagem.getHeight(); j++) {
raster.getPixel(i, j, pixels);
img_red.setRGB(i, j, setR(pixels[0] ));
img_green.setRGB(i, j, setG(pixels[1] ));
img_blue.setRGB(i, j, setB(pixels[2] ));
}
c.validate();
l_r.setIcon(new ImageIcon(img_red));
l_g.setIcon(new ImageIcon(img_green));
l_b.setIcon(new ImageIcon(img_blue));
addMouseMotionListener(this);
setSize(600, 500);
setResizable(false);
show();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/* métodos que transforma valores inteiros do RGB para um numero hexadecimal
*
* Por exemplo 255,000,255 fica em hexadecimal 0x00FF00FF
*
* O dois primeiros 00 são valores do ALPHA que é responsavel pela
* transparencia
* *
*/
private int setR(int r) {
return 0
<< 24
| ((r << 16) & 0x00FF0000)
| ((0 << 8 ) & 0x0000FF00)
| (0 & 0x000000FF);
}
private int setG(int g) {
return 0
<< 24
| ((0 << 16) & 0x00FF0000)
| ((g << 8 ) & 0x0000FF00)
| (0 & 0x000000FF);
}
private int setB(int b) {
return 0
<< 24
| ((0 << 16) & 0x00FF0000)
| ((0 << 8 ) & 0x0000FF00)
| (b & 0x000000FF);
}
public static void main(String[] args) {
new IdentificadorRGB();
}
public void mouseDragged(MouseEvent arg0) {
}
public void mouseMoved(MouseEvent arg0) {
WritableRaster raster = imagem.getRaster();
int pixels[] = new int[4];
if (arg0.getX() < imagem.getWidth()
&& arg0.getY() < imagem.getHeight()) {
raster.getPixel(arg0.getX() - 3, arg0.getY() - 23, pixels);
//Mostras os valores na tela
l_red.setText("R: " + pixels[0] );
l_green.setText("G: " + pixels[1] );
l_blue.setText("B: " + pixels[2] );
}
}
}
[/sourcecode]