内容简介:翻译自:https://stackoverflow.com/questions/3628016/android-how-to-save-a-bitmap-buggy-code
我试图序列化一个类,我有一个位图变量.这是有点工作的代码….我需要帮助找出仍然有问题的…..
private Bitmap myVideoScreenshotBm; private void writeObject(ObjectOutputStream out) throws IOException{ out.writeInt(myVideoScreenshotBm.getRowBytes()); out.writeInt(myVideoScreenshotBm.getHeight()); out.writeInt(myVideoScreenshotBm.getWidth()); int bmSize = myVideoScreenshotBm.getHeight() * myVideoScreenshotBm.getRowBytes(); ByteBuffer dst= ByteBuffer.allocate(bmSize); myVideoScreenshotBm.copyPixelsToBuffer(dst); byte[] bytesar=new byte[bmSize]; dst.position(0); dst.get(bytesar); out.write(bytesar); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{ int nbRowBytes=in.readInt(); int height=in.readInt(); int width=in.readInt(); // int bmSize = nbRowBytes * height; byte[] toread= new byte[bmSize]; in.read(toread, 0, toread.length); ByteBuffer dst= ByteBuffer.allocate(bmSize); dst.put(toread); dst.position(0); myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8); myVideoScreenshotBm.copyPixelsFromBuffer(dst); }
我没有得到错误,但我得到的位图是错的…另外,我不知道如何知道哪个Bitmap.Config标志是合适的…怎么知道?
任何帮助?
以下是带内存优化的序列化代码.我使用的静态缓冲区正在增长到最大的位图大小,并且我每次都重复使用.
public class Video implements Serializable{ public long videoId; public String title; public String publisher; public String language; public Date lastModified; public Date published; public String imageUrl; public String url; public Bitmap myVideoScreenshotBm; public Date expireTime; //public Drawable myVideoScreenshotDrawable; private static ByteBuffer dst; private static byte[] bytesar; public Video (long newVideoId) { this.videoId=newVideoId; } private void writeObject(ObjectOutputStream out) throws IOException{ out.writeLong(videoId); out.writeObject(title); out.writeObject(publisher); out.writeObject(language); out.writeObject(lastModified); out.writeObject(published); out.writeObject(expireTime); out.writeObject(imageUrl); out.writeObject(url); out.writeInt(myVideoScreenshotBm.getRowBytes()); out.writeInt(myVideoScreenshotBm.getHeight()); out.writeInt(myVideoScreenshotBm.getWidth()); int bmSize = myVideoScreenshotBm.getRowBytes() * myVideoScreenshotBm.getHeight(); if(dst==null || bmSize > dst.capacity()) dst= ByteBuffer.allocate(bmSize); out.writeInt(dst.capacity()); dst.position(0); myVideoScreenshotBm.copyPixelsToBuffer(dst); if(bytesar==null || bmSize > bytesar.length) bytesar=new byte[bmSize]; dst.position(0); dst.get(bytesar); out.write(bytesar, 0, bytesar.length); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{ videoId=in.readLong(); title=(String) in.readObject(); publisher=(String) in.readObject(); language=(String) in.readObject(); lastModified=(Date) in.readObject(); published=(Date) in.readObject(); expireTime=(Date) in.readObject(); imageUrl = (String) in.readObject(); url = (String) in.readObject(); int nbRowBytes=in.readInt(); int height=in.readInt(); int width=in.readInt(); int bmSize=in.readInt(); if(bytesar==null || bmSize > bytesar.length) bytesar= new byte[bmSize]; int offset=0; while(in.available()>0){ offset=offset + in.read(bytesar, offset, in.available()); } if(dst==null || bmSize > dst.capacity()) dst= ByteBuffer.allocate(bmSize); dst.position(0); dst.put(bytesar); dst.position(0); myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); myVideoScreenshotBm.copyPixelsFromBuffer(dst); //in.close(); }
}
翻译自:https://stackoverflow.com/questions/3628016/android-how-to-save-a-bitmap-buggy-code
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Redis应用-位图
- Redis应用-位图
- Lucene 位图实现 RoaringDocIdSet
- go 位图(bitmap)的实现
- Redis 精确去重计数 —— 咆哮位图
- c# – 如何从URI下载图像并从中创建位图对象?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。