GaussianFilter filter = new GaussianFilter(blur);
result = filter.filter(result, result);
return result;
}
private BufferedImage getRenderedImage(
BufferedImage img, int x, int y, int size, int blur) {
int fix = blur / 2;
BufferedImage result = new BufferedImage(
size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = result.createGraphics();
g.setClip(new RoundRectangle2D.Double(
fix, fix, size-blur, size-blur, size-blur, size-blur));
g.translate(-x, -y);
g.drawImage(img, fix, fix, null);
size -= blur * 2;
GaussianFilter filter = new GaussianFilter( blur * 2 );
result = filter.filter(result, result);
g.setClip(new RoundRectangle2D.Double(
blur, blur, size - blur * 2, size - blur * 2, size - blur * 2, size - blur * 2));
g.drawImage(img, fix, fix, null);
g.dispose();
return result;
}
}
------解决方案--------------------
引用:引用:代码很简陋,还是贴出来吧,模糊用了第三方库 jhlabs 的高斯模糊
demo已下载,谢谢!
今天请教了同事,这样模糊边缘是错的……
同事说要达到边缘“软化”的效果,不要用clip,根据你要填充的Shape,用合适的 AlphaComposite 来 mask image 。
------解决方案--------------------
根据同事所说的思路,在网上找了一下解决方案,更好效果的DEMO在这里:
import com.jhlabs.image.GaussianFilter;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
*
* @date 05/02/2013
*/
public class Demo extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {