如何从 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