Java 在BuffereImage上绘制填充矩形
因此,我试图创建一个应用程序,它可以屏蔽包含敏感信息的调查部分。然而,我遇到了一点问题 我想做的是在给定x、y、宽度和所需区域高度的BuffereImage上绘制填充的黑色矩形,然后将新图像写回我的文件系统。这是我的密码Java 在BuffereImage上绘制填充矩形,java,bufferedimage,graphics2d,Java,Bufferedimage,Graphics2d,因此,我试图创建一个应用程序,它可以屏蔽包含敏感信息的调查部分。然而,我遇到了一点问题 我想做的是在给定x、y、宽度和所需区域高度的BuffereImage上绘制填充的黑色矩形,然后将新图像写回我的文件系统。这是我的密码 File imageFile = new File("images/template.jpg"); BufferedImage img = ImageIO.read(imageFile); Graphics2D graph = img.cr
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"));
无论出于何种原因,资源中的图像在此代码段之后不会更改。关于我做错了什么有什么想法吗?我知道这是个老问题,但也许对某人有用, 我想你应该用这个
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
顺便说一下,如果没有更多的代码,很难找到解决方案。
希望它有用。您只需更换这一行:
Graphics2D graph = img.createGraphics();
为此:
Graphics2D graph = img.getGraphics();
很晚才回答这个问题,但您正在保存图像,而不是正在创建的图形。我想它一定是一个BuffereImage来保存我创建了一个可运行的代码示例,对我来说效果很好。我使用Java8运行了这段代码 这是经过修改的图像。我在一张照片上画了一个黑色的正方形 这是我运行的代码。我直接从文件系统读取原始图像
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)为了更快获得更好的帮助,请发布一个。2) 试着写一个新的图像。不是根据文档,op是正确的。