Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
Java 使用Graphics2D多次操作图像_Java_Image_Graphics2d - Fatal编程技术网

Java 使用Graphics2D多次操作图像

Java 使用Graphics2D多次操作图像,java,image,graphics2d,Java,Image,Graphics2d,我试图弄清楚如何拍摄一幅图像并使用Graphics2D对其进行操作,同时能够对同一幅图像执行多个操作(因此,两次变暗会使图像比一次变暗)。我发现的每一个例子,都是为了操作一次图像并显示它。我需要能够显示图像多次。例如,假设我有一个带有选项1、2、3等的菜单,1使其变暗,2使其变亮,3显示图像 我将如何实现这一点?我可以获取图像,将其变暗,旋转并显示,但不能使用菜单或用户选择时间和内容的其他方式。如果有人能把我链接到一个这样做的网页上,或者写一个简短的(越短越好)一节课的程序来完成我所描述的,我应

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

我将如何实现这一点?我可以获取图像,将其变暗,旋转并显示,但不能使用菜单或用户选择时间和内容的其他方式。如果有人能把我链接到一个这样做的网页上,或者写一个简短的(越短越好)一节课的程序来完成我所描述的,我应该可以开始了

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

initialize image;
display(image);
lighten(image);
我不明白的是,我是如何用Graphics2D操纵图像,并将其应用于我的图像的

这是我迄今为止(主要来自)的情况:

目前,我正在paintComponent()中执行所有操作,因此操作起来并不容易。有没有办法在main中设置Graphics2D变量,然后以某种方式将其放入paintComponent()中?我完全不知道该怎么做


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

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


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

因此,我试图按照您所说的那样编写,但是,我并没有让图像显示出来,只是一个空白应用程序。小心不要混淆图像和缓冲区。在paintComponent()中,使用g.drawImage(),而不是g2d.drawImage()。也是main方法的最后一行,您正在将一个图像绘制到属于该图像的缓冲区上,这可能会导致问题。为渲染创建一个单独的图像缓冲区(不要使用与源图像相同的图像对象)。好的,我在paintComponent()中有g.drawImage(),但我仍然不确定如何绘制旋转的图像。在更改了paintComponent()并删除了my main中的最后一行之后,它只绘制常规图像,而不绘制旋转图像。之前的“main中的最后一行”很好。。。只需对从磁盘加载的源图像和要渲染输出的缓冲区使用不同的图像缓冲区。抱歉,我仍然无法获取它。你能给我一个简单的例子说明这是怎么回事吗?我不明白你想让我做什么。我应该创建第二个缓冲区图像、图形、图形2D还是其他什么?
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);
    }
}