Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java swt图像(图像数据)旋转_Java_Image_Swt_Rotation - Fatal编程技术网

java swt图像(图像数据)旋转

java swt图像(图像数据)旋转,java,image,swt,rotation,Java,Image,Swt,Rotation,我正在尝试做一个简单的程序,我可以在画布上添加一些png。 其中一个选项是旋转选定的png。我有旋转的问题。 当我使用转换时,它会旋转画布上的所有内容。 我只找到了旋转90'或翻转的例子,但我想旋转任何角度 我还尝试将swt图像转换为BuffereImage,旋转,然后将BuffereImage转换为swt图像并绘制它,但速度非常慢,并且在透明度方面存在一些问题 我将非常感谢您的帮助-我想通过图像中心旋转。 对于drawig,我使用GC和Canvas-new GC(Canvas) 编辑: 我仍

我正在尝试做一个简单的程序,我可以在画布上添加一些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);