Повернуть graphics2D - PullRequest
       19

Повернуть graphics2D

0 голосов
/ 09 декабря 2011

Я пытаюсь повернуть изображение, но по какой-то причине это не сработает.Я провел много исследований, просматривая другие форумы, но, похоже, не смог решить эту проблему.

Итак, это часть моей работы программы.

  1. Принимаетв файле.
  2. Создает буферизованное изображение
  3. Создает graphics2D из bufferedimage.createGraohics();

A Jlabel выполнен в области, которая показывает буферизованное изображение,Затем у меня есть метод для написания текста на изображении и метод для сохранения изображения.Если я пишу текст, а затем сохранить, это прекрасно работает.Это использует:

graphic2D.drawString("Hello, this is my test.",10,10);

Я также вижу это обновление JLabel, чтобы я мог видеть текст на изображении.

Однако, если я создаю метод с:

graphics2D.rotate(45);

Я не вижу абсолютно никаких изменений.

Кто-нибудь знает, почему?

Это мой метод:

public void actionPerformed(ActionEvent e){     
    graphic2D.rotate(4.5);
    saveImage();
}

Спасибо,

    import java.io.File;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class EditorView implements ActionListener, ChangeListener{

    JFrame editorFrame;
    JPanel container = new JPanel();
    JPanel toolbox = new JPanel();
    JPanel editorPanel = new JPanel();
    JScrollPane editorScrollPane;
    File imageFile;
    BufferedImage bi;
    ImageIcon ii;
    Graphics2D graphic2D;
    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 10, 5);

    public EditorView(File file){
        this.imageFile = file;

        try{
        bi = ImageIO.read(imageFile);
        }catch(Exception e){}

        graphic2D = bi.createGraphics();

        createAndShowGUI();

    }


    void createAndShowGUI(){

        editorFrame = new JFrame("Editor");
        editorFrame.setSize(1000,650);  
        container.setLayout(new BoxLayout(container,BoxLayout.Y_AXIS));
        editorFrame.add(container);
        toolbox.setMaximumSize(new Dimension(Integer.MAX_VALUE,50));
        toolbox.setPreferredSize(new Dimension(Integer.MAX_VALUE,50));
        toolbox.setLayout(new GridLayout(2,10));
        JButton rotateLeftBtn = new JButton("Rotate Left");
        toolbox.add(rotateLeftBtn);
        rotateLeftBtn.addActionListener(this);
        toolbox.add(new JButton("Save"));
        toolbox.add(new JButton("Close"));
        toolbox.add(new JButton("Freeform"));
        toolbox.add(new JButton("Colour"));
        toolbox.add(new JButton("Text"));
        toolbox.add(new JButton("Square"));
        toolbox.add(new JButton("Circle"));
        toolbox.add(new JButton("Elipse"));
        toolbox.add(new JButton("Rotate Right"));


        slider.addChangeListener(this);
        toolbox.add(slider);


        container.add(toolbox);

        editorScrollPane = new JScrollPane(new JLabel(new ImageIcon(bi)));

        container.add(editorScrollPane);
        editorFrame.setVisible(true);
        editorFrame.validate();
        container.validate();
        editorPanel.validate();

        drawLabel();
        //editorScrollPane.repaint();
    }

    void drawLabel(){
        graphic2D.rotate(1);
        graphic2D.drawString("Hello, this is my test.",10,10);

    }

    void drawCircle(){

    }

    void saveImage(){

        try{
        ImageIO.write(bi,getFileExtension(), imageFile);
        }catch(Exception e){}
    }

    String getFileExtension(){
        int positionOfDot = imageFile.getName().lastIndexOf(".");
        String returner = null;
        if( positionOfDot !=-1){
            returner = imageFile.getName().substring((positionOfDot+1), imageFile.getName().length());
        }
        System.out.println(returner);
        return returner;
    }

    public void actionPerformed(ActionEvent e){ 

        graphic2D.rotate(1);
        saveImage();

    }

    public void stateChanged(ChangeEvent c){
        graphic2D.scale(slider.getValue()/5, slider.getValue()/5);
        editorScrollPane.repaint();

    }

}

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Вызов graphics2D.rotate преобразует последующую визуализацию, поэтому вам нужно перерисовать и выполнить вызов поворота непосредственно перед тем, как визуализировать текст.

См. Также: Javadocs

Кроме того, метод требует ввода в радианах.

1 голос
/ 19 ноября 2013

Для

graphics2D.rotate();

метод, попробуйте

graphics2D.rotate(Math.toRadians(45));
...