public void compose(Raster srcArg,
Raster dstIn,
WritableRaster dstOut) {
WritableRaster src;
int w;
int h;
if (dstIn != dstOut) {
dstOut.setDataElements(0, 0, dstIn);
}
// REMIND: We should be able to create a SurfaceData from just
// a non-writable Raster and a ColorModel. Since we need to
// create a SurfaceData from a BufferedImage then we need to
// make a WritableRaster since it is needed to construct a
// BufferedImage.
if (srcArg instanceof WritableRaster) {
src = (WritableRaster) srcArg;
} else {
src = srcArg.createCompatibleWritableRaster();
src.setDataElements(0, 0, srcArg);
}
w = Math.min(src.getWidth(), dstIn.getWidth());
h = Math.min(src.getHeight(), dstIn.getHeight());
BufferedImage srcImg = new BufferedImage(srcCM, src,
srcCM.isAlphaPremultiplied(),
null);
BufferedImage dstImg = new BufferedImage(dstCM, dstOut,
dstCM.isAlphaPremultiplied(),
null);
SurfaceData srcData = BufImgSurfaceData.createData(srcImg);
SurfaceData dstData = BufImgSurfaceData.createData(dstImg);
Blit blit = Blit.getFromCache(srcData.getSurfaceType(),
comptype,
dstData.getSurfaceType());
blit.Blit(srcData, dstData, composite, null, 0, 0, 0, 0, w, h);
}
This method composes the two source tiles
and places the result in the destination tile. Note that
the destination can be the same object as either
the first or second source. |