「java控件旋转」java 画图 旋转

博主:adminadmin 2022-12-20 02:15:05 74

今天给各位分享java控件旋转的知识,其中也会对java 画图 旋转进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java Swing旋转

不可以,API中没有相应的方法。

可以借鉴这个

,重写paintComponent方法。

Swing 学学可以,别较真,以后用的不多。

java 怎么让一个图形绕一个点旋转360度

import java.awt.Canvas;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.image.BufferedImage;

 

/**

 * @author ZhengYesheng

 */

public class RotateImageCanvas extends Canvas implements Runnable

{

    private static final long serialVersionUID = -1997487731464495923L;

 

    BufferedImage img;

    BufferedImage rotatedImg;

 

    int degress = 0;

 

    public RotateImageCanvas(BufferedImage img)

    {

        super();

        this.img = img;

        new Thread(this).start();

    }

 

    @Override

    public void run()

    {

        while (true)

        {

            //A,与B的代码配合决定旋转的速度

            degress += 1;

            degress %= 360;

            repaint();

            try

            {

                if (degress == 0)

                {

                    //绕一周后等待的时间在这里设置

                    Thread.sleep(3 * 1000);

                }

                else

                {

                    //考虑到视觉平滑,这里不应大约40。

                    Thread.sleep(30);

                }

            }

            catch (InterruptedException e)

            {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

 

    @Override

    public void paint(Graphics graphics)

    {

        super.paint(graphics);

        //获取旋转指定角度后的图片。为了避免累计误差,这里是用原始图像旋转的

        rotatedImg = rotateImage(img, degress);

        //绘制旋转后的图片

        graphics.drawImage(rotatedImg, 0, 0, this);

    }

 

    /**

     * 旋转图片为指定角度。

     * 注意:1、这个方法实现了图像的基于中点的旋转,要想绕指定点,需要配合Matrix类

     *          2、为避免图像被裁切,结果图片的尺寸也需要动态计算

     *          3、现在旋转后有黑色背景,如果不需要这个效果,需要设置结果图片的Alpha模式

     * 

     * @param bufferedimage

     *            目标图像

     * @param degree

     *            旋转角度

     * @return

     */

    private BufferedImage rotateImage(BufferedImage bufferedimage, int degree)

    {

        int w = bufferedimage.getWidth();

        int h = bufferedimage.getHeight();

        int type = bufferedimage.getColorModel().getTransparency();

        BufferedImage img;

        Graphics2D graphics2d;

        (graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())

                .setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

        graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);

        graphics2d.drawImage(bufferedimage, 0, 0, null);

        graphics2d.dispose();

        return img;

    }

}

java环境下,如何实现3D图形的自动旋转?

程序实现思路: 在javafx中Node对象有一个effect属性,可以用于实现各种特效。PerspectiveTransform特效可以使Node对象实现透视变换。因此我们可以通过计算透视变换中每个点的位置来实现3D翻转特效。

实现步骤: 1、定义FlipView对象。包含以下属性:

复制代码 代码如下:

//正面视图

public Node frontNode;

//反面视图

public Node backNode;

//是否翻转

boolean flipped = false;

//翻转角度

DoubleProperty time = new SimpleDoubleProperty(Math.PI / 2);

//正面翻转特效

PerspectiveTransform frontEffect = new PerspectiveTransform();

//反面翻转特效

PerspectiveTransform backEffect = new PerspectiveTransform();

create方法返回需要显示的内容:

复制代码 代码如下:

private void create() {

time.addListener(new ChangeListener() {

@Override

public void changed(ObservableValue? extends Number arg0,

Number arg1, Number arg2) {

setPT(frontEffect, time.get());

setPT(backEffect, time.get());

}

});

anim.getKeyFrames().addAll(frame1, frame2);

backNode.visibleProperty().bind(

Bindings.when(time.lessThan(0)).then(true).otherwise(false));

frontNode.visibleProperty().bind(

Bindings.when(time.lessThan(0)).then(false).otherwise(true));

setPT(frontEffect, time.get());

setPT(backEffect, time.get());

frontNode.setEffect(frontEffect);

backNode.setEffect(backEffect);

getChildren().addAll(backNode, frontNode);

}

以上代码需要注意的是: 随着time值的变化frontEffect和backEffect的值也会随着变换。 2、PerspectiveTransform特效的实现使用了Math.sin()和Math.cos()方法模拟3D角度变换。 具体实现如下:

复制代码 代码如下:

private void setPT(PerspectiveTransform pt, double t) {

double width = 200;

double height = 200;

double radius = width / 2;

double back = height / 10;

pt.setUlx(radius - Math.sin(t) * radius);

pt.setUly(0 - Math.cos(t) * back);

pt.setUrx(radius + Math.sin(t) * radius);

pt.setUry(0 + Math.cos(t) * back);

pt.setLrx(radius + Math.sin(t) * radius);

pt.setLry(height - Math.cos(t) * back);

pt.setLlx(radius - Math.sin(t) * radius);

pt.setLly(height + Math.cos(t) * back);

}

3、角度变换在1秒的时间内从3.14/2变换到-3.14/2。

复制代码 代码如下:

KeyFrame frame1 = new KeyFrame(Duration.ZERO, new KeyValue(time,

Math.PI / 2, Interpolator.LINEAR));

KeyFrame frame2 = new KeyFrame(Duration.seconds(1),

new EventHandler() {

@Override

public void handle(ActionEvent event) {

flipped = !flipped;

}

}, new KeyValue(time, -Math.PI / 2, Interpolator.LINEAR));

4、FlipView对象的创建:通过构造函数可以很方便的创建FlipView对象.

复制代码 代码如下:

ImageView image1 = new ImageView(new Image(getClass()

.getResourceAsStream("lion1.png")));

ImageView image2 = new ImageView(new Image(getClass()

.getResourceAsStream("lion2.png")));

FlipView flip = new FlipView(image1, image2);

java控件旋转的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 画图 旋转、java控件旋转的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-20,除非注明,否则均为首码项目网原创文章,转载请注明出处。