BufferedImage [Duvidas ?]

E ai pessoal !
Tudo Beleza ?!

Estou com duvidas em relação ao BufferedImage:

BufferedImage é uma class ??

Tem como cria um BufferedImage para pintar e repintar nele varais vezes ?

Classe Figuras


package jog;   

import javax.swing.*;     
import java.awt.*;     
import java.awt.image.*;     

public class Figuras {     

	static BufferedImage buffer = new BufferedImage( 350, 350, BufferedImage.TRANSLUCENT );

	// CIRCULO //
	static ImageIcon Circulo() {     
		Graphics2D g = buffer.createGraphics();     
		g.setColor( Color.RED);     
		g.fillOval( 0, 0, 50, 50 );     

		return new ImageIcon( buffer );     
	}   

	// QUADRADO //
	public static ImageIcon Quadrado() {     
		Graphics2D g = buffer.createGraphics();     
		g.setColor( Color.YELLOW );     
		g.fillRect( 0, 0, 50, 50 );     

		return new ImageIcon( buffer );     
	}     
	
}

Janela


 
package jog;

import javax.swing.*;   
import java.awt.*;   
import java.awt.image.*;   
  
public class Janela {   
    public static void main(String[] args) {   
        JFrame frm = new JFrame("Teste Imagem");   
        JPanel pan = new JPanel();   
        JLabel lbl = new JLabel( Figuras.Circulo() );   
        pan.add( lbl );   
        frm.getContentPane().add( pan );   
        frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   
        frm.pack();   
        frm.show();   
    }   
       
}  

OBRIGADO !!!

Olá!

BufferedImage é uma classe sim!

mas eu acho que não dá pra pintar e repintar exatamente num objeto dessa classe, mas dá pra criar uma Image ou um Graphics e usar o .draw(),
tem um cara aqui do fórum que entende bastante disso, é o ViniGodoy, escreveu uns artigos interessantes. Dá uma procurada ai pelo forum que você
acha,

Abraço

É bem fácil pintar num BufferedImage:

[code]//Criação de uma imagem RGB sem transparência
BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
//Obtenção do objeto graphics
Graphics2d g2d = img.createGraphics();
//faça a pintura aqui

//Liberação do objeto graphics
g2d.dispose();
[/code]

Agora, você está compartilhando o mesmo BufferedImage entre 2 image icons diferentes. Não sei se o ImageIcon tira cópia da imagem, mas acho pouco provável.
Também não vi muito propósito em fazer isso.

Se você quer fazer um jogo, sugiro fortemente que você leia os tutoriais do Ponto V:
http://www.pontov.com.br/site/java/47-javageral
http://www.pontov.com.br/site/java/48-java2d

Oi Galera, queria tirar uma dúvida com o seguinte código. Ele serve para redimensionar uma imagem obtida por uma JFileChooser, e essa imagem é armazenada pelo BufferedImage,
o que preciso é redimensionar pela metade, e pelo quarto do tamanho da imagem original. Quando executo, redimensiona pela metade, e cria o arquivo na memoria, e a dividido por 4, apenas fica salvo, mas aparece em preto. Alguém sabe me explicar o que acontece? O que falta, ou se tem algo em lugar errado?

Sou iniciante em processamento de Imagem digital e gostaria de uma ajudinha. Obrigada

-------------------> Segue o codigo abaixo

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;

public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
JFileChooser arquivo = new JFileChooser();
arquivo.showOpenDialog(arquivo);
String caminho = arquivo.getSelectedFile().getAbsolutePath();

    BufferedImage input = ImageIO.read(new File(caminho));
    BufferedImage img =  new BufferedImage(input.getWidth(),input.getHeight(),BufferedImage.TYPE_BYTE_GRAY);


   
    Graphics2D g2d = img.createGraphics();
    g2d.drawImage(input,0,0,null);
    ImageIO.write(img,"PNG",new File("original.png"));
   WritableRaster raster = img.getRaster();


    int altura = input.getHeight();
    int largura = input.getWidth();

   
    BufferedImage metade = new BufferedImage((input.getWidth()/2),(input.getHeight()/2),BufferedImage.TYPE_BYTE_GRAY);
    
    WritableRaster imagem = metade.getRaster();

   
    for(int h = 0; h < altura; h = h+2)
    {
        for(int w = 0; w < largura;w = w+2)
        {
            imagem.setSample(w/2, h/2 , 0, raster.getSample(w, h, 0));
        }
    }
    // redimensionado
    ImageIO.write(metade,"PNG",new File("metade.png"));



    g2d.drawImage(input,0,0,null);
    ImageIO.write(img,"PNG",new File("original.png"));

 

     BufferedImage quarta = new BufferedImage((input.getWidth()/4),(input.getHeight()/4),BufferedImage.TYPE_BYTE_GRAY);

    for(int h = 0; h < altura; h = h+4)
    {
        for(int w = 0; w < largura;w = w+4)
        {
            imagem.setSample(w/4, h/4 , 0, raster.getSample(w, h, 0));
        }
    }
  
    ImageIO.write(quarta,"PNG",new File("quarta.png"));
    
}

}