Изображения, масштабируемые в Flutter - PullRequest
0 голосов
/ 04 марта 2020

У меня есть изображения, хранящиеся в виде BLOB-объектов в SQLite. Другие инструменты, такие как DB Browser для SQLite, показывают, что сами изображения не масштабируются.

Я уменьшил их с исходного изображения с помощью следующего кода.

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

При отображении в Flutter они заметно upscaled.

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

Image.memory() имеет аргумент scale, который по умолчанию равен 1.0. Установка вручную, чтобы убедиться, что это тоже не поможет.

Мне нужно установить какое-то предполагаемое значение, такое как 2.0, чтобы получить правильный масштаб, но я не понимаю, почему и действительно ли 2.0 "немасштабировано" или все еще слегка отключено.

Как я могу сказать Flutter отображать изображения такими, как они есть?

1 Ответ

1 голос
/ 04 марта 2020

Флаттер использует логический пиксель вместо физических пикселей.

Пиксели устройства также называются физическими пикселями. Логические пиксели также называются независимыми от устройства или независимыми от разрешения пикселями.

Как преобразовать физические пиксели в логические?

Чтобы преобразовать физические пиксели в логические, Вы можете использовать devicePixelRatio .

Количество пикселей устройства для каждого логического пикселя. Это число не может быть степенью двойки. Действительно, это может даже не быть целым числом. Например, Nexus 6 имеет соотношение пикселей устройства 3,5.

MediaQuery.of(context).devicePixelRatio
...