画图板文件保存到硬盘即读取
一共包含2种方式,一种是队列方式的保存,另一种是所谓的山寨BMP保存。
队列保存:
public void saveShape(String path,Queueimp<Shape> queue) {
//创建文件输出流
try {
java.io.FileOutputStream fileout = new java.io.FileOutputStream(path);
//将文件流包装成数据输出流
java.io.DataOutputStream dataout = new java.io.DataOutputStream(fileout);
//保存图形队列的长度
dataout.writeInt(queue.size());
//遍历队列
for (int i = 0; i < queue.size(); i++) {
Shape sh = queue.get(i);
// 使用基本数据流将形状对象的属性值写入文件
Color color = sh.getColor();
int c = color.getRGB();
int type = sh.type;
//写入形状的颜色和类型
dataout.writeInt(c);
dataout.writeInt(type);
//判断type类型
{
.......;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取指定路径的文件
* @param path : 文件的路径
* @return 返回形状队列
*/
public Queueimp<Shape> readFile (String path) {
Queueimp<Shape> shape = new Queueimp<Shape>();
try{
//创建文件输入流
java.io.FileInputStream filein = new java.io.FileInputStream(path);
//创建数据输入流
java.io.DataInputStream datain = new java.io.DataInputStream(filein);
//读取长度
int len = datain.readInt();
for (int i = 0; i < len; i++) {
//读取颜色和类型
int cor = datain.readInt();
Color color = new Color(cor);
int type = datain.readInt();
//判断type类型
{
.......;
}
datain.close();
} catch (Exception e) {
e.printStackTrace();
}
return shape;
}
}
在动作监听器里添加 保存和读取
/********************保存和读取**********************/
if(type.equals("保存")) {//当事件是“保存”按钮时
file.saveShape(path, queue); //调用将已经画好的图形的所有数据存入指定的文件中
}
if(type.equals("读取")) {//当事件源是“打开”在按钮时
Queueimp<Shape> shapes = file.readFile(path); //调用读取文件的方法
for (int i = 0; i < shapes.size(); i++){
Shape sha = shapes.get(i);
sha.draw(g);
queue.add(sha);
}
}
山寨BMP:
import javax.swing.JPanel;
import java.awt.Point;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* 图片的保存
* @author jsyczynba
*
*/
public class Fileoperate {
static int width;
static int height;
static int[][] colors;
static java.awt.Robot robot;
public static void save (JPanel panel,String path) {
//截图
colors = getImage(panel);
//保存颜色数组
saveFile(colors,path);
//清空颜色数组
//DrawUI.colors = null;
}
/**
* 读取颜色数组
* @return
*/
public static int[][] readFile( String path) {
int[][] image = null;
try {
//创建文件输入流
java.io.FileInputStream filein = new java.io.FileInputStream(path);
//创建数据输入流
java.io.DataInputStream datain = new java.io.DataInputStream(filein);
//读取颜色数组的长和宽
int t = datain.readInt();
int t2 =datain.readInt();
//将二维数组中的颜色值读取
image = new int[t][t2];
for (int i = 0; i < t; i++) {
for (int j = 0; j < t2; j++) {
image[i][j] = datain.readInt();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return image;
}
/**
*
* @param panel
* @return
*/
public static int[][] getImage(JPanel panel) {
int[][] tempColors;
//创建机器人对象
try {
robot = new java.awt.Robot();
} catch (Exception e) {
e.printStackTrace();
}
width = panel.getWidth();
height = panel.getHeight();
tempColors = new int[height][width];
// 得到panel左上角的点相对于屏幕的坐标
Point p = panel.getLocationOnScreen();
//定义panel区域
java.awt.Rectangle rect = new java.awt.Rectangle(p.x, p.y, width, height);
//从屏幕上抓取一张图片
java.awt.image.BufferedImage img = robot.createScreenCapture(rect);
//得到图片各像素点的颜色值
for (int i = 0; i < tempColors.length; i++) {
for (int j = 0; j < tempColors[i].length; j++) {
tempColors[i][j] = img.getRGB(j, i);
}
}
return tempColors;
}
/**
*
* @param colors
* @param path
*/
private static void saveFile(int[][] colors, String path) {
try{
//创建文件输出流
java.io.FileOutputStream fileout = new java.io.FileOutputStream(path);
java.io.DataOutputStream dataout = new java.io.DataOutputStream(fileout);
//将数组长宽写入文件
dataout.writeInt(colors.length);
dataout.writeInt(colors[1].length);
//将二维数组中的颜色值写入文件
for (int i = 0; i < colors.length; i++) {
for (int j = 0; j < colors[i].length; j++) {
dataout.writeInt(colors[i][j]);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
BMP的paint重绘
/**
*重写主界面重绘的方法
* @author jsyczynba
*
*/
class MyPanel extends JPanel {
// 重写父类绘制窗体的方法
public void paint(Graphics g) {
super.paint(g);
if(colors!=null)
for(int i=0;i<colors.length;i++) {
for(int j=0;j<colors[i].length;j++) {
Color c = new Color(colors[i][j]);
g.setColor(c);
g.drawLine(j, i, j, i);
}
}
}
}
分享到:
相关推荐
- **磁盘碎片整理**:优化硬盘性能,通过重新排列文件来减少读取时间。 通过这些实验,学生不仅学会了基本的文件操作,还了解了系统设置和附件工具的使用,这为他们进一步学习更复杂的计算机技能奠定了基础。同时...
46. 上传文件:既可以下载文件,也可以上传文件到网络。 47. 电源中断:断电可能导致内存中未保存的信息丢失。 48. 屏幕保护:用户可以自定义Windows 98的屏幕保护程序。 49. 文件删除恢复:在Windows 98中,删除...
18. 应用程序功能:“写字板”和“画图”都是Windows中的应用程序,前者可以进行文字处理,后者可以绘图,两者都支持文字和图形处理。 19. 中文输入方式切换:在Windows中文输入法中,通过Ctrl+Shift可以在各种输入...
5. 中央处理器与内存:CPU可以直接读写的计算机部件是内存(RAM),因为硬盘、软盘和外存属于非易失性存储,需要通过操作系统读取。 6. 显示器质量指标:显示器画面的清晰度取决于分辨率,即屏幕上像素点的数量。 ...
14. 图形和文本编辑:Windows 95中的“画图”程序产生的图形可以粘贴到其他文本编辑软件如“写字板”中。 15. 静电防护:在更换电脑部件时,应避免静电损坏电子元件,因此不建议手接触电路板。 16. 活动窗口截图:...
### 网管教程:从入门到精通(软件篇) #### 一、详细的XP修复控制台命令和用法 在Windows XP系统维护中,XP修复控制台是一个强大的工具,可以帮助管理员在系统无法正常启动的情况下进行修复工作。下面详细介绍几...
外存中的信息不能直接被CPU处理,需要先读取到内存;操作系统是系统软件而不是应用软件;汉字编码和ASCII码是不同的。 8. 在Windows的任务栏上通常不会出现对话框窗口的图标,而会显示运行的应用程序、文件夹、语言...
1. 输入/输出设备:硬盘既可以作为存储设备读取数据(输出),也可以用于保存用户输入的数据(输入)。 2. 组装电脑注意事项:防静电是非常重要的,因为静电可能损坏电子元器件。 3. Windows 7 文件管理:取消选定...
在幻灯片放映时,绘图笔的内容不会随文件保存;上、下方向键可以切换幻灯片;隐藏的幻灯片在全部放映时不显示。 12. 多媒体技术:DVD-R是只读光盘,DVD+R可重写;DVD光驱可以读取CD光盘。 13. 网络视频格式:MPG...
7. Windows 2003特性:画图程序可以保存为多种格式,系统文件可以被删除,写字板可以打开Word文件,记事本确实只能编辑纯文本文件。 8. 文件操作:在Windows 2003中,用鼠标左键拖动文件到另一磁盘,实现的是移动...
18. Windows功能:“写字板”和“画图”都可以处理文字和图形。 19. 文件扩展名:在Windows中,记事本默认保存的文件扩展名为.TXT。 20. 文字处理软件:在Word中,可以插入文本框,并在各种视图下看到分栏效果。栏...
IDE 1号接口检测到光驱,IDE 2号接口检测到希捷硬盘为80GB,其它为NONE表示检测没有设备连接到接口上。 Warning!! Now system is in safe mode. Please re-setting CPU frequency in CMOS setup. 警告:现在系统处在...
25. **默认文件扩展名**:"画图"程序保存的文件默认扩展名为.BMP,表示位图图像。 26. **Word功能**:Word具备表格处理、绘制图形和自动更正等多种功能。 27. **替换功能**:在Word中,替换功能位于“编辑”菜单。...
18. **Windows特性**:写字板和画图都支持文字和图形处理。 19. **中文输入方式切换**:在中文输入法之间切换使用Ctrl+Shift键。 20. **记事本文件扩展名**:默认保存的文件扩展名为.TXT。 21. **Word操作**:在...
9. 应用程序特性:Windows中的“写字板”和“画图”都是用户可以编辑文字和图形的工具,而“记事本”虽然主要处理文本,但也可以插入简单的图形。 10. 文档编辑与打印预览:在Word中,输入的文字会出现在插入点位置...
16. 硬盘的双重角色:硬盘既是输入设备(读取数据),也是输出设备(写入数据)。 17. 硬盘转速:7200转/分钟指的是硬盘每分钟的转数。 18. 一次性写入光盘:使用相变材料记录信息,一旦写入无法修改。 19. ...
23. **数据读取速度**:读取速度从快到慢通常是Cache、RAM、硬盘、软盘,即B)Cache、RAM、硬盘、软盘。 24. **程序开发**:高级语言程序需要经过编译和连接才能变为可执行程序,对应答案A)编译、连接。 25. **十...
13. Windows应用:写字板和画图都支持文字和图形处理。而“记事本”只能处理纯文本,无法插入自选图形。 14. 窗口操作:最大化后的窗口可以被关闭、最小化或还原,但不能直接移动。 15. 文档编辑:在Word中,当前...