【问题标题】:Can Bitmaps be written to cache using ObjectOutputStream?可以使用 ObjectOutputStream 将位图写入缓存吗?
【发布时间】:2011-07-23 18:35:17
【问题描述】:

我有一个名为 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(...) 方法来保存位图,但它们对我的需要有点慢...是的,位图已写入这些位置,但我不知道是否(Bitmap) 是可序列化的,所以它实际上是在保存吗?是的,我记得在写文件时刷新。

【问题讨论】:

    标签: android file-io bitmap serializable fileoutputstream


    【解决方案1】:

    Bitmap.compress() 对你来说太慢了吗?唯一更快(?)的方法是将位图原封不动地写入磁盘,见下文。

    MappedByteBufferBitmap.copyPixelsToBuffer() 一起使用可能会起作用。我还没有测试过这个,但它似乎可以工作。请注意,您很可能必须自己存储图像尺寸。

    【讨论】:

    • 你看,对于我正在做的事情,将位图压缩为 A 类中的 png,然后在 5 秒后在我需要相同位图的 B 类中解码它们真的没有意义在 A 类中创建...我一直无法使用解码流将文件读入我的 AnimationDrawable。我有一个扩展可绘制并在构造函数中接收位图的子类。然后,当我尝试添加文件时,AnimationDrawable 上没有显示任何内容,但是当我从 R.drawable 添加帧时,它工作正常。
    • 这是我使用的代码 for(int x=0; x
    【解决方案2】:

    分享我刚刚体验过的 Bitmap.compress 非常慢:

    我的源图像是 jpeg,我将 Bitmap.CompressFormat.PNG 传递给 bitmap.compress。这导致压缩操作需要 10-15 秒。

    一旦我将其更改为 JPEG(以使源文件和目标文件保持相同的图像格式),则该操作只需不到一秒钟的时间。也许最初的问题是通过类似的方式提出的,也许其他人会觉得这很有帮助。

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2019-08-15
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多