0

我继承了这段代码,并试图弄清楚如何让它更有效,这样我就不必抛出 OutOfMemory 异常。这适用于 writeBitmap 和 readBitmap。

/**
 * Reads bitmap from the state file
 */
void readBitmap(Bitmap bitmap) throws OutOfMemoryException {
    byte[] buffer;
    try {
        buffer = new byte[file.length()];
    } catch (OutOfMemoryError e) {
        throw new OutOfMemoryException(e);
    }

    try {
        file.readBytes(buffer, 0, 0, buffer.length);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    Buffer byteBuffer = ByteBuffer.wrap(buffer);

    try {
        bitmap.copyPixelsFromBuffer(byteBuffer);
    } catch (Exception e) {

    }
}
4

1 回答 1

1

您可以保存压缩位图。它会做到这一点,所以你不需要有一个中间字节缓冲区。只需将压缩格式调整为您想要的。您还可以使用创建的内存文件的大小。

   public void writeBitmap(Bitmap bitmap, int id) throws OutOfMemoryException {
        final int bitmapSize = bitmap.getRowBytes() * bitmap.getHeight();

        try {
            file = new MemoryFile("file" + id, bitmapSize);
            FileOutputStream out = file.getOutputStream()
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        size.x = bitmap.getWidth();
        size.y = bitmap.getHeight();
    }
于 2013-03-23T16:10:02.267 回答