我想弄清楚如何拍摄图像并使用Graphics2D来操纵它,同时能够在同一图像上执行多个操作(使它变暗两次会使它变暗比做一次)。我发现的每一个例子都是为了操作一次图像并显示它。我需要能够多次显示图像。例如,假设我有一个包含选项1,2,3等的菜单,其中1个变暗,2个变亮,3个显示图像。使用Graphics2D操纵图像多次
我该怎么做到这一点?我可以得到图像,使其变暗,旋转并显示它,但不能用菜单或用户选择何种方式的其他方式。如果有人可以将我链接到一个可以做到这一点的网页,或者写一个简短的(更短的更好的),一个课程程序来做我所描述的,我应该能够开始。
基本上,我需要能够做这样的事情:
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()?我完全失去了如何去做这件事。
我试图发布链接到我查看的所有网页,但它不会让我发布两个以上的链接,因为我是新手。
因此,我试图通过编写[this](http://pastebin.com/LutTz0p4)来做你所说的,但是,我没有得到要显示的图像,只是一个空白的应用程序。 – Nathan
小心不要混淆图像和缓冲区。在paintComponent()中,使用g.drawImage(),而不是g2d.drawImage()。也是主方法的最后一行,您正在将图像绘制到属于同一图像的缓冲区,这可能会导致问题。为渲染创建一个单独的图像缓冲区(不要使用与源图像相同的图像对象)。 – JimN
好吧,所以我在paintComponent()中有g.drawImage(),但我仍然不确定如何绘制旋转的图像。在改变paintComponent()并删除我的main中的最后一行后,它只绘制常规图像而不是旋转图像。 – Nathan