Как рисовать и масштабировать растровое изображение на холсте с помощью бикубической интерполяции в Android?
Я хочу нарисовать растровое изображение на холсте с большим размером, чем он есть. Я могу использовать холст.drawBitmap (bitmap, null, destRect, null); но это дает низкое качество, так как результат пикселируется, если исходное изображение меньше целевого прямоугольника.
Как я могу нарисовать свое растровое изображение с помощью билинейной или бикубической повторной выборки?
любая помощь будет оценили, спасибо.
2 ответов
вам нужно установить флаг 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 и покопайтесь в первичном источнике; это единственная документация.
FILTER_BITMAP_FLAG не работает для масштабирования в большинстве случаев.
хороший алгоритм масштабирования (не ближайший сосед) состоит всего из 2 шагов (плюс расчет точного Ректа для урожая входных / выходных изображений):
- downscale с помощью BitmapFactory.Параметры:: inSampleSize - >BitmapFactory.decodeResource() как можно ближе к разрешению, которое вам нужно, но не меньше, чем это
- получить точную разрешение путем уменьшения масштаба немного с помощью холст::drawBitmap()
вот подробное объяснение того, как SonyMobile решил эту задачу: http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application/
вот исходный код utils масштаба SonyMobile: http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example-for-android/