【问题标题】:Images being upscaled in Flutter在 Flutter 中放大图像
【发布时间】:2020-06-16 16:15:04
【问题描述】:

我在 SQLite 中将图像存储为 blob。 DB Browser for SQLite 等其他工具显示图像本身没有放大。

我使用以下代码从原始图像按比例缩小它们。

final thumbnailData = encodeJpg(copyResize(
  decodeImage(imageData),
  width: 400,
  interpolation: Interpolation.average
));

在 Flutter 中显示时,它们明显放大了。

@override
Widget build(BuildContext context) {
  return Image.memory(_getThumbnailData());
}

Image.memory() 有一个scale 参数,默认为1.0。手动设置也无济于事。

我必须将其设置为某个估计值,例如 2.0 才能获得正确的比例,但我不明白为什么,2.0 实际上是“未缩放”还是略微偏离。

如何告诉 Flutter 以原样显示图像?

【问题讨论】:

  • 只是为了澄清;正在尝试说例如 400 x 400 图像显示为 800 x 800??
  • 是的,模拟器的屏幕截图是 1080 像素宽。图像有 400 像素宽,显示为 800 像素(几乎是整个屏幕),因此非常放大。对于看起来放大到 400 像素的 200 像素宽的图像也是如此。
  • flutter 使用逻辑像素而不是硬件像素。因此,根据设备的显示密度,400x400 图像的显示可能会有所不同。
  • 谢谢,“逻辑像素”把我带到了MediaQuery.of(context).devicePixelRatio。将其用作Image.memory()scale 属性可以正确显示图像。
  • 太好了。我可以将其发布为答案吗?

标签: flutter flutter-image


【解决方案1】:

Flutter 使用逻辑像素而不是物理像素。

设备像素也称为物理像素。逻辑像素也称为与设备无关或与分辨率无关的像素。

如何在物理像素和逻辑像素之间进行转换?

要在物理像素和逻辑像素之间进行转换,可以使用devicePixelRatio

每个逻辑像素的设备像素数。这个数字可能不是二的幂。事实上,它甚至可能不是整数。例如,Nexus 6 的设备像素比为 3.5。

MediaQuery.of(context).devicePixelRatio

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2020-11-09
    • 2014-07-20
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多