[英]Load huge image from file
我正在使用存储在Environment.getDataDirectory()上的图片,它们的宽度为1920宽,高度为1080,我想使用以下代码将它们加载到图像视图中:
File imgFile = new File(Environment.getDataDirectory() + "/data/com.My.Package/files/Pictures/Sun.jpg");
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
zoomImage.setImageBitmap(myBitmap);
但是在Android 6.0 (Samsung Galaxy S6 Edge)上出现此错误 ,在Android 5 (HTC One)上运行良好 :
W / OpenGLRenderer:位图太大,无法上传到纹理中(3240x5760,max = 4096x4096)
因此,现在提出一个问题:有没有办法避免这种错误并且没有质量下降(我将需要这种质量,因为您可以缩放图像)
如您的错误所指出,图像太大,无法加载。
基本上,现在您要将整个图像加载到内存中。
您必须获得较小的/按比例缩小的位图版本。
您可以使用BitmapFactory.Options轻松完成此操作,
这是一个链接,其中详细介绍了用于此目的的推荐技术:developer.android.com/training/displaying-bitmaps/load-bitmap.html
我认为您应该尝试使用Glide加载它。
该过程非常简单,快速,并且希望不会有任何OOM。
只需在build.gradle
编译它
compile 'com.github.bumptech.glide:glide:3.7.0'
接着
Glide
.with(this)
.load(imgFile)
.into(zoomImage);
就是这样,您再也不会希望再面对OOM
了,我在许多应用程序中处理过图像,而我也从未面对过OOM
。
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.