【发布时间】:2015-10-02 19:42:40
【问题描述】:
我有一个缓冲图像和一组形状,如拼图。我想从图像中剪下这些形状。我尝试剪切图像,但它不能正常工作。到目前为止我所做的是:
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
Area area = areas[i][j];
int width = (int) area.getBounds2D().getWidth();
int height = (int) area.getBounds2D().getHeight();
pieces[i][j] = new BufferedImage(width, height, image.getType());
Graphics2D gr = pieces[i][j].createGraphics();
gr.setClip(area);
gr.drawImage(image, 0, 0, null);
gr.dispose();
try {
ImageIO.write(pieces[i][j], "png", new File("img/img" + i + "" + j + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
它只适用于第一个形状,然后将透明图像写入输出。
【问题讨论】:
-
您是否检查了 Area 对象与图像边界的交集是否为空? (也就是说,形状在图像上方,而不是其他地方或空的)
-
我认为这将有助于我们更好地理解这个问题,如果你显示你想要剪辑的图像,并打印几个
Areas。您只是想像@Glains 认为的那样提取子图像,还是真的想像@lbalazscs 认为的那样将单个图像剪辑成多个形状? :-) -
绝对有必要在问题中添加至少一些形状的细节。第一个成功的形状,还有几个没有成功的形状。包括创建形状的数据以及
i和j的数据。
标签: java graphics bufferedimage java-2d clipping