Как выполнить операцию, аналогичную AffineTransformOp.filter на Android?

1

public final BufferedImage filter(BufferedImage src, BufferedImage dst)

Преобразует источник BufferedImage и сохраняет результаты в целевом BufferedImage.
Если цветовые модели для двух изображений не совпадают, выполняется преобразование цвета в целевую цветовую модель. Если целевое изображение имеет null, создается BufferedImage с источником ColorModel. Координаты прямоугольника, возвращаемого getBounds2D(BufferedImage), не обязательно совпадают с координатами BufferedImage возвращаемыми этим методом. Если верхние левые угловые координаты прямоугольника отрицательные, эта часть прямоугольника не нарисована. Если верхние левые угловые координаты прямоугольника положительны, то отфильтрованное изображение
нарисован на этой позиции в пункте назначения BufferedImage.

У меня был следующий код на Java 1.6:

//Make image always std_height tall
double scaleAmount = (double) std_height / (double) characterImage.getHeight();
AffineTransform tx = new AffineTransform();
tx.scale(scaleAmount, scaleAmount);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
characterImage = op.filter(characterImage, null);

В Android я использую Matrix вместо AffineTransform:

//Make image always std_width wide
float scaleAmount = (float) std_width / (float) characterImage.getWidth();
//AffineTransform tx = new AffineTransform();
//tx.scale(scaleAmount, scaleAmount);
Matrix mx = new Matrix();
mx.setScale(scaleAmount, scaleAmount);
//AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); //Can't use this on Android
//characterImage = op.filter(characterImage, null); //Can't use this on Android

Моя проблема связана с двумя прокомментированными строками. Могу ли я сделать что-то подобное на Android? Благодарю.

Теги:

1 ответ

0
Лучший ответ

Вы можете сделать что-то вроде

Matrix m = new Matrix();
matrix.postScale(scaleAmount, scaleAmount);
Bitmap b = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), m, true);

(Примечание: BTW, AffineTransformOp#filter Oracle JavaSE AffineTransformOp#filter имеет ошибку, когда выход BufferedImage имеет значение null, он создает BufferedImage но с цветовым пространством по умолчанию, а не с входным параметром BufferedImage.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню