【问题标题】:image too large to be displayed图像太大而无法显示
【发布时间】:2016-03-09 17:45:13
【问题描述】:

我正在构建一个应用程序来从图库中加载图像,到目前为止它对于某些图像运行良好,但是我不断收到消息“位图太大而无法上传到纹理中 (2988x5312, max=4096x4096)”

这是显示位图的代码。

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null)
        {
            Uri filePath = data.getData();
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                Picasso.with(MainActivity.this).load(filePath).error(R.drawable.smile).into(imageView1);
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

我能做些什么来解决这个问题?调整图像大小?或检查图像是否太大?这里的图像可接受的分辨率是多少?

【问题讨论】:

  • 调整图像的大小会减少内存占用,并且不会在项目中出现 bitmapoutofmemory 错误。如果您在保持纵横比的情况下重新缩放它,那么它看起来不会模糊。

标签: android image


【解决方案1】:

您自己回答,是的,您必须缩放图像,使用毕加索很容易,无论如何检查this issue 和检查如何获得设备支持的最大纹理大小的答案。

查看this link 了解如何使用毕加索重新采样图像。

【讨论】:

  • 很高兴知道这一点!
【解决方案2】:

毕加索有足够好的缓存管理功能。 您可以调整图像大小,

Picasso
.with(context)
.load(YOUR IMAGE PATH)
.resize(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio
.into(imageView);

或者你可以缩小图像。

 Picasso
.with(context)
.load(YOUR IMAGE PATH])
.resize(1920, 1080) // your desire ratio
.onlyScaleDown() // the image will only be resized if it's bigger than 6000x2000 pixels.
.into(imageView);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多