Diferença entre os tipos "BufferedImage" e "Image"

8 respostas
Linkel

Aí, galera…
Alguém sabe me explicar qual a real diferença entre BufferedImage e Image???
Numa implementação de apresentação de imagem em JPanel modifiquei do tipo BufferedImage para Image para testar se funcionava e aparentemente continuou fazendo a mesma coisa… Com certeza existe uma plausível diferença; alguém sabe???
Um abraço!

8 Respostas

victorwss

public class BufferedImage extends Image implements WritableRenderedImage, Transparency

Linkel

Não deu pra sakar ainda…

victorwss

BufferedImage é um Image.

Ou seja, se você passa um BufferedImage para uma API que recebe um Image, sem problema. Se passa algum outro tipo de Image, tá ok também.

Se você tem uma referência de Image e coloca um BufferedImage, ok.

Se você tem uma variável do tipo BufferedImage e muda ela para o tipo Image, na maioria dos casos não haverá problema.

Mas há dois detalhes importantes: WritableRenderedImage. Ou seja, você pode alterar a imagem.
E Transparency. Ou seja, a imagem não é um simples retângulo com pixels coloridos. É possível definir-se pixeis transparentes (ou translucentes) que permitem compor imagens mais sofisticadas quando uma imagem é desenhada sobre outra.

Linkel

Value, brother!
E é basicamente isso? Só isso?
Então para criar uma imagem redimensionável eu utilizo o BufferedImage, por exemplo???
E se eu quiser escrever por cima de uma imagem? Tem como com BufferedImage???
A transparência será que me permite criar uma imagem com camadas???
Eu posso ter uma camada de imagem e outra de Texto?

Grato, se me responder…
Um abraço!

victorwss

Linkel:
Value, brother!
E é basicamente isso? Só isso?
Então para criar uma imagem redimensionável eu utilizo o BufferedImage, por exemplo???
E se eu quiser escrever por cima de uma imagem? Tem como com BufferedImage???
A transparência será que me permite criar uma imagem com camadas???
Eu posso ter uma camada de imagem e outra de Texto?

Grato, se me responder…
Um abraço!

Redimensionável? Isso não tem nada a ver com redimensionar a imagem.

Acho que você confundiu alterar a imagem com redimensionar a imagem. Eu quis dizer alterar no sentido de mudar a cor dos pixels dela.

ViniGodoy

BufferedImage é uma imagem em memória.

Com ela lá, você pode:

  1. Desenhar sobre ela;
  2. Aplicar efeitos;
  3. Desenha-la em outra BufferedImage (aí sim, aplicando rotações, redimensionamento, etc).

A classe Image representa uma imagem qualquer. Essa imagem pode estar em memória (e ser uma BufferedImage) em disco, num site remoto, etc. É por isso que a maioria dos métodos de draw recebe um ImageObserver. No caso de uma imagem remota, pode-se levar muito tempo entre o comando draw ser dado, e a imagem efetivamente ser desenhada. Ela pode ter que ser baixada de outro lugar, por exemplo.

Existe também as VolatileImages, que são imagens na memória de video. A memória de vídeo é controlada pela GPU, que pode ser apagada a qualquer momento (e daí o nome “Volatile”). O contexto gráfico da GPU se perde sempre que há troca de contexto gráfico, o que pode acontecer num simples ALT+TAB.

O BufferedImage é a classe ideal para se manipular imagens. Atualmente, não se recomenda o uso de outras classes. Ela também gerencia automaticamente o envio para a placa de vídeo e a recuperação de contexto, unindo o benefício das imagens voláteis (rápida renderização), sem o malefício dela sumir da memória.

Linkel

Redimensionável? Isso não tem nada a ver com redimensionar a imagem.
Acho que você confundiu alterar a imagem com redimensionar a imagem. Eu quis dizer alterar no sentido de mudar a cor dos pixels dela.

Calma, brother!
Só fiz uma pergunta, porque não havia ficado claro o que eu poderia fazer de modificações…
Grila não, rsrsrsrs…
Um abraço!

Linkel

quote
Com ela lá, você pode:

  1. Desenhar sobre ela;
  2. Aplicar efeitos;
  3. Desenha-la em outra BufferedImage (aí sim, aplicando rotações, redimensionamento, etc).
    (…)
    O BufferedImage é a classe ideal para se manipular imagens. Atualmente, não se recomenda o uso de outras classes. Ela também gerencia automaticamente o envio para a placa de vídeo e a recuperação de contexto, unindo o benefício das imagens voláteis (rápida renderização), sem o malefício dela sumir da memória. [/quote]
    Fera, você é o cara!!!
    Muito obrigado pelas explicações!
    É que estou desenvolvendo um pequeno projeto onde tenho que trabalhar com imagens de logomarcas e de apresentações de pedidos, guardando-as em banco pra não ficarem acessíveis aleatoriamente pelo filesystem, e estou encontrando algumas dificuldades… Deve dar a opção de escrita numa imagem… Tipo, tenho um panel mostrando uma imagem daí clico em qualquer região desse panel e posso então escrever por cima, daí tenho que dar a opção de salvar a imagem com a escrita como se fossem uma só… Daí pensei que com esse BufferedImage eu pudesse fazer isso… E acho que posso, nao é mesmo? Tem idéia de como eu posso conseguir isso???
    Valeu, brother!
Criado 4 de julho de 2008
Ultima resposta 5 de jul. de 2008
Respostas 8
Participantes 3