内容简介:翻译自: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下载图像并从中创建位图对象?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大型网站技术架构演进与性能优化
许令波 / 电子工业出版社 / 2018-6 / 79
《大型网站技术架构演进与性能优化》从一名亲历者的角度,阐述了一个网站在业务量飞速发展的过程中所遇到的技术转型等各种问题及解决思路。从技术发展上看,网站经历了Web应用系统从分布式、无线多端、中台到国际化的改造;在解决大流量问题的方向上,涉及了从端的优化到管道到服务端甚至到基础环境优化的各个层面。 《大型网站技术架构演进与性能优化》总结的宝贵经验教训可以帮助读者了解当网站遇到类似问题时,应如何......一起来看看 《大型网站技术架构演进与性能优化》 这本书的介绍吧!