Gente e tenho um bufferImage que foi criado dessa forma:
icm = new IndexColorModel(8,256,r,g,b);
bf = new BufferedImage(mapWidth,mapHeight,BufferedImage.TYPE_BYTE_INDEXED,icm);
Eu quero criar outro BufferedImage mas que seja uma imagem completamente cinza. Como posso fazer?
Para ser mais precisa eu quero criar uma imagem que tenha um tamanho que não é padrão, ou seja, o tamanho vai depender do mapWidth e do mapHeight do primeiro BufferedImage. Mas essa imagem é apenas formada da cor cinza.
Obrigada
Muito legal essa página Vini, mas eu creio q eu precise de alguma coisa muito mais simples. Quero criar um BufferedIamge de tamanho x,y (altura, largura) preenchido com a cor cinza.
Faltou a parte de como criar o IndexColorModel "cúbico" de 216 cores:
public static IndexColorModel create216ColorModel()
{
byte[] r = new byte[216];
byte[] g = new byte[216];
byte[] b = new byte[216];
int i = 0;
int j = 0;
int k = 0;
int l = 0;
for (i = 0;i < 6;i++)
{
for (j = 0;j < 6;j++)
{
for (k = 0;k < 6;k++)
{
r[l] = (byte) ((51 * i) & 0xFF);
g[l] = (byte) ((51 * j) & 0xFF);
b[l] = (byte) ((51 * k) & 0xFF);
l++;
}
}
}
return new IndexColorModel(8, 216, r, g, b);
}
É isso mesmo. Mas essa imagem, criada com o tipo de GRAY nunca poderá ter cor. Se você quiser que tenha cor, crie com o mesmo tipo da anterior e use o mesmo método de desenho que vc já usou.
O tipo da imagem, que define quantos bytes ela gastará para representar cores, quais cores serão representadas e de que forma (indexada ou direta);
A imagem em si.
Você pode ter uma imagem que suporte o desenho colorido, mas que casualmente só foi desenhado com cinza (ou seja, uma imagem do tipo INT_RGB ou INT_ARGB, pintada inteiramente de cinza).
E você pode ter uma imagem que só tenha tons de cinza, e jamais vá aceitar qualquer tipo de cor (do tipo GRAY). Nesse caso, se você pintar cores na imagem, elas serão convertidas para um tom de cinza.
"E você pode ter uma imagem que só tenha tons de cinza, e jamais vá aceitar qualquer tipo de cor (do tipo GRAY). Nesse caso, se você pintar cores na imagem, elas serão convertidas para um tom de cinza. " Eu preciso disso. Então, para que isso aconteça, eu devo excluir a linha onde eu seto uma cor, ou seja, não definir cor alguma, é isso?
gr.setColor( Color.GRAY); // eu devo excluir essa linha do meu código? Ou devo colocar um outro valor aqui?
gr.fillRect( 0, 0, mapWidth+400, mapHeight+400);
Não, vc ainda precisa do setColor. Ele dirá qual é o tom de cinza a ser usado.
No caso de criar uma imagem com TYPE_USHORT_GRAY, você pode usar qualquer cor (GRAY, RED, YELLOW) que sairá cinza. Só o que muda é o tom. Aí é só achar o tom que você precisa.