Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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
I';m在java中旋转图像,但要保存旋转后的图像_Java_Image_Swing_Graphics2d - Fatal编程技术网

I';m在java中旋转图像,但要保存旋转后的图像

I';m在java中旋转图像,但要保存旋转后的图像,java,image,swing,graphics2d,Java,Image,Swing,Graphics2d,我正在使用仿射变换旋转图像,并且我已尝试通过ImageIo保存旋转后的图像。write它正在保存图像,但不是旋转后的图像。它正在保存原始图像。所以,请告诉我如何纠正它,谢谢提前 这是我旋转和保存图像的代码 公众阶级形象{ public static void main(String[] args) { new Image(); } public Image() { EventQueue.invokeLater(new Runnable() { @Override

我正在使用仿射变换旋转图像,并且我已尝试通过ImageIo保存旋转后的图像。write它正在保存图像,但不是旋转后的图像。它正在保存原始图像。所以,请告诉我如何纠正它,谢谢提前

这是我旋转和保存图像的代码

公众阶级形象{

public static void main(String[] args) {
    new Image();
}

public Image() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception ex) {
            }

            JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new TestPane());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}
public class TestPane extends JPanel {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JSlider slider;
    private BufferedImage image;

    public TestPane() {
        setLayout(new BorderLayout());

        try {
           File imagefile = new File("C:/pics/1206.jpg");
              image = ImageIO.read(imagefile);


              ImageIO.write(image, "jpg",new File("C:/pics"));
              ImageIO.write(image, "bmp",new File("C:/pics"));
              ImageIO.write(image, "gif",new File("C:/picsf"));
              ImageIO.write(image, "png",new File("C:/pics"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        slider = new JSlider();
        slider.setMinimum(0);
        slider.setMaximum(360);
        slider.setMinorTickSpacing(5);
        slider.setMajorTickSpacing(10);
        slider.setValue(0);
        add(slider, BorderLayout.SOUTH);
        slider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                repaint();
            }
        });
    }

    @Override
    public Dimension getPreferredSize() {
        return image == null ? new Dimension(200, 200) : new Dimension(image.getWidth(), image.getHeight());
    }

    public double getAngle() {

        return Math.toRadians(slider.getValue());

    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g.create();

        g2d.setColor(Color.RED);
        g2d.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
        g2d.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2);

        g2d.setColor(Color.BLACK);
        int x = (getWidth() - image.getWidth()) / 2;
        int y = (getHeight() - image.getHeight()) / 2;
        AffineTransform at = new AffineTransform();
        at.setToRotation(getAngle(), x + (image.getWidth() / 2), y + (image.getHeight() / 2));
        at.translate(x, y);
        g2d.setTransform(at);
        g2d.drawImage(image, 0, 0, this);
        g2d.dispose();
    }
    }
}

首先,这不是旋转图像,而是旋转用于显示图像的
图形
上下文,它根本不会影响原始图像

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g.create();

    g2d.setColor(Color.RED);
    g2d.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
    g2d.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2);

    g2d.setColor(Color.BLACK);
    int x = (getWidth() - image.getWidth()) / 2;
    int y = (getHeight() - image.getHeight()) / 2;
    AffineTransform at = new AffineTransform();
    at.setToRotation(getAngle(), x + (image.getWidth() / 2), y + (image.getHeight() / 2));
    at.translate(x, y);
    g2d.setTransform(at);
    g2d.drawImage(image, 0, 0, this);
    g2d.dispose();
}
然后这个

  try {
        File imagefile = new File("C:/pics/1206.jpg");
        image = ImageIO.read(imagefile);


        ImageIO.write(image, "jpg",new File("C:/pics"));
        ImageIO.write(image, "bmp",new File("C:/pics"));
        ImageIO.write(image, "gif",new File("C:/picsf"));
        ImageIO.write(image, "png",new File("C:/pics"));
  } catch (IOException ex) {
        ex.printStackTrace();
  }

它只是将原始图像保存为多种不同的格式…请在同一个文件中添加有关写入部分的相关代码。抱歉,Berger现在我已经更新了我的代码,你可以检查它在旋转时将生成一个新图像,这意味着你可以使用
ImageIO.write
保存它。谢谢,程序员,但我已经在使用e ImageIO.write,但它保存的是原始图像,而不是旋转图像。您没有调用
ImageIO.write()
在图像旋转后发生。所有的都指定一个
父对象
,没有一个指定一个
子对象
。非常感谢,但在您的示例中,getAngle给出了错误,并将u分配给ClickPoint对不起,复制/粘贴了代码-
getAngle
可以替换为
,但我已将其更改为仅使用
rads
。。。使用这个thanx没有任何问题,但是它没有保存图像。我得到的异常是线程“AWT-EventQueue-0”java.lang.IllegalArgumentException:image==null!位于javax.imageio.ImageTypeSpecifier.createFromRenderImage(未知源代码)位于javax.imageio.imageio.getWriter(未知源代码)在tilti.Image$RotationPane的javax.imageio.imageio.write(未知源代码)处(Image.java:78)在tilti.Image$1.run(Image.java:39)处传递
imageio
a
null
引用,您需要找出原因