高分求Java绘图并保存为透明Jpg的问题

feng8220 2008-06-25 10:57:32
画出一个透明的BufferedImage,在JFrame里看是正确的,输出到文件后颜色不对,透明度也没有,一律变成黑色的背景,代码是这样的:
public class StampDrawer {

private BufferedImage bimg = new BufferedImage(200,100,BufferedImage.TYPE_INT_ARGB);

public BufferedImage drawStamp(String name) {
Graphics2D g2 = (Graphics2D) bimg.getGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
Font font = new Font("楷体_gb2312",Font.BOLD,30);
g2.setFont(font);
g2.setColor(Color.RED);
g2.drawString(name, 50, 50);
//g2.setRenderingHint(hintKey, hintValue)
bimg.flush();
return bimg;
}
public void writeJpg(String name) {
try {
Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter)writers.next();
OutputStream os = new FileOutputStream("D:\\testJpg.jpg");
ImageOutputStream imgos = ImageIO.createImageOutputStream(os);
writer.setOutput(imgos);
writer.write(this.drawStamp(name));
imgos.flush();
imgos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
请高人指点~给出正解的给满分~~~~
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sou2012 2008-06-25
  • 打赏
  • 举报
回复
建议在画到前面屏幕之前,在背景Image里刷新一个背景
feng8220 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 javazhuobin 的回复:]
楼主可以试一下下面的方法:
//  设置透明
g.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR,  0.0f));

//  用透明模式填充整个区域
g.fillRect(0,  0,  300,200);

//  恢复非透明
g.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_OVER,  1.0f));

[/Quote]

不行啊,效果还是一样的,在JFrame里正常,在.jpg文件里字体的颜色也不对,背景全黑
TRMeister 2008-06-25
  • 打赏
  • 举报
回复
JPG能变成透明的么?
GIF和PNG都可以。JPG好像不行吧?
刘彬彬 2008-06-25
  • 打赏
  • 举报
回复
楼主可以试一下下面的方法:
// 设置透明
g.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));

// 用透明模式填充整个区域
g.fillRect(0, 0, 300,200);

// 恢复非透明
g.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_OVER, 1.0f));
feng8220 2008-06-25
  • 打赏
  • 举报
回复
我自己先顶一个~~~
胡矣 2008-06-25
  • 打赏
  • 举报
回复
用imagemagick吧
feng8220 2008-06-25
  • 打赏
  • 举报
回复
谢谢~~结帖!
suwei1782 2008-06-25
  • 打赏
  • 举报
回复
正解:
Iterator writers = ImageIO.getImageWritersByFormatName("png");
ImageWriter writer = (ImageWriter)writers.next();
ImageOutputStream imgos = ImageIO.createImageOutputStream(os);
writer.setOutput(imgos);
writer.write(bimg);//bimg:BufferedImage
feng8220 2008-06-25
  • 打赏
  • 举报
回复
谁能给我个正解啊,谢谢~~~

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