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.
[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.