0

我正在使用存储在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,最大值=4096x4096)

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

4

3 回答 3

0

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

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

你必须得到一个更小的/按比例缩小的位图版本。

您可以使用 BitmapFactory.Options 轻松做到这一点,

这是一个链接,详细介绍了为此使用的推荐技术:developer.android.com/training/displaying-bitmaps/load-bitmap.html

于 2016-04-26T16:39:38.413 回答
0

请检查“位图太大,无法上传到纹理中”

防止位图太大而无法上传到纹理android

它与您的日志有相同的错误

于 2016-04-26T16:59:58.583 回答
0

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

该过程非常简单,而且速度很快,希望不会有任何OOM

只需在您的 build.gradle

 compile 'com.github.bumptech.glide:glide:3.7.0'

进而

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

就是这样,希望你永远不会再面对OOM,我在我的许多应用程序中使用图像,我从未面对OOM过它。

希望能帮助到你

于 2016-04-26T17:17:47.370 回答