3

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

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

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

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

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

这是我到目前为止所拥有的(主要来自这里):

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() 中?我完全不知道该怎么做。

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

4

1 回答 1

1

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

当您想将该图像渲染到 UI 中的组件上时,请像您所做的那样使用该组件的 paintComponent() 方法。请注意,这涉及两个单独的图形对象,用于两种不同的目的。

于 2012-10-09T23:53:32.487 回答