Win a copy of Murach's Python Programming this week in the Jython/Python forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

anti-aliased image clipping  RSS feed

 
Eric Wagner
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I could really use some help with this.. I am completely stuck!

I want to take a square BufferedImage (created from a jpeg)
and clip it with an inscribed circle, such that only a circular image
cutout remains (and the exterior of the circle is transparent).
However, I need to do this with anti-aliasing so that the edge of the
circle is smooth.

I have tried the following two methods, but neither one produces
the correct result:

//simply returns the original image
private static BufferedImage cutoutCircle(BufferedImage img, int w, int h) {
Graphics2D g2d = img.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Shape circle = new java.awt.geom.Ellipse2D.Double(0,0,w,h);
g2d.setClip(circle);
return img;
}

//cuts out circle but not anti-aliased
private static BufferedImage cutoutCircle(BufferedImage orig, int w, int h) {
BufferedImage bimg = new BufferedImage(w, h,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bimg.createGraphics(); //this is blank (transparent)
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Shape circle = new java.awt.geom.Ellipse2D.Double(0,0,w,h);
g2d.setClip(circle);
g2d.drawImage(orig, 0, 0, null);
return bimg;
}
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!