sábado, 10 de março de 2012

Processamento de imagem

   Algumas pessoas têm a vontade de saber como as imagens são representadas e como manipulá-las. Basicamente, uma imagem é uma matriz formada por pixels. Cada pixel é representado por um inteiro de 32 bit da seguinte maneira:


00000000 00000000 00000000 11111111
 
^ Alpha  ^Red     ^Green   ^Blue

      Os valores do alpha, red, green e blue são valores inteiros entre 0 e 255.

        O valor máximo para o elemento alfa significa que o pixel será totalmente opaco e o valor mínimo significa transparência total.
   
   Nesta postagem, vamos mostrar como fazer uma transformação simples chamada negativo. O objetivo desta transformação é “inverter” a valor de cada cor em cada pixel da imagem.

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class pdi {
 public static void main(String args[] ) throws IOException{
   BufferedImage imagem = null;
   imagem = ImageIO.read(
    new File("C:\\Users\\ufc\\workspace\\PDI\\src\\tux.png")
   );
  
   int w = imagem.getWidth();
   int h = imagem.getHeight();
   //retorna um vetor inteiro representando os pixels da imagem
   int pixels[] = imagem.getRGB(0, 0, w, h, null, 0, w);

   for (int col = 0; col < w; col++) {
     for (int lin = 0; lin < h; lin++) {
  //Pega a cor em cada pixel
  Color c = new Color(pixels[lin*w + col]);
  pixels[lin*w + col] = new 
  Color(255-c.getRed(),255-c.getBlue(),255-c.getGreen()).getRGB();
      }
 }
        //seta um vetor inteiro representando os pixels da imagem
 imagem.setRGB(0, 0, w, h, pixels, 0, w);
 ImageIO.write(imagem, "PNG", 
        new File("C:\\Users\\ufc\\workspace\\PDI\\src\\tux2.png"));
 }
}

Aplicamos este algoritmo na seguinte imagem:


A nova imagem gerada pelo algoritmo é essa aqui:





Um comentário:

Anônimo disse...

Show!

David Sena