Java如何定义三个圆,java如何将一个图像画到一个指定的圆形区域呢(3)

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在这里:

134237107.png

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() {

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值