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
分享到:
相关推荐
android 手势画板,可以任意滑动 画图涂鸦
自定义的超炫画板,画完可以将画板所花内容保存到手机中,也可一键清除画板,可以设置画笔的颜色,样式,画笔的粗细等。
HTML5自定义画板的设计与实现
在之前的画板上升级,不采用系统裁剪,系统裁剪有很多问题,就换成第三方库copper进行裁剪操作
几何画板自定义工具包-800多个小工具,导入到几何画板软件使用更方便。需要先安装几何画板软件再导入工具包。
自己封装好的一个简易的自定义白板demo,包含绘制,清空画板,自动裁剪,裁剪,橡皮擦,颜色改变,粗细切换,base64导入导出功能。需要的可以自行下载,写的不好见谅
几何画板重要工具包,提供便捷的几何画板工具,随心所欲地创造几何图形。 工具包括:线工具、角工具、三角形、四边形、正多边形、圆工具、新新坐标系、迷你坐标系、经典坐标系、函数工具、箭头工具、圆锥曲线A、圆锥...
这是一个自己实现的画板功能,可以选择线条的颜色,宽度,实现橡皮擦和撤销功能还可以将画的图像保存到相册
几何画板安装包加800多个自定义工具包
android 自定义view 画板
一个自定义的你画我猜的画笔。一共有三个自定义view组成
在画板上可调节画笔的粗细和颜色!还可添加照片!功能实用!代码简单!
android 签名画板 , 可以自定义画笔 , 类似于银行签名确认,使用简单,可以保存当前画板数据
演示用画板来制作选择框效果 实现原理非常简单,需精装修则自行加工 需要下载最新版本的火山模块:点击本链接
用自制画板打开和保存BMP格式文件。画板代码如下
可以快速的直接使用的工具,前提是需要几何画板软件
几何画板自定义工具合集 将下载的工具文件夹放到几何画板安装目录下,打开几何画板软件,在自定义工具点击“选择工具文件夹”。在弹出的对话框中找到你放在安装目录下的工具文件夹,单击选中该文件,然后点击“选择...
2023年最新的Sketchpad几何画板工具包,44个自定义工具文件夹,包含800多个小工具。包含使用示例。GSP软件工具包,包含GSP软件,一键打开使用,不用安装。
最近研究了HTML5一些新的元素属性,...以下使用JavaScript结合Canvas实现一个画板功能 效果演示图: 代码部分(直接复制便可使用) <!...JavaScript+Canvas实现自定义画板</title> </head> <body>
易语言取画板图片文件源码.zip