`
jcs130
  • 浏览: 131404 次
  • 性别: Icon_minigender_1
  • 来自: Ottawa
社区版块
存档分类
最新评论

哈~终于把画图板的两种保存方式搞定了~谈谈我对于这个的理解~

 
阅读更多

我们的程序都运行的时候,数据都是存储在内存里的~对吧~

 

就像我的那个画图板,不管画多少图形,只要把程序一关掉~那些数据就没了~所以必须要在硬盘(永久存储介质)上保存成数据文件~(╮(╯▽╰)╭这不是废话么……)

 

把内存中的数据写入硬盘上的文件或者从文件读取到内存,就要用到“流”。“流” 就和水管子一样,数据从内存流到文件,从文件流到内存。流分为输入流和输出流:输入流是把数据输入到内存中的流,输出流就是把数据从内存中输出的流,输入输出都是相对与内存而言的~不要搞混了哦~

 

经过学习,我的画图板最开始时以队列的方式存储每一个图形,画板重绘的时候就是从队列中依次把之前画的图像提取出来。

所以保存的时候最先用的是以队列的形式把画图板的图形保存到文件中。

因为当时做简单画板的时候用的并不是java里面提供的现成的队列(List),而是自己自定义的一个队列,所以刚开始的时候还遇到了个麻烦:

    通过查阅JDK文档,发现了ObjectInputStream 这个流可以把任意对象写入文件~所以就用了这个流,可是一运行就报错,以前没有见过,具体是什么记不得了,只知道我问了一个学长,他告诉我报这个错是因为我自定义的类没有实现Serializable这个接口,而凡是要通过ObjectInputStream保存的对象的类都要实现Serializable这个接口~哈~这下我学习了~

一开始我写的是直接把流写入文件,但是速度奇慢……而且CPU占用几也很高。如图:

 


 

 

后来加入了缓冲流,以上两个问题得到了改善。

但是当图形对象很多的时候,保存速度还是慢……以打开为例,如图:

 

 


 

这使我们的第二中保存方式——把像素都保存到数组里面的方法优势就出来了~同样以打开为例:

 

 


 

时间减少了不少吧~~

 

 

但是,当对象比较少的时候队列的速度就快了,而像素方式的速度没有多少改变(正常情况~因为不管有多少图形对象,像素方式都会把整个画布上的像素保存一遍,所以速度上没什么变化):例如:

 

以队列保存:

 


 

以像素数组保存:

 

 


 

计算机中的真正的BMP(位图)文件大概就是像上面说的数组保存的方式,不过还是有区别的~

等学到了再说~哈~~

 

  • 大小: 33.9 KB
  • 大小: 305.2 KB
  • 大小: 35.7 KB
  • 大小: 89.9 KB
  • 大小: 90.4 KB
2
6
分享到:
评论
2 楼 jcs130 2011-07-29  
up2u0609 写道
不了个是吧,百度图片?

对呀~我要先上传到网上才能引用啊~
1 楼 up2u0609 2011-07-28  
不了个是吧,百度图片?

相关推荐

    画图板 代码 画图板 代码 画图板 代码

    画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...

    java 画图板 windows画图板简单实现

    在画图板中,我们主要关注mousePressed和mouseReleased,这两个方法分别在鼠标按下和释放时被调用,它们用于开始和结束绘制。 - **MouseMotionListener**:提供了一个mouseDragged方法,当鼠标在组件上移动且按钮被...

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

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

    画图板集合保存图像

    标题“画图板集合保存图像”涉及到的是一个与图形用户界面(GUI)和图像处理相关的编程话题。在本文中,作者可能分享了如何利用特定的编程语言(如Python的Tkinter库,Java的Swing或AWT,或者是C#的Windows Forms等...

    画图板,window画图板

    在Windows画图板中,这一特性主要体现在以下几个方面: 1. 颜色选择:用户可以选择不同颜色进行绘制,画图板支持多种颜色模式,包括标准颜色和自定义颜色,使得动态改变颜色成为可能。 2. 工具选择:画图板提供了...

    学生制作的画图板

    【标题】:“学生制作的画图板” 这个标题揭示了一个由学生开发的专门用于绘画的软件工具,很...无论是哪种情况,这个画图板都是一个很好的示例,展示了学生如何利用技术解决实际问题,同时也体现了分享和互助的精神。

    Java简单画图板---画图,保存,打开,擦除

    在Java编程领域,创建一个简单的画图板是一项基础但实用的任务,这有助于理解图形用户界面(GUI)的设计和事件处理。这个"Java简单画图板"项目提供了基本的绘画功能,如绘制、保存、打开以及擦除,为用户提供了一个...

    QT画图板详例

    对于初学者来说,QT画图板是一个极好的学习资源,它展示了Qt库在图形绘制和用户交互方面的强大功能。 首先,Qt是一个跨平台的C++库,用于开发桌面、移动和嵌入式设备的应用程序。它的核心特性包括事件处理、窗口...

    java画图板程序代码

    Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...

    仿XP画图板

    开发者可能使用了其中的一种来构建这款画图板,包括窗口、菜单、按钮等组件的创建。 2. **事件处理**:JAVA程序中的事件处理是用户与应用程序交互的核心,例如点击按钮、选择颜色等。开发者需要设置监听器来响应...

    vc画图板源码

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

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

    【标题】:“画图板源码示例”通常指的是一个包含源代码的项目,这个项目可能是一个简单的图形编辑器或绘图应用程序。这样的源码示例对于初学者和开发者来说非常有价值,因为它提供了如何在编程环境中创建类似画图...

    画图板_Vc_

    总的来说,这个“画图板”项目涵盖了GUI编程的基础,包括窗口创建、消息处理、图形绘制、文件操作等多个方面,对于学习和提升VC++编程技能非常有帮助。通过实践这样的项目,开发者不仅可以加深对Windows API的理解,...

    C# 画图板 源码

    在C#编程环境中,开发一个画图板是一个常见的练习,用于学习图形用户界面(GUI)设计和绘图操作...通过研究这个源码,开发者可以深入理解C#中图形绘制和用户交互的实现方式,这对于学习GUI编程和提升C#技能非常有帮助。

    画图板自定义格式保存

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

    java swing 画图板

    在这个"java swing 画图板"项目中,开发者仿照了Windows操作系统中的“画图”程序,提供了一个基本的绘图环境。下面将详细讨论相关的Java Swing知识点。 1. **组件(Components)**:在Swing中,JFrame是窗口的基础...

    JAVA开发的画图板

    本程序完成的是一个类似于Windows画图板的画图程序,由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项: 1.新建 2.打开或保存 3.绘制一些基本的图形组件 4.用鼠标在绘图板上单击...

    画图板的实现

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

Global site tag (gtag.js) - Google Analytics