Implemented the cpp part

This commit is contained in:
MrCdK
2015-04-28 01:34:25 +02:00
parent 538371c7c6
commit a7bfb9936b
2 changed files with 11 additions and 7 deletions

View File

@@ -182,9 +182,9 @@ class ImageDataUtil {
}
//#if ((cpp || neko) && !disable_cffi)
//if (!System.disableCFFI) lime_image_data_util_copy_pixels (image, sourceImage, sourceRect, destPoint, mergeAlpha); else
//#end
#if ((cpp || neko) && !disable_cffi)
if (!System.disableCFFI) lime_image_data_util_copy_pixels (image, sourceImage, sourceRect, destPoint, mergeAlpha); else
#end
{
var rowOffset = Std.int (destPoint.y + image.offsetY - sourceRect.y - sourceImage.offsetY);

View File

@@ -162,6 +162,8 @@ namespace lime {
} else {
float sourceAlpha;
float destAlpha;
float outA;
float oneMinusSourceAlpha;
for (int row = sourceRect->y + sourceImage->offsetY; row < rows; row++) {
@@ -172,12 +174,14 @@ namespace lime {
offset = ((row + rowOffset) * stride) + ((column + columnOffset) * 4);
sourceAlpha = sourceData[sourceOffset + 3] / 255.0;
destAlpha = data[offset + 3] / 255.0;
oneMinusSourceAlpha = (1 - sourceAlpha);
data[offset] = __clamp[int (sourceData[sourceOffset] * sourceAlpha)] + __clamp[int(data[offset] * oneMinusSourceAlpha)];
data[offset + 1] = __clamp[int (sourceData[sourceOffset + 1] * sourceAlpha)] + __clamp[int(data[offset + 1] * oneMinusSourceAlpha)];
data[offset + 2] = __clamp[int (sourceData[sourceOffset + 2] * sourceAlpha)] + __clamp[int(data[offset + 2] * oneMinusSourceAlpha)];
data[offset + 3] = __clamp[int (sourceData[sourceOffset + 3] * sourceAlpha)] + __clamp[int(data[offset + 3] * oneMinusSourceAlpha)];
outA = sourceAlpha + destAlpha * oneMinusSourceAlpha;
data[offset + 0] = __clamp[(int) round ((sourceData[sourceOffset + 0] * sourceAlpha + data[offset + 0] * destAlpha * oneMinusSourceAlpha) / outA)];
data[offset + 1] = __clamp[(int) round ((sourceData[sourceOffset + 1] * sourceAlpha + data[offset + 1] * destAlpha * oneMinusSourceAlpha) / outA)];
data[offset + 2] = __clamp[(int) round ((sourceData[sourceOffset + 2] * sourceAlpha + data[offset + 2] * destAlpha * oneMinusSourceAlpha) / outA)];
data[offset + 3] = __clamp[(int) round (outA * 255.0)];
}