`
Jonathan樊
  • 浏览: 76351 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

将画图板数据保存成文件

阅读更多

     前几天完成了在画图板上可以绘制一些图形,并将其保存在了一个自定义的队列中。此时,这些图形只是保存在了内存中。接下来的工作就是将画图板数据保存成文件,存储在硬盘里。

 

 第一种方法:

     利用队列,将重绘时用来保存形状对象的队列写入文件。此时,文件的格式是我们自己定义的。总的来说,不同的文件格式就是文件的信息用不同的顺序写入文件中,即,对信息的编码。文件的扩展名,对文件内信息的编码方式没有影响,只是用来方便应用程序识别文件格式,选取相应的应用程序来打开它。例如:新建一个Microsoft Word文档,它的扩展名是.doc.写入一行文字后保存。如果,去掉文件的扩展名,文件的信息仍然是存在的,只是打开时系统无法自定选择应用程序去打开这个文件,需要人去选择。如果,我们这是选择Microsoft Word去打开,仍然可以正确的打开读取。如果,我们选择txt文档去打开,仍然可以打开,只是此时读取的信息是乱码,因为 txt 文档会按照自己的解码方式 去读取文件信息,txt 解码方式和 doc不一样,txt 按照自己的解码方式翻译过来后,读取出来的对应的不是我们当初写入的初衷了。

 

 

     思路是:1,创建输出流对象。 2,首先读取图形的个数,写入文件。3,读取图形的形状写入文件。 4,根据读取的类型,创建相应的图形对象。然后,写入图形的属性。

 

    创建输出流对象时用到了基本数据输出流,因为此时写入的是一些基本的数据类型,基本数据类型有 8 个。byte=8 bit; int =4byte=32bit ; short=2byte=16bit;long =8byte=64bit; char=2 byte=16bit; float=4byte=32bit; double=8byte=64bit ; boolean=8bit;  1个汉字=2个英文字母=2byte,1个数字占一个字节。

 

    在写入文件的数据后,读取时,需要按照相同的顺序。文件的名字可以任意命名,扩展名亦是任意,也可以没有扩展名。如果,把文件的扩展名定义为 txt,那么,可以用txt 打开,不过打开后是乱码罢了,因为我们写入文件的信息顺序和txt不一样。

 

   读取文件时,新建一个队列存储信息,只要按照写入时,相同的顺序,read就好了,将读取的相应的属性赋予对象,最后,将队列遍历绘制就好了。这里面,最重要的就是 注意 写入 和读取 要有相同的顺序读取的相应的数据类型。

 

 

  第二种方法:

 

    仿照BMP文件 

 

   在第一种方法中,当要保存的形状个数特别多时,文件读取时,速度是非常慢的,仿BMP文件保存,就解决了这个问题。此时,保存时,不再以画了多少个图形为主,而是保存画布上的每一个点。因为画布大小不变时,像素点的数目是不变的,因此,就算图形个数特别多,文件读取图形重绘时,速度不会变慢。

   在仿BMP文件保存时,我们重绘的是画布上的点。声明一个数组Color[][],用来保存画布上的点的颜色,画布的宽和高,就是数组的列数和行数。得到数组后,对数组进行遍历,将点的颜色存入数组。像素点的颜色,是用RGB来定义,点的颜色的不同,就是RGB取值不同。java.awt下有一个Robot类下的createScreenCapture方法,可以抓取从屏幕中设定的矩形范围的图像。因为抓取的图像是相对于屏幕的位置,因此需要得到画布相对于屏幕的位置。JPanel有一个方法getLocationOnScreen(),可以得到画布左上角的点相对于屏幕的位置。此时,就可以设定Robot要抓取的具体位置了。抓取到图像后,就可以取得像素点的RGB值了。image.getRGB会得到一个值,存入数组,得到整个画布的像素点的分布了。

 

保存图片到文件,就是将每个点的颜色写入就好了。读取文件,正好相反,就是读取颜色,然后,绘制相应颜色的点。调用drawLine方法,绘制直线需要两个点,只要两个点坐标一样,那么就会绘制一个点了。只是,需要注意的一点就是,当按行遍历时,行数不变,列数增加,当将RGB的值赋予Color[][]数组时,横纵坐标应该是相反的。

 

这时,仿BMP文件保存,读取就完成了。

 

 

 

 

1
14
分享到:
评论
1 楼 flycatdeng 2011-12-20  
你的可以打开你所保存的图像吗?

相关推荐

    画图板集合保存图像

    这通常通过截图或者将每个图形元素转换成像素数据,然后写入到图像文件中实现。 标签“源码”暗示我们可以期待看到具体的代码实现,这可能包括创建画布对象、定义绘图函数、监听事件以及保存图像的代码片段。而...

    MFC画图板绘图并保存图片导出

    这个应用程序允许用户在画图板上自由绘制,并将这些创作保存为图片格式,例如BMP。我们将围绕以下几个关键知识点展开讨论: 1. **MFC库**:MFC 是微软开发的一个C++类库,它封装了Windows API,为开发者提供了一套...

    画图板源码示例画图板源码示例

    【压缩包子文件的文件名称列表】:PaintPro可能代表的是这个画图板项目的主程序文件或者整个项目的根目录。在大多数情况下,一个完整的源码示例项目会包含以下几部分: 1. **主程序文件**:如`PaintPro.cpp`或`...

    QT画图板详例

    在画图板应用中,用户在QGraphicsScene上绘制的所有元素都将通过QGraphicsView展示出来。 2. **QGraphicsItem**:这是表示图形对象的基类,可以派生出自定义的图形对象,如线条、圆形、矩形等。每个QGraphicsItem都...

    画图板自定义格式保存

    标题“画图板自定义格式保存”涉及到的是一个与计算机图形处理相关的技术,尤其是与用户交互式的绘图软件或工具的文件保存功能有关。在许多应用程序中,例如Microsoft Paint这样的简单画图工具,用户可以创建自己的...

    仿XP画图板

    5. **文件操作**:保存和打开图像文件是画图板的重要功能。JAVA提供了文件I/O流,使得开发者能够读写BMP、PNG等图像文件格式。 6. **颜色选择器**:实现颜色选择器可能需要自定义组件或使用已有的库,允许用户选取...

    画图板_Vc_

    本篇文章将深入探讨一个基于VC++(Visual C++)编写的“画图板”程序,该程序旨在模拟Windows系统自带的画图工具,提供手绘线、绘制简单图形、文字输入、图块拖放、重复撤销、画面缩放以及图片的打开与保存等核心...

    vc画图板源码

    在本文中,我们将深入探讨基于VC++的"vc画图板源码",这是一个用于创建图形界面应用程序的项目。这个项目的核心是利用MFC(Microsoft Foundation Classes)库,它是Microsoft为C++开发者提供的一个用于构建Windows...

    Java画图板应用

    为了提供类似Windows画图板的橡皮擦功能,Java画图板应用可能实现了两种模式:一种是使用特定的橡皮擦工具,另一种是将画笔颜色设置为背景色,从而达到擦除的效果。此外,添加形状绘制功能,如矩形、圆形和多边形,...

    VC++实现简单的画图板程序

    当用户选择剪切或复制时,需要将当前选区的图形数据保存起来;在粘贴时,则将这些数据放到新的位置。 6. **事件处理**:GUI应用程序需要响应用户的输入,例如鼠标点击和键盘按键。在VC++中,这通常通过消息队列和...

    基于android系统的画图板

    在Android平台上,开发一个画图板应用涉及到许多关键的技术点,包括用户交互、图形渲染、数据存储以及资源管理等。以下是对"基于Android系统的画图板"这一主题的详细解析: 1. **用户交互**:Android系统提供了丰富...

    java swing 画图板

    在这个画图板项目中,可能有一个模型类来存储绘图数据,一个视图类来呈现画布,以及一个控制器类来处理用户输入和数据更新。 10. **多线程**:考虑到用户界面的响应性,绘图操作可能在后台线程(如SwingWorker)中...

    MFC做的画图板

    在本文中,我们将深入探讨如何使用Microsoft Foundation Classes (MFC) 创建一个自定义的画图板应用程序。MFC 是微软为Visual C++ 提供的一套类库,它封装了Windows API,使得开发者能够更容易地构建Windows 应用...

    仿windows画图板

    【标题】"仿windows画图板"所涉及的知识点主要集中在...总的来说,"仿windows画图板"项目是一个综合性的VB编程实践,涵盖了GUI设计、用户交互、图形编程和文件操作等多个方面,对于学习和提升VB编程技能非常有帮助。

    C# 画图板 源码

    9. **保存与加载**: 可能还实现了将画布内容保存到文件(如BMP或PNG格式)以及从文件加载的功能。这涉及到`Bitmap`类的使用,以及文件I/O操作。 10. **代码组织与设计模式**: 良好的源码结构可能包括多个类,每个类...

    简单画图板的设计

    5. **图像数据结构**:画图板需要存储和操作图像数据,这通常涉及位图或像素数组。理解如何在内存中存储和操作这些数据是非常重要的。 6. **编程语言和框架**:实现画图板可以选用多种编程语言,如C#、Java、Python...

    画图板的实现

    在这个主题中,我们将深入探讨如何实现一个基本的画图板,并通过源码分析来理解其背后的原理。 首先,画图板的核心功能是允许用户通过鼠标或触控设备进行绘图。在Java中,我们可以利用Swing或JavaFX库来构建GUI。...

    画图板(C#实现

    8. **保存与加载**:为了保存用户的创作,程序需要提供将画布内容保存到文件(如图片格式或特定的项目文件格式)以及从文件中加载的功能。 9. **界面设计**:一个良好的用户界面是必不可少的,包括菜单栏、工具箱...

    C#画图板程序

    C#画图板程序是一种基于Microsoft .NET Framework的桌面应用程序,它允许用户通过鼠标或触控设备进行图形绘制。这个程序通常由C#编程语言编写,利用Windows Forms或WPF(Windows Presentation Foundation)框架来...

    JAVA应用程序 画图板

    8. **文件保存和加载**:一个完整的画图板应用还可能支持保存和加载用户的作品。这涉及到文件I/O操作,如使用File类创建、读取和写入文件,以及序列化和反序列化对象来保存和恢复图形数据。 9. **状态管理**:为了...

Global site tag (gtag.js) - Google Analytics