Подтвердить что ты не робот

Как рисовать и масштабировать растровое изображение на холсте с использованием бикубической интерполяции в Android?

Я хочу нарисовать растровое изображение на холсте с большим размером, чем есть. Я могу использовать canvas.drawBitmap(bitmap, null, destRect, null); но это дает низкое качество, поскольку результат пикселирован, если исходное изображение заметно меньше прямоугольника назначения.

Как я могу нарисовать растровое изображение с использованием билинейной или бикубической передискретизации?

Любая помощь будет оценена, thanx.

4b9b3361

Ответ 1

Вам нужно установить флаг FILTER_BITMAP_FLAG в вашей краске.

canvas.drawBitmap(bitmap, matrix, null); //ugly jaggies unless scale is 1:1, but fast

или

Paint paint = new Paint();
paint.setFilterBitmap();
canvas.drawBitmap(bitmap, matrix, paint); // pretty but slower (not too slow, usually)

То же самое относится к другим (синтаксическим сахара) формам метода drawBitmap.

Нет документации для большинства параметров чертежа Android, и нет документации для базовой библиотеки Skia, которая выполняет рендеринг. Я был бы счастлив, если бы был. Вы можете найти исходный код Skia в Google Code Search. Искать Skia и копаться в исходном источнике; что единственная документация.

Ответ 2

FILTER_BITMAP_FLAG не работает для уменьшения масштаба в большинстве случаев.

Хороший алгоритм уменьшения масштаба (не похожий на ближайшего соседа) состоит всего из 2 шагов (плюс вычисление точного Rect для обрезки входных/выходных изображений):

  1. уменьшить масштаб с помощью BitmapFactory.Options :: inSampleSize-> BitmapFactory.decodeResource() как можно ближе к разрешению, которое вам нужно, но не меньше его
  2. получить точное разрешение, немного уменьшив масштаб с помощью Canvas :: drawBitmap()

Вот подробное объяснение того, как SonyMobile решила эту задачу: https://web.archive.org/web/20140228024414/http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for- ваш-андроид-приложение/

Вот исходный код утилит масштаба SonyMobile: https://web.archive.org/web/20140227233706/http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example- для-андроид/