Como pegar um pixel de uma imagem

Gente gostaria de saber como que faço pra pegar um pixel de uma imagem que estou usando em um programa

depois de criar uma variavel do tipo BufferedImage, fazer as operações pra ela aparecer na janela e tal…gostaria de saber como pegar um pixel desta imagem pra poder fazer um filtro da média futuramente

usei o método image.getRGB(w,h)

sendo image a variavel do tipo BufferedImage e w e h variaveis que varrem a imagem pela largura e pelo comprimento
mas n está dando certo, talvez o erro até seja outro, porque também deu estouro de array em uma operação que fiz

Grato

???

bom, tenho que pegar alguns pixels para quando for fazer o filtro da média, não ultrapassar os limites da imagem, para isso fiz alguns if e else…
só q não tenho certeza se o método é mesmo o getRGB(int,int)

Olá,

dê uma olhada no: http://www.marvinproject.org

Até mais,

Não entendi exatamente o que você deseja mas, veja se vc consegue tirar uma idéia deste código.
Se você postar o seu facilitaria.

[code]package br.com.andersonbrasil.imagem;

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

/**
*

  • @author Anderson de Sousa Brasil
    */
    public class ImagemUtil {

    public static void main(String args[]) throws IOException {

     BufferedImage preto = ImageIO.read(new File("preto.jpg"));
     BufferedImage vermelho = ImageIO.read(new File("vermelho.jpg"));
    
    
     int pretoAltura = preto.getHeight();
     int pretoLargura = preto.getWidth();
    
     int vermelhoAltura = vermelho.getHeight();
     int vermelhoLargura = vermelho.getWidth();
    
     // cria uma imagem com a altura suficiente para guardar as duas imagens: alturaDaImagem1 + alturaDaImagem2
     BufferedImage imagemSoma = new BufferedImage(pretoLargura, pretoAltura + vermelhoAltura, BufferedImage.TYPE_INT_RGB);
    
     // desenha a primeira imagem em uma imagem final
     for (int i = 0; i <= pretoLargura - 1; i++) {
         for (int j = 0; j <= pretoAltura - 1; j++) {
             imagemSoma.setRGB(i, j, preto.getRGB(i, j));
         }
     }
    
     // desenha a segunda imagem em uma "imagem final". Começando do ponto em que a primeira foi finalizada.
     for (int i = 0; i <= vermelhoLargura - 1; i++) {
         for (int j = 0; j <= vermelhoAltura - 1; j++) {
    
             imagemSoma.setRGB(i, j + (vermelhoAltura), vermelho.getRGB(i, j));
         }
     }
     // escreve a imagem final em disco
     ImageIO.write(imagemSoma, "jpg", new File("imagemSoma.jpg"));
    

    }// fim de main
    }// fim da classe[/code]

A única coisa que este código faz é unir duas imagens.



private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
BufferedImage image;

    String str = "C:/Users/Vinicius/U.F.P.B/4º Período/Processamento Digital de Imagens/1º Trabalho/Arara.jpg";
    try{
        image =  ImageIO.read(new File(str));
        ImageIcon icon = new ImageIcon(image);
        JLabel imageLabel = new JLabel(icon);
        JFrame frame = new JFrame();
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(new JScrollPane(imageLabel), BorderLayout.CENTER);
        frame.setSize(600, 400);
        frame.setVisible(true);

    int width = image.getWidth();
    int height = image.getHeight();
    frame.setTitle("Dimensões: " + height + " x " + width);
    int nbands = image.getSampleModel().getNumBands();
    Raster inputRaster = image.getData();
    int[] pixels = new int[nbands * width * height];
    inputRaster.getPixels(0, 0, width, height, pixels);

    WritableRaster teste;

    int[][] r = new int[width][height];
    int[][] g = new int[width][height];
    int[][] b = new int[width][height];
    
    int[][] mediaR = new int[width][height];
int[][] mediaG = new int[width][height];
int[][] mediaB = new int[width][height];

    Color rgb = null;
    
    
    for(int w = 0; w < width; w++){
        for(int h = 0; h < height; h++){

            rgb = new Color(image.getRGB(w,h));
            
            r[w][h] = rgb.getRed();
            g[w][h] = rgb.getGreen();
            b[w][h] = rgb.getBlue();

            teste = image.getRaster();
            
            mediaR[w][h] = (1/9 * ( r[w-1, h-1]  +  r[w-1, h]  +  r[w-1, h+1] +
                               	     + r[w , h-1]  +  r[w  , h]  +  r[w  , h+1] +
                              	     + r[w+1, h-1]  +  r[w+1, h]  +  r[w+1, h+1] ));

		

		mediaG[i][j] = 1/9 * ( g[w-1, h-1]  +  g[w-1, h]  +  g[w-1, h+1] +
                               	     + g[w , h-1]  +  g[w , h]  +  g[w , h+1] +
                              	     + g[w+1, h-1]  +  g[w+1, h]  +  g[w+1, h+1] );

		

		mediaB[i][j] = 1/9 * ( b[w-1, h-1]  +  b[w-1, h]  +  b[w-1, h+1] +
                               	     + b[w , h-1]  +  b[w , h]  +  b[w , h+1] +
                              	     + b[w+1, h-1]  +  b[w+1, h]  +  b[w+1, h+1] );

int rgb1[] = new int [3];
rgb1[0] = mediaR[w][h];
rgb1[1] = mediaG[w][h];
rgb1[2] = mediaB[w][h];
teste.setPixel(w, h,rgb1);

            }
        }
    }catch(IOException ex){}

}

