给定一个javafx.scene.image.image对象,旋转它并生成一个旋转的javafx.scene.image.image对象
我有创建图像的代码:(muimg是给定一个javafx.scene.image.image对象,旋转它并生成一个旋转的javafx.scene.image.image对象,java,image,javafx,transform,exif,Java,Image,Javafx,Transform,Exif,我有创建图像的代码:(muimg是javafx.scene.Image.Image) 这很好,但它确实忽略了exif TAG_的方向,因此在纵向模式下拍摄的手机照片看起来不正确 当我更改加载方法时,我能够读取此标记并将结果保存为int(1-8),如下所示: byte bb[] = FileUtilities.readFile(p_Fil); getOrientation(new ByteArrayInputStream(bb),p_Fil); m_img = new Image(new Byte
javafx.scene.Image.Image
)
这很好,但它确实忽略了exif TAG_的方向,因此在纵向模式下拍摄的手机照片看起来不正确
当我更改加载方法时,我能够读取此标记并将结果保存为int(1-8),如下所示:
byte bb[] = FileUtilities.readFile(p_Fil);
getOrientation(new ByteArrayInputStream(bb),p_Fil);
m_img = new Image(new ByteArrayInputStream(bb));
if (m_orientation==1) return; //1 means no transformation required
如果m_方向为1,则它是正确的,因此无需采取进一步措施
但是现在我需要根据返回的数字对图像进行变换。(旋转、翻转等)
我认为javafx.scene.transform.Rotate类应该对我有所帮助。
任何人都可以提供示例代码,在给定图像对象的情况下,您可以输出另一个旋转的图像对象。您必须依靠AWT来实现这一点: 我建议采用以下方法:
public BufferedImage getRotatedImage(BufferedImage bufferedImage, int angle) {
AffineTransform transform = new AffineTransform();
transform.rotate(angle);
AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
bufferedImage = op.filter(bufferedImage, null);
return bufferedImage;
}
然后:
两年后,但无论如何:
ImageView
提供了一种setRotate
方法。那会有帮助吗?
public BufferedImage getRotatedImage(BufferedImage bufferedImage, int angle) {
AffineTransform transform = new AffineTransform();
transform.rotate(angle);
AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
bufferedImage = op.filter(bufferedImage, null);
return bufferedImage;
}
BufferedImage buffImg= SwingFXUtils.fromFXImage(m_img, null);
buffImg = getRotatedImage(buffImage, 90); //or other angle if needed be
m_img = SwingFXUtils.toFXImage(buffImg, null);