public void fusionWithNormal(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 if (alpha == 255) {
					fusion.data[off] = color1;
				} else {
					int color2 = fusion.data[off];

					int invAlpha = 255 - alpha;
					fusion.data[off] = 0xff000000
							| (((color1 >>> 16 & 0xff) * alpha + (color2 >>> 16 & 0xff) * invAlpha) / 255) << 16
							| (((color1 >>> 8 & 0xff) * alpha + (color2 >>> 8 & 0xff) * invAlpha) / 255) << 8
							| (((color1 & 0xff) * alpha + (color2 & 0xff) * invAlpha) / 255);
				}
			}
		}
	}