将 BufferedImage 裁剪到某个区域

Posted

技术标签:

【中文标题】将 BufferedImage 裁剪到某个区域【英文标题】:Clip a BufferedImage to an Area 【发布时间】:2015-03-04 18:46:49 【问题描述】:

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

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

我想在那个区域画一个BufferedImage,而不是画一个RadialGradientPaint。有什么办法可以做到吗?

【问题讨论】:

【参考方案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 的形状冷创建一个蒙版图像,并使用它来生成蒙版图像(cookie 将图像从形状中切割出来)

如here 所示。这样做的好处是它允许抗锯齿

【讨论】:

【参考方案2】:

使用Graphics.setClip:

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

更多详情请见http://docs.oracle.com/javase/tutorial/2d/advanced/clipping.html

【讨论】:

别忘了 1- 重置剪辑和 2- 检查新剪辑是否仍在旧剪辑的范围内...

以上是关于将 BufferedImage 裁剪到某个区域的主要内容,如果未能解决你的问题,请参考以下文章

在Java中按多边形区域裁剪图像

向裁剪的画布区域添加背景

裁剪图像的透明边缘

如何使用 Viola Jones 算法将人脸检测为感兴趣区域并将其裁剪到矩形框?

javascript将图像裁剪到画布

自动矢量化感兴趣区域(裁剪)