1.自定义队列实现数据写入文件,以及对该文件的读取.
由于矩形,圆形,直线包括曲线,都是以对象的形式直接存放在自定义的队列当中,而这个队列又是存在内存当中.既然这个对象组成的队列能够存储在内存里,如果能直接将这个对象队列从内存里写到文件中去,是不是也能实现保存一个由多个形状组成的图片?而当我再需要用到这个文件的时候,只需要将这个对象队列读取到内存中,而这些对象的方法,对我来说是透明的,所以我又能直接字再使用这些方法将这些对象还原成自定义画板上的形状..正是因为这个想法,我直接采用了对象类型的数据流来读写数据.
首先,我将这些形状直接以对象的方式写到文件中去.
try {
// 创建文件输出流
FileOutputStream fos = new FileOutputStream(filepath
.getAbsolutePath());
try {
// 将文件输出流包装成对象类型的数据流
ObjectOutputStream obs = new ObjectOutputStream(fos);
// 保存队列的长度.
obs.writeInt(size);
// 遍历队列
for (int i = 0; i < size; i++) {
Shape sh = shapearray.getSh(i);
obs.writeObject(sh);
}
obs.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
而当我要读取这些文件的时候,又直接以对象的形式将其从文件中读出
try {
// 创建文件输出流
FileInputStream fis = new FileInputStream(filepath
.getAbsolutePath());
try {
// 将文件输出流包装成对象类型的数据流
ObjectInputStream obi = new ObjectInputStream(fis);
int len = obi.readInt();
try {
//将读取到的对象存到队列中
ShapeArray<Shape> sh = new ShapeArray<Shape>();
for (int i = 0; i < len; i++) {
sh.addEmo((Shape)obi.readObject());
}
return sh;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
读出文件中的对象之后.就可以直接调用对象的方法来实现将其转化成画板上的形状
shapearray = array;
// 将读取得到的形状对象画出来
for (int i = 0; i < shapearray.getlength(); i++) {
Shape shape = shapearray.getSh(i);
shape.draw(g);
}
通过对数据直接以对象形式的读取完成了对自定义的画板的数据的保存.
2.以位图的方式存取
一个图片是由许许多多的点组成的,而这一个个的点就是所谓的像素点,即存储的这个图片的高度和宽度,所以,如果能够得到每个点的颜色信息,再将这些点按照它们本来所在的位置输到屏幕上,就完成这个图片的存储以及读取.
首先我们要得到每个点的颜色.可以用一个二维数组存储这些颜色信息.
try {
robot = new Robot();
wide = jp.getWidth();
high = jp.getHeight();
colors = new int[wide][high];
Point p = jp.getLocationOnScreen();
Rectangle rect = new Rectangle(p.x, p.y, wide, high);
BufferedImage buffimg = robot.createScreenCapture(rect);
for (int i = 0; i < colors.length; i++) {
for (int j = 0; j < colors[i].length; j++) {
colors[i][j] = buffimg.getRGB(i, j);
}
}
其次,将这些颜色信息直接以基本数据类型的数据流写入文件中去.这样,便完成了一个图片各点颜色的保存,而当我们又能再这些数据再还原成图片,所以到这里完成了对这个图片的保存.
try {
// 创建文件输出流
FileOutputStream fos = new FileOutputStream(
filepath.getAbsolutePath());
try {
// 将文件输出流包装成基本数据类型的数据流
DataOutputStream obs = new DataOutputStream(fos);
// 保存图片的宽度
obs.writeInt(wide);
// 保存图片的高度
obs.writeInt(high);
// 遍历数组,将各点的颜色信息写入文件
for (int i = 0; i < wide; i++) {
for (int j = 0; j < high; j++) {
obs.writeInt(color[i][j]);
}
}
// 强制清空,保证数据全部写入文件
obs.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
最后,只需要再将这些文件中的数据按照特定的方法还原成一个图片,就实现了这个文件的读取了.
try {
// 创建文件输出流
FileInputStream fis = new FileInputStream(
filepath.getAbsolutePath());
try {
// 将文件输出流包装成基本数据类型的数据流
DataInputStream obi = new DataInputStream(fis);
int wide = obi.readInt();
int high = obi.readInt();
int color[][] = new int[wide][high];
// 将读取到的各点的颜色信息存入数组
for (int i = 0; i < wide; i++) {
for (int j = 0; j < high; j++) {
color[i][j] = obi.readInt();
}
}
fis.close();
return color;
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
- 大小: 51.7 KB
分享到:
相关推荐
总之,"JAVA画板中的保存程序"这个项目涉及了Java GUI编程、图形绘制、文件I/O操作以及数据结构的应用。通过掌握这些知识点,开发者可以构建出功能强大的画图工具,满足用户保存和分享自己作品的需求。
在Android开发中,创建一个简易画板应用是一个常见的练习,它可以帮助开发者深入理解自定义View的概念和绘图机制。这个源码项目就是基于这样的目的,使用了Android的自定义View来构建一个基本的画板功能,让用户可以...
例如,`BufferedImage`类用于存储和操作图像,而`ImageIO`类则负责读取和写入图像文件。 在XML读取方面,Java提供了`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等类来解析XML文档。这些类...
"操作手冊.txt"文件可能是详细说明如何使用这个自定义View的文档,包括如何集成到项目中、如何调用相关方法、以及如何保存和处理签名文件等内容。阅读这份文档对于理解和使用这个自定义组件至关重要。 总的来说,这...
可以使用XML或者二进制格式来保存这些信息,以便于读取和写入。 总之,通过使用MFC库,我们可以轻松地构建一个具有基本绘图功能的小画板应用程序,包括绘制直线、椭圆等图形。通过重写MFC的消息处理机制和使用CDC类...
在C#编程环境中,开发一个绘制画板应用是一项有趣且实用的任务,它允许用户进行图形绘制,保存和读取数据,以及对绘制的元素进行操作。这个应用通常会结合Windows Forms或WPF(Windows Presentation Foundation)...
要实现图形的保存和加载功能,我们可以将图形数据序列化到文件,如XML或二进制格式。然后,通过读取文件并重新绘制图形来恢复状态。这可能涉及到CFile类的使用以及自定义的序列化代码。 8. **撤销/重做功能**: ...
在iOS开发中,创建一个画板应用涉及到许多关键知识点,主要涵盖用户界面设计、图形绘制、触摸事件处理以及数据保存等方面。以下是对标题"ios应用源码之一个画板 2018127"及其相关描述的详细解读: 1. **UIKit框架**...
用户可以在现有的图片上添加涂鸦、文字或图形,这可能涉及到Qt的QImage和QPixmap类,用于图片的读取、显示和处理。 3. **自定义元素**:“可以自己在添加些东西”表明应用允许用户添加个性化元素。这可能包括自定义...
3. 文件操作:读取和写入文件,这涉及到文件I/O操作,如使用`CreateFile`、`ReadFile`和`WriteFile`函数。 4. 撤销/重做:通过维护一个操作历史栈,实现文本修改的撤销与重做功能。 5. 查找替换:搜索特定文本并替换...
打开文件时,程序读取这些数据并重新绘制到画板上。 总的来说,这个Java实现的画板程序是一个综合性的项目,涵盖了GUI设计、事件处理、图形绘制、颜色选择、填充模式以及文件操作等多个Java编程的重要知识点。它...
3. **撤销/重做功能**:可以使用栈数据结构保存每一步的绘图状态,当用户触发撤销或重做操作时,将栈顶元素弹出或推回。 4. **清除画板**:提供一个按钮或菜单项,用户可以一键清除画布上的所有内容。 5. **保存和...
- 回放功能:读取保存的数据,重新绘制或擦除,模拟用户之前的操作。 6. **橡皮擦大小和形状调整**: - 添加滑动条或按钮,让用户选择橡皮擦的大小,通过改变Paint对象的strokeWidth实现。 - 可以实现不同形状的...
3. **文件操作**:在MFC中,CFile类提供了基本的文件操作接口,如打开、关闭、读取和写入文件。对于文档类型的文件操作,CDocument类通常用于存储和恢复文档状态。通过实现CFile对话框的虚函数,如OnOpenDocument和...
同时,它可能具备保存和读取图形的能力,以便用户可以继续编辑之前的工作。源代码的提供使得读者能够深入了解Java GUI编程,特别是Swing库的使用,以及如何处理图形对象和用户交互。 总的来说,这个画板项目是一个...
此外,它可能还包括方法来添加新的线条、清除画板(重绘为白色背景)、以及保存和加载画作。 `PaintStorage.java`可能负责持久化画作,即把用户的绘制保存到文件中,并能读取文件恢复画作。在Java中,可以使用序列...
- 用户可能希望保存他们的作品,这就需要将图形数据序列化到文件中,可能使用XML、JSON或自定义格式。读取时则反序列化恢复图形数据。 - Java的`ObjectOutputStream`和`ObjectInputStream`可以方便地实现对象的...
9. **保存和加载**:为了保存用户的工作,程序需要提供保存文件的选项,可能使用序列化或XML格式存储图形信息。同时,也可以读取这些文件以便重新打开和编辑。 10. **多线程**:如果程序支持动画或动态效果,如平滑...
总结来说,"iOS画板应用程序"涵盖了Objective-C编程、UI设计、触摸事件处理、图形绘制、颜色管理、橡皮擦实现、自定义视图、撤销/重做机制以及数据持久化等多个iOS开发的核心知识点。这样的项目不仅锻炼了开发者的...
8. **保存和加载画作**:将画板上的内容保存为图像文件(如PNG或JPEG),可以使用`Bitmap`类将`Graphics`对象转换为位图,然后使用`Save`方法保存。加载时读取图像文件,再在画板上显示。 9. **形状绘制**:除了...