public static void composeThroughMask ( Raster src , WritableRaster dst , Raster sel ) { int x = src . getMinX ( ) ; int y = src . getMinY ( ) ; int w = src . getWidth ( ) ; int h = src . getHeight ( ) ; int srcRGB [ ] = null ; int selRGB [ ] = null ; int dstRGB [ ] = null ; for ( int i = 0 ; i < h ; i ++ ) { srcRGB = src . getPixels ( x , y , w , 1 , srcRGB ) ; selRGB = sel . getPixels ( x , y , w , 1 , selRGB ) ; dstRGB = dst . getPixels ( x , y , w , 1 , dstRGB ) ; int k = x ; for ( int j = 0 ; j < w ; j ++ ) { int sr = srcRGB [ k ] ; int dir = dstRGB [ k ] ; int sg = srcRGB [ k + 1 ] ; int dig = dstRGB [ k + 1 ] ; int sb = srcRGB [ k + 2 ] ; int dib = dstRGB [ k + 2 ] ; int sa = srcRGB [ k + 3 ] ; int dia = dstRGB [ k + 3 ] ; float a = selRGB [ k + 3 ] / 255f ; float ac = 1 - a ; dstRGB [ k ] = ( int ) ( a * sr + ac * dir ) ; dstRGB [ k + 1 ] = ( int ) ( a * sg + ac * dig ) ; dstRGB [ k + 2 ] = ( int ) ( a * sb + ac * dib ) ; dstRGB [ k + 3 ] = ( int ) ( a * sa + ac * dia ) ; k += 4 ; } dst . setPixels ( x , y , w , 1 , dstRGB ) ; y ++ ; } }
Compose src onto dst using the alpha of sel to interpolate between the two . I can t think of a way to do this using AlphaComposite .