public static BufferedImage getTransformedImage(BufferedImage image,double scaleX,double scaleY,double shearX,double shearY){
AffineTransform transform = new AffineTransform();
if ( scaleX > 0 && scaleY > 0 )
transform.scale(scaleX, scaleY);
if ( shearX > 0 && shearY > 0 )
transform.shear(shearX, shearY);
AffineTransformOp op = new AffineTransformOp(transform,AffineTransformOp.TYPE_BILINEAR);
BufferedImage dest = new BufferedImage(image.getWidth(),image.getHeight(),image.getType());
op.filter(image, dest);
return dest;