Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 将图形2D形状绘制到图像上_Java_Image_Awt_Bufferedimage_Graphics2d - Fatal编程技术网

Java 将图形2D形状绘制到图像上

Java 将图形2D形状绘制到图像上,java,image,awt,bufferedimage,graphics2d,Java,Image,Awt,Bufferedimage,Graphics2d,下面是一个较大程序的片段,其目标是在图像上绘制一个红色圆圈 我正在使用以下资源来完成这项工作: 及 这就是我所拥有的 import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;

下面是一个较大程序的片段,其目标是在图像上绘制一个红色圆圈

我正在使用以下资源来完成这项工作:

这就是我所拥有的

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

public class main {
    public static void main(String[] args) throws IOException {
        Image img = new ImageIcon("colorado.jpg").getImage();
        BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null), BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = (Graphics2D) bi.getGraphics();



        g2d.setColor(Color.red);
        g2d.fill(new Ellipse2D.Float(0, 0, 100, 100));

        g2d.drawImage(img, 0,0,null);
        g2d.dispose();

        ImageIO.write(bi, "jpg", new File("new.jpg"));
        }

    }

但是,当代码运行时,创建的输出图像是输入图像的精确副本,没有任何更改

通过软件绘画类似于在现实世界中的画布上绘画。如果你画一些东西,然后在上面画,它会在最初画的东西上面画。你做事的顺序很重要

所以,在原始代码中,必须绘制图像和椭圆

g2d.drawImage(img, 0,0,null);
g2d.fill(new Ellipse2D.Float(0, 0, 100, 100));
话虽如此,现在。有一个更简单的解决办法。而不是使用有问题的ImageIcon。您可以使用ImageIO.read加载图像。直接的好处是,您可以获得一个BuffereImage


另外,看一看

想象一下像画真实世界的画布一样的绘画。如果你画了什么,然后在上面画,你想看看画了什么first@haraldK是的,复制粘贴
//Image img = new ImageIcon("colorado.jpg").getImage();
//BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
BufferedImage bi = ImageIO.read(new File("colorado.jpg"));
Graphics2D g2d = bi.createGraphics();

g2d.setColor(Color.red);
g2d.fill(new Ellipse2D.Float(0, 0, 100, 100));
g2d.dispose();

ImageIO.write(bi, "jpg", new File("new.jpg"));