关于画图的保存
来源:互联网 发布:java单机游戏下载网站 编辑:程序博客网 时间:2024/05/21 08:09
之前有写过一个画图板的小程序,不能保存,这次添加了一个保存功能,效果大致如下:
关于如何保存,保存数据,就是要保存作画时的每个动作,一条简单的画直线的操作要如何保存呢?有四个要素:保存要画的是直线,画笔的颜色,起始坐标,终止坐标。保存好这四个要素,就可以把之前的画过的直线重新画一遍。
我们可以定义一个Shape类来定义画图时的每一个动作,这样将数据写入到磁盘中保存、每次打开程序并从磁盘中读取文件时,就要用到数据流。
具体怎么做?
1、在程序中定义一个Shape类的队列 private ArrayList<Shape> list = new ArrayList<Shape>();
(注意: 要给它分配空间,= new 不能少 ,否则写不进去内容)
2、在程序启动的时候,就要list的内容初始化,也就是从磁盘中将存储的shape一个个读出来,并添加到list中去。
3、然后就是记录新添加的笔画,如果画笔有新的动作就立即添加到list中去。如果按保存按钮,就将list的内容再写入到磁盘中去(覆盖原有内容)。
在写程序的时候也遇到了一些问题,在这里就一一说一下:
1、开始想每添加一个画图的操作就立即存储到磁盘中去,这样比较麻烦,而且使用着没有要求保存(按保存按钮),就保存了,不符合要求。
2、在拖动和松开这两个Actionlistener的方法中重复定义了画直线的操作。
3、写入和读取没有严格的一一对应,导致读出来有问题。(写的时候用write、读的时候用的readInt,显然不可以,读出来的就不一致)。
4、Color类怎么保存,Color可以转换成rgb的值 ,也就是 int rgb = color.getRGB(); 但是不知道怎么把rgb 转换成 Color类(有上网查rgb, rgb为int型,占四个字节,前三个字节分别为red、green 、blue的值,最后一个字节为颜色的透明度),所以干脆将颜色分为red、green、blue这三个值存储,然后复原颜色的时候就用
Color color = new Color(red,green,blue) ;
5、之前的图像类型是用String保存的,比如说记录画直线,它保存的对象就是”line”,但是如果将String转换成byte数组保存在磁盘中不好读取(因为不知道有多大),所以用int型代替String类型的数据,比如“line”,我就用1标记它,存入图像类型的时候存储1,读出来的时候如果读到的是1,我就知道该画直线了。
6、对于一些特殊的操作有不同的方法:
对于喷漆(spout),只对一个xy坐标进行操作,所以起始坐标和终止坐标一样。
对于多边形则将其拆分成多个直线保存就可以了。
对于刷子,要注意设置画笔的宽度,画完了之后还要讲宽度复原为1。
对于橡皮擦,其颜色始终为白色,它就相当于一个白色刷子。
7、比较重要的一点,要注意画笔的获取要在窗体可见之后!!!
8、当我码完所有代码,满怀欣喜的想验证自己的保存成果时,居然发现不能成功保存,呈现给我的仍然是一张白纸,为什么要这样对我…有问题只因为自己的代码有问题,问题出在哪里呢?
我的代码原来是这样的:
this.setVisible(true); Graphics g = centerPanel.getGraphics(); dl.setG(g); dl.DrawInit();
窗体可见之后就执行DrawInit(),但是我们要知道画窗体的速度要比我们执行DrawInit()的速度要慢,所以窗体讲我们的画作覆盖掉了。
只要在窗体可见之后加一段时延就可以了。修改后的代码如下:
this.setVisible(true); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } Graphics g = centerPanel.getGraphics(); dl.setG(g); dl.DrawInit();
最后提出一个问题:
int rgb = color.getRGB();
这个rgb怎么转成color 。
- 关于画图的保存
- 保存plot画图函数的图像
- 用鼠标画图和保存的问题
- qt把画图的保存为文件
- 关于GDI画图的困惑
- 关于C# Winform的画图
- 关于Web方面的画图
- 关于plot画图的m文件不能画图的问题
- 关于画图
- 关于画图 .
- Android 保存画图
- Android 保存画图
- pandas画图时如何调整保存图片的大小
- 一个极好的关于画图的网站
- 关于JFreeChart画图的部分中文说明
- GDI+关于画图的一些问题
- 一个关于画图的简单封装!
- 关于Matlab画图的若干问题浅析
- Java之泛型【入门版,实例解析】
- 虚拟机内删除文件后减少qcow2虚拟磁盘文件实际占用的存储空间
- 学习:WordXML格式初步分析
- 【Android】TypedArray和obtainStyledAttributes使用(R.styleable.xx_xx)
- HDU 3549--Flow Problem 【最大流 && dinic】
- 关于画图的保存
- 苹果文档的使用+NSString
- Clique in the Divisibility Graph(dp递推的应用) (上升子序列)
- csu 1120 病毒(DP,LCIS)
- 简单区分Jxl和POI的不同之处
- 掌上快递之主界面篇(2)
- 南邮 OJ 1018 深度遍历二叉树
- 步步为营(十七)动态规划(一)理论初探
- 观察者模式