我正在尝试在Android中保留图片。我最终决定创建一个包装器对象来处理序列化。我希望它不是最佳的。
我的问题:如何才能做得更好(特别是在性能方面,不会因多个序列化而导致图像质量下降)?
public class SerializableImage implements Serializable {
private static final long serialVersionUID = 1L;
private static final int NO_IMAGE = -1;
private Bitmap image;
public Bitmap getImage() {
return image;
}
public void setImage(Bitmap image) {
this.image = image;
}
private void writeObject(ObjectOutputStream out) throws IOException {
if (image != null) {
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
final byte[] imageByteArray = stream.toByteArray();
out.writeInt(imageByteArray.length);
out.write(imageByteArray);
} else {
out.writeInt(NO_IMAGE);
}
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
final int length = in.readInt();
if (length != NO_IMAGE) {
final byte[] imageByteArray = new byte[length];
in.readFully(imageByteArray);
image = BitmapFactory.decodeByteArray(imageByteArray, 0, length);
}
}
}
答案 0 :(得分:1)
由于PNG是无损格式,因此质量不应降低。你应该注意的不是你如何在文件中写入/读取图像,而是你经常这样做。我发现使用弱引用创建内存缓存大大减少了IO调用。另请注意,即使您让系统垃圾收集旧映像,这些映像也会在本机代码中缓存较长时间。唯一可以帮助您处理此问题的调用是调用Bitmap.recycle