高手们帮忙看看这个关于canvas 中图像保存为png格式文件的程序

wbel 2004-07-11 09:03:27
保存不了文件,不知道为什么
/**
* XCanvas.java
*
* @author Per-Ola Kristensson <perkr@ida.liu.se>
*
* Allows basic drawing and ability to save canvas as PNG file.
*
*/

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.util.*;

public class XCanvas {

private int x1 = 0, y1 = 0, r = 0, g = 70, b = 140;
private Vector plots = new Vector(), pdata = null;

public XCanvas()
{
final Frame f = new Frame();
final Canvas canvas = new Canvas() {
public void paint(Graphics g) {
ListIterator it = plots.listIterator();
while (it.hasNext()) {
Vector v = (Vector)it.next();
Point p1 = (Point)v.get(0);
for (int i=1, size=v.size();i<size;i+=2) {
Point p2 = (Point)v.get(i);
Color c = (Color)v.get(i+1);
g.setColor(c);
g.drawLine(p1.x, p1.y, p2.x, p2.y);
p1 = p2;
}
}
}
};
canvas.setBackground(Color.white);
canvas.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
x1 = e.getX(); y1 = e.getY();
pdata = new Vector();
pdata.add(new Point(x1, y1));
}
public void mouseReleased(MouseEvent e) {
plots.add((Vector)pdata.clone());
}
});
canvas.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
r = (r > 244 ? 0 : r + (int)(Math.random()*10));
g = (g > 244 ? 0 : g + (int)(Math.random()*10));
b = (b > 244 ? 0 : b + (int)(Math.random()*10));
int x2 = e.getX(); int y2 = e.getY();
pdata.add(new Point(x2, y2));
pdata.add(new Color(r, g, b));
Graphics gr = canvas.getGraphics();
gr.setColor(new Color(r, g, b));
gr.drawLine(x1, y1, x2, y2);
x1 = x2; y1 = y2;
}
});
f.setSize(300, 300);
f.setLayout(new BorderLayout());
f.add(canvas, BorderLayout.CENTER);
Button button = new Button("Save canvas as PNG");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
FileDialog fd = new FileDialog(f, "Save as PNG", FileDialog.SAVE);
fd.setFile("canvas.png");
fd.show();
String name = fd.getFile();
Rectangle r = canvas.getBounds();
Image image = canvas.createImage(r.width, r.height);
Graphics g = image.getGraphics();
canvas.paint(g);
ImageIO.write((RenderedImage)image, "png", new File(name));
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
});
f.add(button, BorderLayout.SOUTH);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
f.setVisible(true);
}

public static void main(String[] argv) { XCanvas x = new XCanvas(); }

}
...全文
191 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,635

社区成员

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

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