高手们帮忙看看这个关于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(); }

}
...全文
229 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

62,622

社区成员

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

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