public void fusionWithMultiply(CPLayer fusion, CPRect rc) {
		CPRect rect = new CPRect(0, 0, width, height);
		rect.clip(rc);

		for (int j = rect.top; j < rect.bottom; j++) {
			int off = rect.left + j * width;
			for (int i = rect.left; i < rect.right; i++, off++) {
				int color1 = data[off];
				int alpha = (color1 >>> 24) * this.alpha / 100;
				if (alpha == 0) {
					continue;
				} else {
					int color2 = fusion.data[off];
					color1 = color1 ^ 0xffffffff;
					fusion.data[off] = 0xff000000
							| ((color2 >>> 16 & 0xff) - (color1 >>> 16 & 0xff) * (color2 >>> 16 & 0xff) * alpha
									/ (255 * 255)) << 16
							| ((color2 >>> 8 & 0xff) - (color1 >>> 8 & 0xff) * (color2 >>> 8 & 0xff) * alpha
									/ (255 * 255)) << 8
							| ((color2 & 0xff) - (color1 & 0xff) * (color2 & 0xff) * alpha / (255 * 255));
				}
			}
		}
	}