Как нарисовать и масштабировать растровое изображение на холсте, используя бикубическую интерполяцию в Android? - PullRequest
16 голосов
/ 25 марта 2010

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

Как нарисовать мое растровое изображение с помощью билинейной или бикубической повторной выборки?

Буду признателен за любую помощь, спасибо.

Ответы [ 2 ]

34 голосов
/ 25 марта 2010

Вам нужно установить флаг 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 и копайтесь в сыром источнике; это единственная документация.

0 голосов
/ 21 апреля 2014

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-your-android-application/

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

...