从文件加载大图像

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) 我在 [=18] 上收到这个 错误 =]Android 5 (HTC One) 工作得很好:

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3240x5760, max=4096x4096)

现在回答问题: 有没有办法避免这个错误并且不降低质量(我需要这种质量,因为你可以缩放图像)

正如您的错误指出的那样,您的图片太大而无法加载。

基本上,现在您正在将整个图像加载到内存中。

您必须获得更小/按比例缩小的位图版本。

您可以使用 BitmapFactory.Options、

轻松完成此操作

这里有一个 link,其中详细介绍了为此使用的推荐技术:developer.android.com/training/displaying-bitmaps/load-bitmap.html

请勾选"Bitmap too large to be uploaded into a texture"

Prevent bitmap too large to be uploaded into a texture android

和你的日志一样的错误

我认为你应该尝试用 Glide 加载它。

过程非常简单,速度很快,希望不会出现任何 OOM

只需在您的 build.gradle

中编译它
 compile 'com.github.bumptech.glide:glide:3.7.0'

然后是

Glide
    .with(this)
    .load(imgFile)
    .into(zoomImage);

就是这样,希望您永远不会再面对 OOM,我在我的许多应用程序中处理过图像,但我从未面对过 OOM

希望对您有所帮助