Pular para o conteúdo

Lendo valores RGB de uma imagem com java

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]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *