我有一个名为loadFromCache的方法,如果在缓存中找到它,它会返回一个位图。长话短说我把它缩小到这个方法,如果try / catch失败,最后返回null。
FileInputStream fis = new FileInputStream(getCacheDir()+(""+position));
ObjectInputStream ois = new ObjectInputStream(fis);
Bitmap temp = (Bitmap)ois.readObject();
fis.close();
return temp;
我之前尝试过Bitmap.compress(...)方法来保存位图,但它们对我的需求来说有点慢...是的,位图已写入这些位置,但我不知道是不是(位图)是可序列化的,它实际上是在保存吗?是的,我记得在写文件时刷新。
答案 0 :(得分:0)
Bitmap.compress()
对你来说太慢了?唯一更快(?)的方法是将位图不变地写入磁盘,见下文。
将MappedByteBuffer
与Bitmap.copyPixelsToBuffer()
一起使用可能会有效。我没有测试过这个,但似乎它可以工作。请注意,您很可能必须自己存储图像尺寸。
答案 1 :(得分:0)
分享我刚刚使用Bitmap.compress的经验非常慢:
我的源图像是jpeg,我将Bitmap.CompressFormat.PNG传递给bitmap.compress。这导致压缩操作需要10-15秒。
一旦我将其更改为JPEG(使源文件和目标文件保持相同的图像格式),操作只需不到一秒钟。也许原始问题是通过类似的方式产生的,也许其他人认为这有用。