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
ImageIO[Resolvido!]
25 Respostas
Você precisaria pintar o fundo de branco, antes de desenhar a imagem.
Obrigado por responder, e como faço isso???
seria desenhar um retangulo com o tamanho que eu quero e depois o restante?
vlw
abs
ja tentei isso :
g.setColor(Color.white);
g.setBackground(Color.white);
e nada continua preto.
Quem puder me ajuda eu agradeço.
vlw
ae pessoal consegi colocar o backround branco mais agora ele esta tirando a visualização de alguns componentes!!!
vlw
Como você está fazendo para gerar a imagem? Pode postar o código?
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"));
Obrigado por responder, e como faço isso???
seria desenhar um retangulo com o tamanho que eu quero e depois o restante?
Exatamente.
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.
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
Ola ViniGodoy o que vc falou ja fiz mais ele continua com o background preto.
vlw
abs
Você colocou o fillRect lá??
sim coloquei e ele cobre quase todos o desenhos!!
g1.setColor(Color.WHITE);
g1.fillRect(0,0, 820, 677);
vlw
A ordem dos tratores altera o viaduto. Que eu saiba, você tem de desenhar o fundo primeiro, depois os desenhos.
Posta o código todo aí. Se você colocou o fillRect por primeiro, assim como indiquei, não deveria estar cobrindo nada.
e isso mesmo que faço veja:
Graphics2D g1 = imagem.createGraphics();
g1.setColor(Color.WHITE);
g1.fillRect(0,0, 820, 677);
//etc
vlw
abs
Ok, posta o código inteiro. Sem //etc
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
oh desculpe vou colocar o codigo inteiro e nao tinha visto…
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....
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.).
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
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.
po ViniGodoy consegir resolver fiz o que vc postou e deu certo
quero agradescer todos que me ajudaram…
Muito Obrigado…
vlw
abs
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.
ah obrigado pela dica. e pq e faço 1º meio doido e depois eu ajeito…
vlw
abs