android nv位图打印机_Android平台实现位图(Bitmap)的序列化和反序列化

1 packagebreakan.serializable;2 3 importjava.io.ByteArrayOutputStream;4 importjava.io.FileInputStream;5 importjava.io.FileOutputStream;6 importjava.io.ObjectInputStream;7 importjava.io.ObjectOutputStream;8 importjava.io.Serializable;9 10 importandroid.app.Activity;11 importandroid.graphics.Bitmap;12 importandroid.graphics.BitmapFactory;13 importandroid.graphics.Bitmap.CompressFormat;14 importandroid.graphics.drawable.BitmapDrawable;15 importandroid.os.Bundle;16 importandroid.widget.ImageView;17 importandroid.widget.TextView;18 19 publicclassSerializableActivityextendsActivity {20 privateBitmap bitmap=null;21 privateObjectOutputStream oos=null;22 privateObjectInputStream ois=null;23 //myBitmap1是要被序列化的对象24 privateMyBitmap myBitmap1=null;25 //myBitmap2是反序列化后得到的对象26 privateMyBitmap myBitmap2=null;27 privateTextView tv1=null;28 privateImageView img1=null;29 30 /**Called when the activity is first created.*/31 @Override32 publicvoidonCreate(Bundle savedInstanceState) {33 super.onCreate(savedInstanceState);34 setContentView(R.layout.main);35 bitmap=((BitmapDrawable) getResources().getDrawable(R.drawable.icon))36 .getBitmap();37 myBitmap1=newMyBitmap(BytesBitmap.getBytes(bitmap),"icon.png");38 tv1=(TextView) findViewById(R.id.tv1);39 img1=(ImageView) findViewById(R.id.img1);40 41 try{42 //序列化myBitmap对象43 oos=newObjectOutputStream(newFileOutputStream(44 "/data/data/breakan.serializable/bitmap.bin"));45 oos.writeObject(myBitmap1);46 oos.flush();47 //反序列化myBitmap对象48 ois=newObjectInputStream(newFileInputStream(49 "/data/data/breakan.serializable/bitmap.bin"));50 myBitmap2=(MyBitmap) ois.readObject();51 }catch(Exception e) {52 e.printStackTrace();53 }finally{54 try{55 if(oos!=null) {56 oos.close();57 }58 if(ois!=null) {59 ois.close();60 }61 }catch(Exception e) {62 e.printStackTrace();63 }64 }65 66 tv1.setText(myBitmap2.getName());67 img1.setImageBitmap(BytesBitmap.getBitmap(myBitmap2.getBitmapBytes()));68 }69 70 }71 72 /**73 * 因为Bitmap没有实现序列化,所以不能直接在序列化类(MyBitmap)中使用74 * BytesBitmap用于实现Bitmap和byte[]间的相互转换75 *@authorjoran76 *77 */78 classBytesBitmap {79 publicstaticBitmap getBitmap(byte[] data) {80 returnBitmapFactory.decodeByteArray(data,0, data.length);81 }82 83 publicstaticbyte[] getBytes(Bitmap bitmap) {84 ByteArrayOutputStream baops=newByteArrayOutputStream();85 bitmap.compress(CompressFormat.PNG,0, baops);86 returnbaops.toByteArray();87 }88 }89 90 /**91 * MyBitmap是要被序列化的类92 * 其中包含了通过BytesBitmap类得到的Bitmap中数据的数组93 * 和一个保存位图的名字的字符串,用于标识图片94 *@authorjoran95 *96 */97 classMyBitmapimplementsSerializable {98 /**99 * serialVersionUID解释:100 *http://www.blogjava.net/invisibletank/archive/2007/11/15/160684.html101 */102 privatestaticfinallongserialVersionUID=1L;103 privatebyte[] bitmapBytes=null;104 privateString name=null;105 106 publicMyBitmap(byte[] bitmapBytes, String name) {107 //TODO Auto-generated constructor stub108 this.bitmapBytes=bitmapBytes;109 this.name=name;110 }111 112 publicbyte[] getBitmapBytes() {113 returnthis.bitmapBytes;114 }115 116 publicString getName() {117 returnthis.name;118 }119 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
位图Bitmap)是一种用于表示图像的数据结构,也是图形图像处理的基础。它是由像素点(Pixel)组成的矩阵,每个像素点用二进制数表示其对应的颜色,通常一个像素点占用一个或多个字节的存储空间。 在Java中,可以通过java.awt.image.BufferedImage类实现位图的创建和编辑。下面是一个简单的Java代码示例,用于创建一张黑色背景、红色前景的位图,并将其保存为文件: ```java import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class BitmapExample { public static void main(String[] args) { int width = 256; int height = 256; BufferedImage bitmap = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = bitmap.getGraphics(); g.setColor(Color.BLACK); g.fillRect(0, 0, width, height); g.setColor(Color.RED); g.fillOval(64, 64, 128, 128); g.dispose(); try { ImageIO.write(bitmap, "bmp", new File("example.bmp")); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们首先创建了一个宽度和高度均为256像素的位图,然后使用Graphics对象绘制了一个黑色背景和一个红色的圆形。最后,我们将位图保存为一个bmp格式的文件,以便在其他应用程序中使用。 除了BufferedImage类外,还有许多其他的Java图像处理库和工具,如ImageJ、JAI、JavaFX等,它们都提供了不同程度的位图编辑和处理功能,可以根据具体需求选择适合自己的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值