ta aí o codigo…a função deve fazer um filtro da média, o filtro da media se baseia no seguinte: pega-se um ponto na imagem(faz isso com todos) aí pega todos os pontos ao seu redor, os 3 de cima…de baixo…e as laterais… soma eles e divide por 9, eh um filtro de suavização…ta dando erro nessa parte do codigo de incompatibilitade int int[][] … mas ao fazer uma variavel int pra receber o valor, q tbm eh um int…da o mesmo erro…aí ja n sei mais como fazer

Altere a linha:

[code]teste = image.getRaster();
mediaR[w][h] = (1/9 * ( r[w-1, h-1] + r[w-1, h] + r[w-1, h+1] +

  • r[w , h-1] + r[w , h] + r[w , h+1] +
  • r[w+1, h-1] + r[w+1, h] + r[w+1, h+1] ));[/code]

Para:

teste = image.getRaster(); mediaR[w][h] = (r[w - 1][h - 1] + r[w - 1][h] + r[w - 1][h + 1] + r[w][h - 1] + r[w][h] + r[w ][h + 1] + r[w + 1][ h - 1] + r[w + 1][ h]+ r[w + 1][ h + 1] );
e depois divida por 9.

Veja:
mediaR[w][h] = ( r[w - 1 , h - 1] );
mediaR[w][h] = ( r[w - 1] [ h - 1] ); // sem vírgula <---------------

Acho que isso possa resolver uma parte do problema.

n acredito q eu tinha feito isso --’
mas vlw pela ajuda, corrigiu o erro sim…mas agora está dando estouro de array…mesmo com o tratamento que eu fiz:

