question: public static Image createReflectedImage ( final Image source ) { if ( source == null ) { return null ; } if ( source . isDisposed ( ) ) { SWT . error ( SWT . ERROR_WIDGET_DISPOSED ) ; } final Rectangle sourceBounds = source . getBounds ( ) ; final Image newImage = new Image ( source . getDevice ( ) , new Rectangle ( 0 , 0 , sourceBounds . width , ( int ) ( sourceBounds . height * 1.5 ) ) ) ; final GC gc = new GC ( newImage ) ; gc . setAdvanced ( true ) ; gc . drawImage ( source , 0 , 0 ) ; final Transform t = new Transform ( source . getDevice ( ) ) ; t . setElements ( 1 , 0 , 0 , - .5f , 0 , sourceBounds . height + sourceBounds . height / 2 ) ; gc . setTransform ( t ) ; gc . drawImage ( source , 0 , 0 ) ; t . dispose ( ) ; gc . dispose ( ) ; final ImageData imgData = newImage . getImageData ( ) ; final int width = imgData . width ; final int height = imgData . height ; final byte [ ] alphaData = new byte [ height * width ] ; final byte [ ] noAlpha = new byte [ width ] ; for ( int x = 0 ; x < width ; x ++ ) { noAlpha [ x ] = ( byte ) 255 ; } for ( int y = 0 ; y < height ; y ++ ) { final byte [ ] alphaRow = new byte [ width ] ; if ( y < sourceBounds . height ) { System . arraycopy ( noAlpha , 0 , alphaData , y * width , width ) ; } else { for ( int x = 0 ; x < width ; x ++ ) { alphaRow [ x ] = ( byte ) ( 255 - 255 * y / height ) ; } System . arraycopy ( alphaRow , 0 , alphaData , y * width , width ) ; } } imgData . alphaData = alphaData ; newImage . dispose ( ) ; return new Image ( source . getDevice ( ) , imgData ) ; }
target:  Create a reflected image of a source Inspired by Daniel Spiewak work (http://www.eclipsezone.com/eclipse/forums/t91013.html)