使用Graphics2D多次操作图像

时间:2012-10-09 23:30:22

标签: java image graphics2d

我正在试图弄清楚如何拍摄图像并使用Graphics2D来操作它,同时能够对同一图像进行多次操作(因此将它变暗两次会使它比做一次更暗)。我发现的每一个例子都是为了操纵图像并显示它。我需要能够多次显示图像。例如,假设我有一个带有选项1,2,3等的菜单,其中1个使其变暗,2个变亮,3个显示图像。

我将如何实现这一目标?我可以获取图像,使其变暗,旋转并显示它,但不能使用菜单或用户选择何时何地的其他方式。如果有人可以将我链接到一个可以做到这一点的网页,或写一个简短的(更短的更好),一个类程序来做我所描述的,我应该能够开始。

基本上,我需要能够做到这样的事情:

initialize image;
display(image);
lighten(image);

我不明白的是,我是如何使用Graphics2D操纵图像的,并将其应用于我的图像。

这是我到目前为止(主要来自here):

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class ShowImage extends JPanel {
Image img;

        public ShowImage() {
            super();
            img = Toolkit.getDefaultToolkit().getImage("image.png");
        }

        public void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.translate(170, 0);
            g2d.rotate(1);
            g2d.drawImage(img, 0, 0, this);
        }

        public static void main(String arg[]) {
            JFrame frame = new JFrame("Image Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(600, 400);

            ShowImage panel = new ShowImage();
            frame.setContentPane(panel);
            frame.setVisible(true);
    }
}

目前,我正在paintComponent()中进行所有操作,因此操作起来并不容易。有没有办法在main中设置Graphics2D变量,然后以某种方式将它放入paintComponent()?关于我将如何做这件事,我完全迷失了。

我尝试将链接发布到我查看的所有网页,但它不会让我发布两个以上的链接,因为我是新的。

1 个答案:

答案 0 :(得分:1)

如果你需要操作内存中的图像,创建一个BufferedImage,然后调用BufferedImage.createGraphics()来访问一个图形对象,以便绘制到图像的缓冲区中。

如果要将该图像渲染到UI中的组件上,请使用该组件的paintComponent()方法。请注意,这涉及两个单独的图形对象,用于两个不同的目的。