Pessoal eu preciso desenvolver um programa que crie uma imagem apartir de um arquivo binário. É assim: eu tenho uma matriz de 256 linhas e 3 colunas. Nessa matriz está definida minha paleta de cores (RGB). A seguir, eu tenho um vetor de tamanho igual ao da area dessa imagem (largura e altura) . Em cada indíce desse meu vetor, está o byte referente a paleta de cores. É mais ou menos isso, alguém pode me ajudar?
Uma imagem que usa uma paleta de cores é uma imagem indexada como gif,png pixmap.
O pixmap é muito simples. Dê uma lida:
O jeito mais rápido que conheço para executar tal tarefa usando a api padrão do Java é esse construtor:
BufferedImage(int width, int height, int imageType, IndexColorModel cm)
Claro que você precisa passar no parâmetro imageType o valor BufferedImage.TYPE_BYTE_INDEXED e você também precisa de um objeto do tipo IndexColorModel devidamente inicializado.
Recomendo muito fortemente que você estude sobre formatos de imagem e paletas de cores até que esses conceitos estejam devidamente sólidos para você.
Inté.
Então eu fiz assim:
icm = new IndexColorModel(8,256,getR(),getG(),getB());
bf = new BufferedImage(mapWidth,mapHeight,BufferedImage.TYPE_BYTE_INDEXED,icm);
wr = bf.getRaster();
wr.setDataElements(0, 0,mapWidth,mapHeight,vMap);
Pq pelo código que vc passou em momento nenhum eu chamava o meu veotr q cotém os bytes do map ( no caso o vMap)
Só que eu não tô conseguindo ver se está certo, pois estou com dificuldade de mostrar o meu buffer em um JFrame…
[quote=oitathi]Então eu fiz assim:
icm = new IndexColorModel(8,256,getR(),getG(),getB());
bf = new BufferedImage(mapWidth,mapHeight,BufferedImage.TYPE_BYTE_INDEXED,icm);
wr = bf.getRaster();
wr.setDataElements(0, 0,mapWidth,mapHeight,vMap);
Pq pelo código que vc passou em momento nenhum eu chamava o meu veotr q cotém os bytes do map ( no caso o vMap)
Só que eu não tô conseguindo ver se está certo, pois estou com dificuldade de mostrar o meu buffer em um JFrame…[/quote]
Talvez essa classe aqui sirva para tal:
public class MostradorBufferedImage extends Canvas
{
private static final long serialVersionUID = 1L;
private BufferedImage image;
public MostradorBufferedImage()
{
}
public void setImage(BufferedImage image)
{
this.image = image;
}
public void update(Graphics g)
{
if (image != null)
{
paint(g);
}
else
{
super.update(g);
}
}
public void paint(Graphics g)
{
if (image != null)
{
g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), this);
}
else
{
super.paint(g);
}
}
}
Inté.
Ah sim, eu criei um jlabel e coloquei dentro desse jlabel o meu buffer e dentro do meu frame o jlabel… hehehehe
Mas obrigadão!!!