在BufferedImage上绘制填充矩形

时间:2012-07-24 16:04:30

标签: java bufferedimage graphics2d

因此,我正在尝试创建一个可以删除包含敏感信息的调查部分的应用程序。但是我遇到了一些问题。

我想要做的是在BufferedImage上绘制填充的黑色矩形,给定x,y,宽度和所需区域的高度为黑色,然后将新图像写回我的文件系统。这是我的代码。

        File imageFile = new File("images/template.jpg");
        BufferedImage img = ImageIO.read(imageFile);

        Graphics2D graph = img.createGraphics();
        graph.setColor(Color.BLACK);
        graph.fill(new Rectangle(x, y, width, height));
        graph.dispose();

        ImageIO.write(img, "jpg", new File("images/template.jpg"));

无论出于何种原因,资源中的图像在此代码段后都不会更改。关于我做错了什么的任何想法?

5 个答案:

答案 0 :(得分:1)

我为您的代码创建了一个可运行的示例,它对我来说很好用。我使用Java 8运行了这段代码。

这是更改后的图像。我在我拥有的图像上绘制了黑色方块。

Altered Image

这是我运行的代码。我直接从文件系统中读取原始图像。

package com.ggl.testing;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageProcessing implements Runnable {

    public static void main(String[] args) {
        new ImageProcessing().run();
    }

    @Override
    public void run() {
        File imageFile = new File("C:\\Users\\Owner\\Pictures\\Saved Pictures\\Analog Clock Calendar.jpg");
        BufferedImage img;
        try {
            img = ImageIO.read(imageFile);
        } catch (IOException e1) {
            e1.printStackTrace();
            return;
        }

        Graphics2D graph = img.createGraphics();
        graph.setColor(Color.BLACK);
        graph.fill(new Rectangle(100, 100, 100, 100));
        graph.dispose();

        try {
            ImageIO.write(img, "jpg", 
                    new File("altered.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

我的结论是,您要么无法正确读取图像,或者x,y,宽度和/或高度超出了图像的范围,或者我错过了其他东西。

答案 1 :(得分:0)

检查您的x,y和宽度,高度是否真正落入图像尺寸。你可能正在绘制图像范围之外的某个地方。在调试模式中执行以验证或println()变量等。

答案 2 :(得分:0)

这个答案很晚,但你保存的是图像,而不是你正在创建的图表。我认为它必须再次成为BufferedImage来保存

答案 3 :(得分:-1)

我知道这是一个老问题,但也许对某人有用, 我想你应该用这个

graph.drawImage(x,y,width,height); //First you draw the image
graph.setColor(Color.black); //Then set the color to black
graph.fillRect(img.getX(), img.getY(), img.getWidth(), img.getHeight());// Finally draw a black rectangle on it

顺便说一句,如果没有更多的代码,很难找到解决方案。 希望它会有用。

答案 4 :(得分:-2)

您只需要替换此行:

Graphics2D graph = img.createGraphics();

用这个:

Graphics2D graph = img.getGraphics();