ImageIO[Resolvido!]

25 respostas
UMC

Olá pessoal estou com um problema aki, e o seguinte eu estou gerando uma imagem com o ImageIO so que esta vindo com o fundo preto gostaria de saber como faço para deixalo com o fundo branco.??
Obrigado pela atenção!!
vlw
abs

25 Respostas

E

Você precisaria pintar o fundo de branco, antes de desenhar a imagem.

UMC

Obrigado por responder, e como faço isso???
seria desenhar um retangulo com o tamanho que eu quero e depois o restante?
vlw
abs

UMC

ja tentei isso :

g.setColor(Color.white); g.setBackground(Color.white);
e nada continua preto.
Quem puder me ajuda eu agradeço.
vlw

UMC

ae pessoal consegi colocar o backround branco mais agora ele esta tirando a visualização de alguns componentes!!!
vlw

ViniGodoy

Como você está fazendo para gerar a imagem? Pode postar o código?

UMC
Ta aki o codigo q ultilizo para gerar a imagem:
BufferedImage imagem = new BufferedImage(820, 677, BufferedImage.TYPE_INT_RGB); 
imagem.createGraphics();
imagem.getGraphics();

imagem.getRGB(50,50);

Graphics2D graphics = imagem.createGraphics();  
Graphics2D g1 = (Graphics2D) graphics.create();  
g1.setColor(Color.magenta);
g1.fillArc(getX(),getY(),20,20,0,360);
//etc
ImageIO.write(imagem, "jpg", new File("C:/imagem.jpg"));
vlw abs
sergiotaborda

UMC:
Obrigado por responder, e como faço isso???
seria desenhar um retangulo com o tamanho que eu quero e depois o restante?

Exatamente.

ViniGodoy
BufferedImage imagem = new BufferedImage(820, 677, BufferedImage.TYPE_INT_RGB); 

imagem.getRGB(50,50);

Graphics2D g1 = imagem.createGraphics();  
g1.setColor(Color.WHITE);
g1.fillRect(0, 0, 820, 677);

g1.setColor(Color.magenta);
g1.fillArc(getX(),getY(),20,20,0,360);
//etc
g1.dispose();
ImageIO.write(imagem, "jpg", new File("C:/imagem.jpg"));

Não é necessário chamar o create novamente, já que o createGraphics() já faz isso. Também certifique-se de chamar o dispose, ao final do método.

Aquelas chamadas vazias a createGraphics() e getGraphics() também são desnecessárias.

UMC

Obrigado por responder, e como faço isso???
seria desenhar um retangulo com o tamanho que eu quero e depois o restante?
Exatamente.

Acontece que fiz isso so que ele cobre alguns desenhos que eu tenho na tela.

Não é necessário chamar o create novamente, já que o createGraphics() já faz isso. Também certifique-se de chamar o dispose, ao final do método.

Aquelas chamadas vazias a createGraphics() e getGraphics() também são desnecessárias.


ok vou fazer para ver no que vai dar.
vlw

UMC

Ola ViniGodoy o que vc falou ja fiz mais ele continua com o background preto.
vlw
abs

ViniGodoy

Você colocou o fillRect lá??

UMC

sim coloquei e ele cobre quase todos o desenhos!!

g1.setColor(Color.WHITE); g1.fillRect(0,0, 820, 677);
vlw

E

A ordem dos tratores altera o viaduto. Que eu saiba, você tem de desenhar o fundo primeiro, depois os desenhos.

ViniGodoy

Posta o código todo aí. Se você colocou o fillRect por primeiro, assim como indiquei, não deveria estar cobrindo nada.

UMC

e isso mesmo que faço veja:

Graphics2D g1 = imagem.createGraphics(); g1.setColor(Color.WHITE); g1.fillRect(0,0, 820, 677); //etc
vlw
abs

ViniGodoy

Ok, posta o código inteiro. Sem //etc

UMC

