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? Благодарю.
Вы можете сделать что-то вроде
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.)