如何在Android上执行与AffineTransformOp.filter类似的操作?

时间:2012-02-29 12:00:25

标签: android

public final BufferedImage filter(BufferedImage src, BufferedImage dst)

  
    

转换源BufferedImage并存储结果     在目的地BufferedImage
    如果两个图像的颜色模型不匹配,则为颜色     执行转换为目标颜色模型。     如果目标图像为null,则会使用源创建BufferedImage     ColorModel。     返回的矩形的坐标     getBounds2D(BufferedImage)不一定与the的坐标相同     此方法返回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 :(得分:0)

您可以执行类似

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

注意 :BTW,Oracle JavaSE AffineTransformOp#filter在输出BufferedImage为空时出现错误,它会创建{{1}但是使用默认颜色空间,而不是输入BufferedImage之一。)