将BufferedImage剪辑到区域

时间:2015-03-04 18:46:50

标签: java image bufferedimage clip

我正在尝试在某个区域内绘制图像。现在我的代码用RadialGradientPaint填充了一个区域。

Area lightArea = ...
// fill the polygon with the gradient paint
g.setPaint(light.paint);
g.fill(lightArea);

我想在该区域中绘制BufferedImage而不是绘制RadialGradientPaint。我有办法做到吗?

2 个答案:

答案 0 :(得分:1)

使用Graphics.setClip

g.setClip(lightArea);
g.drawImage(yourImage, x, y, null);

有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/2d/advanced/clipping.html

答案 1 :(得分:1)

您可以使用BufferdImage#getSubimage

Rectangle bounds = area.getBounds();
BufferedImage img = master.getSubImage(0, 0, Math.min(bounds.width, master.getWidth()), Math.min(bounds.height, master.getHeight());

这假设该区域是矩形的。如果不是,你会根据Area的形状创建一个蒙版图像,然后用它来生成蒙面图像(将图像从图像中切割出来)

正如here所示。其好处是它允许抗锯齿