code: 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++;
  		}
  	}
docs: 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.
  @param src the source raster
  @param dst the destination raster
  @param sel the mask raster