【问题标题】:Canvas: trying to draw too large(144609280bytes) bitmap, at android.view.DisplayListCanvas.throwIfCannotDraw画布:试图在 android.view.DisplayListCanvas.throwIfCannotDraw 绘制太大(144609280 字节)位图
【发布时间】:2018-07-29 12:39:48
【问题描述】:

我从网络服务获取图像,我执行以下操作以在 imageView 中显示它。

Picasso.with(getApplicationContext()).load(imageURL).fit().centerCrop().into(ivNews);

2天前2048X1600分辨率图像上传到服务器,突然应用程序开始崩溃,出现此异常Canvas: trying to draw too large(144609280bytes) bitmap

服务器上传的图片有可能高于上述分辨率,服务器以后也可以上传更多的高分辨率图片。

看了this的文章,里面提到glide在性能上比毕加索更快更好,

还提到如果你使用.fit().centerCrop(),那么性能会更好,但我已经在使用这些,并收到这些错误消息

我想用毕加索来解决这个问题

【问题讨论】:

  • 它会工作吗Picasso.get().load(R.drawable.chat_image_placeholder).resize(1024, 800).onlyScaleDown().fit().centerCrop().into(thumbnailView)

标签: android android-layout picasso android-glide


【解决方案1】:

如果图像尺寸较大,您可以使用scaleDown() 来缩放图像。你可以像下面这样使用它。

Picasso  
.with(context)
.load(<image_url>)
.resize(2048, 1600)
.onlyScaleDown() // the image will only be resized if it's bigger than 2048x 1600 pixels.
.into(<image_view>);

【讨论】:

  • 谢谢,所以在调整大小上使用更大的值会更好地提高性能?但这会影响图像质量。对吗?
  • 您可以选择特定分辨率的阈值限制。例如(1080x720),任何高于它的东西都会被缩小。是的,缩小可能会扭曲您的图像。
  • 您的回答听起来非常合理,而 2.5.2 java.lang.IllegalStateException: onlyScaleDown can not be applied without resize 的实际行为却并非如此。毕加索真可惜:(
  • 何时使用fit(),何时使用resize()?可以给我说清楚吗?
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
相关资源
最近更新 更多