java swt图像(图像数据)旋转
我正在尝试做一个简单的程序,我可以在画布上添加一些png。 其中一个选项是旋转选定的png。我有旋转的问题。 当我使用转换时,它会旋转画布上的所有内容。 我只找到了旋转90'或翻转的例子,但我想旋转任何角度 我还尝试将swt图像转换为BuffereImage,旋转,然后将BuffereImage转换为swt图像并绘制它,但速度非常慢,并且在透明度方面存在一些问题 我将非常感谢您的帮助-我想通过图像中心旋转。 对于drawig,我使用GC和Canvas-new GC(Canvas)java swt图像(图像数据)旋转,java,image,swt,rotation,Java,Image,Swt,Rotation,我正在尝试做一个简单的程序,我可以在画布上添加一些png。 其中一个选项是旋转选定的png。我有旋转的问题。 当我使用转换时,它会旋转画布上的所有内容。 我只找到了旋转90'或翻转的例子,但我想旋转任何角度 我还尝试将swt图像转换为BuffereImage,旋转,然后将BuffereImage转换为swt图像并绘制它,但速度非常慢,并且在透明度方面存在一些问题 我将非常感谢您的帮助-我想通过图像中心旋转。 对于drawig,我使用GC和Canvas-new GC(Canvas) 编辑: 我仍
编辑: 我仍然存在图像中心旋转的问题:
gc.setAdvanced(true);
if (!gc.getAdvanced()) {
gc.drawText("Advanced graphics not supported", 30, 30, true);
return;
}
Transform oldTransform = new Transform(gc.getDevice());
gc.getTransform(oldTransform);
Transform transform = new Transform(GCController.getCanvas().getDisplay());
transform.translate(width/2, height/2);
transform.rotate(rotation);
gc.setTransform(transform);
gc.drawImage(image, x, y);
gc.setTransform(oldTransform);
transform.dispose();
你必须使用矩阵变换。看看SWT代码段。作为参考,我以15度为例(接近尾端) >输出 好的。我解决了
gc.setAdvanced(true);
if (!gc.getAdvanced()) {
gc.drawText("Advanced graphics not supported", 30, 30, true);
return;
}
Transform oldTransform = new Transform(gc.getDevice());
gc.getTransform(oldTransform);
Transform transform = new Transform(GCController.getCanvas().getDisplay());
transform.translate(x+width/2, y+height/2);
transform.rotate(rotation);
transform.translate(-x-width/2, -y-height/2);
gc.setTransform(transform);
gc.drawImage(image, x, y);
gc.setTransform(oldTransform);
transform.dispose();
问题在于翻译不好。因此,首先我必须通过x和y位置加上宽度和长度的一半来平移我的形状,然后旋转回到之前的位置:
第一个译文:
transform.translate(x+width/2, y+height/2);
transform.translate(-x-width/2, -y-height/2);
然后旋转和第二次平移:
transform.translate(x+width/2, y+height/2);
transform.translate(-x-width/2, -y-height/2);