Limpar BufferedImage

Galera, to precisando limpar um BufferedImage, procurei na internet e achei algumas soluções não muito boas:

Solução 1:

Todas as vezes que precisar limpar um buffer eu crio um novo objeto =P

Solução 2:

//Fazer um for do 0,0 ateh width, height e pintar todos os pixels…

g2D.setComposite( AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0,0,width,height);
g2D.fill(rect);

Solução 3
Essa parece boa, está disponível em um fórum aki:

In my case, I found that I needed to control a lot of pixels directly,
so I created an external JNI assembler library to allow me to
quickly change pixels.

Mas infelizmente o cara naum colocou o código =(
Alguém ja fez algo pra limpar BufferedImage?
obrigado

solução 2, repintar a tela e a solução que é + usada pelo menos quando eu li o killer game programming (acho que é esse o nome ) , lembro de eles usarem esta tecnica.

Ok. Obrigado, então acho vou fzer isso msm

[quote=felixcomputer]Galera, to precisando limpar um BufferedImage, procurei na internet e achei algumas soluções não muito boas:

Solução 1:

Todas as vezes que precisar limpar um buffer eu crio um novo objeto =P

Solução 2:

//Fazer um for do 0,0 ateh width, height e pintar todos os pixels…

g2D.setComposite( AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0,0,width,height);
g2D.fill(rect);

Solução 3
Essa parece boa, está disponível em um fórum aki:

In my case, I found that I needed to control a lot of pixels directly,
so I created an external JNI assembler library to allow me to
quickly change pixels.

Mas infelizmente o cara naum colocou o código =(
Alguém ja fez algo pra limpar BufferedImage?
obrigado[/quote]

Enquanto eu fazia o meu software de acesso remoto em Java, o “Satan-AnyWhere”, acabei pesquisando uns meios de se manipular rapidamente o conteúdo dos pixels de BufferedImage’s.
Primeiro, deve-se saber qual o “DataType” do DataBuffer do WritableRaster do BufferedImage, o que pode ser feito via “BufferedImage.getRaster().getDataBuffer().getDataType()”, que vai te retornar um inteiro que tu precisa comparar com as “constantes” da classe DataBuffer.
Sabendo qual o “DataType”, dê o cast para classe filha de DataBuffer correspondente (DataBufferByte, DataBufferShort, DataBufferInt) ao retorno de “BufferedImage.getRaster().getDataBuffer()”.
Depois, é só manipular o conteúdo do retorno de método “getBankData()” da classe filha de DataBuffer correspondente, que normalmente é um array de array de bytes, shorts ou ints, conhecido também como array bidimensional. Os pixels estariam nesse array bidimensional. O primeiro índice do array bidimensional indica qual o “bank” e o segundo índice indica qual a posição do dado no “bank”.
Se você achar esse jeito muito complicado, a classe filha de DataBuffer correspondente também tem outros métodos para manipulação dos dados dentro dela mais interessantes.

Inté.

Olá amigo, obrigado pela sua resposta… estarei testando a solução \o/