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

Posted

技术标签:

【中文标题】如何从 android 中的 sdcard 图像创建位图?【英文标题】:How to create bitmap from sdcard images in android? 【发布时间】:2011-05-31 13:02:31 【问题描述】:

我需要从 sdcard 图像创建一个位图,所以在获取图像的 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 调用我的应用程序。 如果我错了,请指导我......而且这个异常出现在具有高分辨率图像(大小超过 1MB)的设备上,但是它应该如何创建位图......

【问题讨论】:

【参考方案1】:

尝试使用BitmapFactory.decodeStream() 方法,而不是先将字节数组加载到内存中。另请查看question 了解有关加载位图的更多信息。

【讨论】:

BitmapFactory.decodeStream() 确实帮助了我,但如果在上面给出的链接(问题)中寻求解决方案,它会严重降低图像质量......使用 BitmapFactory.Options.inSampleSize 会降低画质

以上是关于如何从 android 中的 sdcard 图像创建位图?的主要内容,如果未能解决你的问题,请参考以下文章

裁剪图像并保存到 sdcard (Android) 中的特定文件夹?

将图像从 Android 上的可绘制资源保存到 sdcard

Android 从 sdcard 读取图像。尺寸错误

如何判断 sdcard 是不是安装在 Android 中?

Android如何扫描sdcard中的音乐文件,并加载到ListView中?

Android:如何保存不是(JPEG 和 PNG)的图像文件? [旋转后]