Java DIP - Pixels de imagem
Uma imagem contém uma matriz bidimensional de pixels. Na verdade, é o valor desses pixels que constituem uma imagem. Normalmente, uma imagem pode ser colorida ou em tons de cinza.
Em Java, a classe BufferedImage é usada para lidar com imagens. Você precisa ligargetRGB() método do BufferedImage classe para obter o valor do pixel.
Obtendo valor de pixel
O valor do pixel pode ser recebido usando a seguinte sintaxe -
Color c = new Color(image.getRGB(j, i));
Obtendo Valores RGB
O método getRGB()toma o índice de linha e coluna como parâmetro e retorna o pixel apropriado. No caso de imagem colorida, ele retorna três valores que são (Vermelho, Verde, Azul). Eles podem ser obtidos da seguinte forma -
c.getRed();
c.getGreen();
c.getBlue();
Obtendo largura e altura da imagem
A altura e largura da imagem podem ser obtidas chamando o getWidth() e getHeight()métodos da classe BufferedImage. Sua sintaxe é fornecida abaixo−
int width = image.getWidth();
int height = image.getHeight();
Além desses métodos, existem outros métodos suportados na classe BufferedImage. Eles são descritos resumidamente-
Sr. Não. | Método e Descrição |
---|---|
1 | copyData(WritableRaster outRaster) Ele calcula uma região retangular arbitrária de BufferedImage e a copia em um WritableRaster especificado. |
2 | getColorModel() Ele retorna ColorModel de uma imagem. |
3 | getData() Ele retorna a imagem como um grande bloco. |
4 | getData(Rectangle rect) Ele calcula e retorna uma região arbitrária da BufferedImage. |
5 | getGraphics() Este método retorna um Graphics2D, mas está aqui para compatibilidade com versões anteriores. |
6 | getHeight() Ele retorna a altura do BufferedImage. |
7 | getMinX() Ele retorna a coordenada x mínima deste BufferedImage. |
8 | getMinY() Ele retorna a coordenada y mínima deste BufferedImage. |
9 | getRGB(int x, int y) Ele retorna um pixel inteiro no modelo de cor RGB padrão (TYPE_INT_ARGB) e espaço de cor sRGB padrão. |
10 | getType() Ele retorna o tipo de imagem. |
Exemplo
O exemplo a seguir demonstra o uso da classe java BufferedImage que exibe pixels de uma imagem de tamanho (100 x 100) -
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
class Pixel {
BufferedImage image;
int width;
int height;
public Pixel() {
try {
File input = new File("blackandwhite.jpg");
image = ImageIO.read(input);
width = image.getWidth();
height = image.getHeight();
int count = 0;
for(int i=0; i<height; i++) {
for(int j=0; j<width; j++) {
count++;
Color c = new Color(image.getRGB(j, i));
System.out.println("S.No: " + count + " Red: " + c.getRed() +" Green: " + c.getGreen() + " Blue: " + c.getBlue());
}
}
} catch (Exception e) {}
}
static public void main(String args[]) throws Exception {
Pixel obj = new Pixel();
}
}
Resultado
Quando você executa o exemplo acima, ele imprime os pixels da imagem a seguir -
Original Image
Pixels Output
Se você rolar para baixo a saída, o seguinte padrão é visto -