水平翻转 BufferedImage
Flipping a BufferedImage horizontally
我正在使用以下代码水平翻转图像。它有效,但图像同时水平和垂直翻转。
面向右的图像,现在面向左,但也垂直翻转。
我怎样才能停止垂直翻转?
代码:
public static BufferedImage createRotated( BufferedImage image)
{
AffineTransform at = AffineTransform.getRotateInstance(
Math.PI, image.getWidth()/2, image.getHeight()/2 );
return createTransformed(image, at);
}
public static BufferedImage createTransformed( BufferedImage image, AffineTransform at)
{
BufferedImage newImage = new BufferedImage(
image.getWidth(), image.getHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D gg = newImage.createGraphics();
gg.transform(at);
gg.drawImage(image, 0, 0, null);
gg.dispose();
return newImage;
}
因为您是将图像旋转 180 度,而不是翻转它。
改用AffineTransform.getScaleInstance(-1, 1);
。
编辑:从这里开始:
// Flip the image horizontally
tx = AffineTransform.getScaleInstance(-1, 1);
tx.translate(-image.getWidth(null), 0);
您还必须平移图像,因为比例尺会将图像向左移动。
我做了一些性能测试,这比使用 AffineTransform
:
更有效
public static BufferedImage flipHoriz(BufferedImage image) {
BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D gg = newImage.createGraphics();
gg.drawImage(image, image.getHeight(), 0, -image.getWidth(), image.getHeight(), null);
gg.dispose();
return newImage;
}
我正在使用以下代码水平翻转图像。它有效,但图像同时水平和垂直翻转。 面向右的图像,现在面向左,但也垂直翻转。 我怎样才能停止垂直翻转? 代码:
public static BufferedImage createRotated( BufferedImage image)
{
AffineTransform at = AffineTransform.getRotateInstance(
Math.PI, image.getWidth()/2, image.getHeight()/2 );
return createTransformed(image, at);
}
public static BufferedImage createTransformed( BufferedImage image, AffineTransform at)
{
BufferedImage newImage = new BufferedImage(
image.getWidth(), image.getHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D gg = newImage.createGraphics();
gg.transform(at);
gg.drawImage(image, 0, 0, null);
gg.dispose();
return newImage;
}
因为您是将图像旋转 180 度,而不是翻转它。
改用AffineTransform.getScaleInstance(-1, 1);
。
编辑:从这里开始:
// Flip the image horizontally
tx = AffineTransform.getScaleInstance(-1, 1);
tx.translate(-image.getWidth(null), 0);
您还必须平移图像,因为比例尺会将图像向左移动。
我做了一些性能测试,这比使用 AffineTransform
:
public static BufferedImage flipHoriz(BufferedImage image) {
BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D gg = newImage.createGraphics();
gg.drawImage(image, image.getHeight(), 0, -image.getWidth(), image.getHeight(), null);
gg.dispose();
return newImage;
}