如何在android中创建sdcard图像的位图?

时间:2011-05-31 13:02:31

标签: android image bitmap out-of-memory

我需要从SD卡图像创建一个位图,所以在获得图像的uri后,我通过打开inputStream来获取字节数据,如下所示

public byte[] getBytesFromFile(InputStream is)
{
    byte[] data = null;
    ByteArrayOutputStream buffer=null;
    try
    {
        buffer = new ByteArrayOutputStream();

        int nRead;
        data = new byte[16384];
        while ((nRead = is.read(data, 0, data.length)) != -1)
        {
            buffer.write(data, 0, nRead);
        }

        buffer.flush();

        return buffer.toByteArray();
    } catch (IOException e)
    {
        return null;
    }
    finally
    {
        if(data!=null)
            data = null;
        if(is!=null)
            try {
                is.close();
            } catch (Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(buffer!=null)
            {
                try {
                    buffer.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                buffer = null;
            }
            System.gc();
    }

之后,我只是通过以下代码

创建该数据的位图
byte[] data = getBytesFromFile(is);
Bitmap bm= BitmapFactory.decodeByteArray(data, 0, data.length);

但它给了我一些内存错误。许多人指导我检查内存泄漏但是,这是我的应用程序的第一步。,我的意思是通过意图过滤我从画廊菜单选项“共享”启动我的应用程序,它使用图像uri调用我的应用程序。 PLZ指导我们,如果我错了...而且这个例外来自具有高分辨率图像的设备(大小超过1MB),但它应该如何创建Bitmap ......

1 个答案:

答案 0 :(得分:1)

尝试使用BitmapFactory.decodeStream()方法,而不是先将bytearray加载到内存中。另请查看此question以获取有关加载位图的更多信息。