/* Tratamento para o caso de os pontos forem vizinhos aos limites da imagem */
if( (w == 0) && (h == 0) ){ // 1º ponto de todos: tira-se os “w-1” e “h-1”
mediaR[w][h] = ( r[0][0] + r[0][h] + r[0][h+1] +
r[w][0] + r[w][h] + r[w][h+1] +
r[w+1][0] + r[w+1][h] + r[w+1][h+1] ) / (9);

	    mediaG[w][h] = ( g[0][0]  +  g[0][h]  +  g[0][h+1] +
                                 g[w][0]  +  g[w][h]  +  g[w][h+1] +
                                 g[w+1][0]  +  g[w+1][h]  +  g[w+1][h+1] ) / (9);

		mediaB[w][h] = ( b[0][0]  +  b[0][h]  +  b[0][h+1] +
                               	 b[w][0]  +  b[w][h]  +  b[w][h+1] +
                              	 b[w+1][0]  +  b[w+1][h]  +  b[w+1][h+1] ) / (9);
            }
            else if( (w == 0) && (h != 0) ){ // 1ª linha: tira-se os "w-1"
                mediaR[w][h] = ( r[0][h-1]  +  r[0][h]  +  r[0][h+1] +
                                 r[w][h-1]  +  r[w][h]  +  r[w][h+1] +
                                r[w+1][h-1]  +  r[w+1][h]  +  r[w+1][h+1] ) / (9);

		mediaG[w][h] = ( g[0][h-1]  +  g[0][h]  +  g[0][h+1] +
                                     g[w][h-1]  +  g[w][h]  +  g[w][h+1] +
                              	 g[w+1][h-1]  +  g[w+1][h]  +  g[w+1][h+1] ) / (9);

		mediaB[w][h] = ( b[0][h-1]  +  b[0][h]  +  b[0][h+1] +
                               	 b[w][h-1]  +  b[w][h]  +  b[w][h+1] +
                              	 b[w+1][h-1]  +  b[w+1][h]  +  b[w+1][h+1] ) / (9);
            }
            else if( (h == 0) && ( w != 0) ){ // 1ª coluna: tira-se os "h-1"
                mediaR[w][h] = ( r[w-1][0]  +  r[w-1][h]  +  r[w-1][h+1] +
                             r[w][0]  +  r[w][h]  +  r[w][h+1] +
                             r[w+1][0]  +  r[w+1][h]  +  r[w+1][h+1] ) / (9);

		mediaG[w][h] = ( g[w-1][0]  +  g[w-1][h]  +  g[w-1][h+1] +
                                     g[w][0]  +  g[w][h]  +  g[w][h+1] +
                              	 g[w+1][0]  +  g[w+1][h]  +  g[w+1][h+1] ) / (9);

		mediaB[w][h] = ( b[w-1][0]  +  b[w-1][h]  +  b[w-1][h+1] +
                               	 b[w][0]  +  b[w][h]  +  b[w][h+1] +
                              	 b[w+1][0]  +  b[w+1][h]  +  b[w+1][h+1] ) / (9);
            }
            else if( (w == width - 1) && (h != 0) ){ // ultima linha: tira-se os "w+1"
                mediaR[w][h] = ( r[w-1][h-1]  +  r[w-1][h]  +  r[w-1][h+1] +
                             r[w][h-1]  +  r[w][h]  +  r[w][h+1] +
                             r[0][h-1]  +  r[0][h]  +  r[0][h+1] ) / (9);

		mediaG[w][h] = ( g[w-1][h-1]  +  g[w-1][h]  +  g[w-1][h+1] +
                                     g[w][h-1]  +  g[w][h]  +  g[w][h+1] +
                              	 g[0][h-1]  +  g[0][h]  +  g[0][h+1] ) / (9);

		mediaB[w][h] = ( b[w-1][h-1]  +  b[w-1][h]  +  b[w-1][h+1] +
                               	 b[w][h-1]  +  b[w][h]  +  b[w][h+1] +
                              	 b[0][h-1]  +  b[0][h]  +  b[0][h+1] ) / (9);
            }
            else if( (h == height - 1) && (w != 0) ){ // ultima coluna: tira-se os "h+1"
                mediaR[w][h] = ( r[w-1][h-1]  +  r[w-1][h]  +  r[w-1][0] +
                             r[w][h-1]  +  r[w][h]  +  r[w][0] +
                             r[w+1][h-1]  +  r[w+1][h]  +  r[w+1][0] ) / (9);

		mediaG[w][h] = ( g[w-1][h-1]  +  g[w-1][h]  +  g[w-1][0] +
                                     g[w][h-1]  +  g[w][h]  +  g[w][0] +
                              	 g[w+1][h-1]  +  g[w+1][h]  +  g[w+1][0] ) / (9);

		mediaB[w][h] = ( b[w-1][h-1]  +  b[w-1][h]  +  b[w-1][0] +
                               	 b[w][h-1]  +  b[w][h]  +  b[w][0] +
                              	 b[w+1][h-1]  +  b[w+1][h]  +  b[w+1][0] ) / (9);
            }
            else if( (w == width - 1) && (h == height - 1) ){ // ultimo ponto: tira-se os "w+1" e "h+1"
                mediaR[w][h] = ( r[w-1][h-1]  +  r[w-1][h]  +  r[w-1][0] +
                             r[w][h-1]  +  r[w][h]  +  r[w][0] +
                             r[0][h-1]  +  r[0][h]  +  r[0][0] ) / (9);

		mediaG[w][h] = ( g[w-1][h-1]  +  g[w-1][h]  +  g[w-1][0] +
                                     g[w][h-1]  +  g[w][h]  +  g[w][0] +
                              	 g[0][h-1]  +  g[0][h]  +  g[0][0] ) / (9);

		mediaB[w][h] = ( b[w-1][h-1]  +  b[w-1][h]  +  b[w-1][0] +
                               	 b[w][h-1]  +  b[w][h]  +  b[w][0] +
                              	 b[0][h-1]  +  b[0][h]  +  b[0][0] ) / (9);
            }

            r[w][h] = mediaR[w][h];
            g[w][h] = mediaG[w][h];
            b[w][h] = mediaB[w][h];

            if(r[w][h] > 255)   r[w][h] = 255;
            if(g[w][h] > 255)   g[w][h] = 255;
            if(b[w][h] > 255)   b[w][h] = 255;
            if(r[w][h] < 0)     r[w][h] = 0;
            if(g[w][h] < 0)     g[w][h] = 0;
            if(b[w][h] < 0)     b[w][h] = 0;

            int rgb1[] = new int [3];
            rgb1[0] = r[w][h];
            rgb1[1] = g[w][h];
            rgb1[2] = b[w][h];
            teste.setPixel(w, h,rgb1);