2012-02-29 2 views
1

public final BufferedImage filter(BufferedImage src, BufferedImage dst)Как выполнить аналогичную операцию, как AffineTransformOp.filter на Android?

Превращает источник 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, я использую матрицу вместо 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? Благодарю.

ответ

0

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

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

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

Смежные вопросы