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上做类似的事吗?感谢。
答案 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之一。)