veja so essa ta sendo gerada normalmente
http://img37.imageshack.us/img37/6017/importtt.jpg

agora com o codigo

Graphics2D g1 = imagem.createGraphics(); g1.setColor(Color.WHITE); g1.fillRect(0,0, 820, 677); //etc
http://img37.imageshack.us/img37/74/export.jpg
vlw

UMC

oh desculpe vou colocar o codigo inteiro e nao tinha visto…

UMC
vamos la
while((rs.next())){
			 
			 setX( rs.getInt("cx")-200);
			 setY( rs.getInt("cy")-200);
			 setX_( rs.getInt("cx_")-200);
			 setY_( rs.getInt("cy_")-200);
			 int nnn = (rs.getInt("sequencia"));
			 setSequencia(rs.getString("sequencia"));

Graphics2D g1 = imagem.createGraphics();  
		  		g1.setColor(Color.WHITE); 
		  	    //g1.drawRect(0,0,820, 677);
				g1.fillRect(0,0, 820, 677);
g1.setFont(bigFont);
		     g1.drawString("Pontos",80,20);
		     g.setFont(bigFont);
		     g.drawString("Pontos",80,20);
if(nnn == 1){
g1.setColor(Color.LIGHT_GRAY);
g1.fillArc(getX(),getY(),20,20,0,360);
 g1.setColor(Color.black);
			     g1.drawString(getSequencia(), getX()+4,getY()+15);

 if(nnn > 1){
 g1.setColor(Color.white);

				 g1.drawLine(getX_()+12,getY_()+12,getX()+12,getY()+12);
if(lum.equals("PST")){
g1.fillArc(getX(),getY(),20,20,0,360);
				      //g.fillArc(getX(),getY(),20,20,0,360);
				      //
				      g1.setColor(Color.black);
 g1.drawString(getSequencia(), getX()+4,getY()+15);
}else{
					 
					 g1.setColor(Color.magenta);
				     g1.fillArc(getX(),getY(),20,20,0,360);
				     g1.setColor(Color.black);
				     g1.drawString(getSequencia(), getX()+4,getY()+15);
setXy1 (new ArrayList<Integer>());
			getXy1().add(getX());
			
			setYx2(new ArrayList<Integer>());
			getYx2().add(getY());
			//xy.add(getY());
			//xy.add(getN());
			setN(new ArrayList<Integer>());
			getN().add(nnn);
			setRes(true);
		 }
			}
g1.setPaint(Color.white);
			g1.dispose();  
ImageIO.write(imagem, "jpg", new File("C:/export.jpg"));  
		}
		}

ve se ta bom.
vlw
ta meio desorganizado....

E

Você tem chamadas a gl.___ e a g.___. Você não está se confundindo? Para evitar esse tipo de coisas, é melhor usar nomes bem distintos para as variáveis (glTela para o que você mostra na tela, glArquivo para a imagem que vai ser gerada em arquivo.).

UMC

ha nao se preocupe e outra coisa e pq ‘g’ e para desenhar um Applet e ‘g1’ para desenhar a imagem

como disse ta meio desorganizado…
vlw

ViniGodoy

Mova essas linhas para antes do while:

Graphics2D g1 = imagem.createGraphics(); g1.setColor(Color.WHITE); g1.fillRect(0,0, 820, 677);

E essa para depois:

Você só deve pintar o fundo uma única vez. Não uma vez para cada bolinha do gráfico.

UMC

po ViniGodoy consegir resolver fiz o que vc postou e deu certo
quero agradescer todos que me ajudaram…
Muito Obrigado…
vlw
abs

ViniGodoy

Uma dica… organização é tudo num software de pintura. Divida isso aí em classes, saiba exatamente o que está acontecendo. Senão logo vai ficar lento e difícil de resolver problemas que a principio deveriam ser triviais, como esse.

UMC

ah obrigado pela dica. e pq e faço 1º meio doido e depois eu ajeito…
vlw
abs

Criado 27 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 25
Participantes 4