Clips the input image to the specified shape
//package com.ryanm.util.image; import java.awt.Graphics; import java.awt.Polygon; import java.awt.image.BufferedImage; /** * @author ryanm */ public class ImageClip { /** * Clips the input image to the specified shape * * @param image * the input image * @param clipVerts * list of x, y pairs defining the clip shape, normalised * to image dimensions (think texture coordinates) * @return The smallest image containing those pixels that fall * inside the clip shape */ public static BufferedImage clip( BufferedImage image, float... clipVerts ) { assert clipVerts.length >= 6; assert clipVerts.length % 2 == 0; int[] xp = new int[ clipVerts.length / 2 ]; int[] yp = new int[ xp.length ]; int minX = image.getWidth(), minY = image.getHeight(), maxX = 0, maxY = 0; for( int j = 0; j < xp.length; j++ ) { xp[ j ] = Math.round( clipVerts[ 2 * j ] * image.getWidth() ); yp[ j ] = Math.round( clipVerts[ 2 * j + 1 ] * image.getHeight() ); minX = Math.min( minX, xp[ j ] ); minY = Math.min( minY, yp[ j ] ); maxX = Math.max( maxX, xp[ j ] ); maxY = Math.max( maxY, yp[ j ] ); } for( int i = 0; i < xp.length; i++ ) { xp[ i ] -= minX; yp[ i ] -= minY; } Polygon clip = new Polygon( xp, yp, xp.length ); BufferedImage out = new BufferedImage( maxX - minX, maxY - minY, image.getType() ); Graphics g = out.getGraphics(); g.setClip( clip ); g.drawImage( image, -minX, -minY, null ); g.dispose(); return out; } }