mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-06 12:08:46 +00:00
Fixed #1846 blend modes with alpha
This commit is contained in:
@@ -792,6 +792,11 @@ public class Timeline {
|
||||
}
|
||||
|
||||
ColorTransform clrTrans2 = clrTrans;
|
||||
|
||||
if (blendMode > 1) {
|
||||
clrTrans2 = null;
|
||||
}
|
||||
|
||||
if (clipDepth > -1) {
|
||||
//Make transparent colors opaque, mask should be only made by shapes
|
||||
CXFORMWITHALPHA clrMask = new CXFORMWITHALPHA();
|
||||
@@ -926,6 +931,11 @@ public class Timeline {
|
||||
}*/
|
||||
if (!(sameImage && canUseSameImage)) {
|
||||
g.setTransform(drawMatrix.toTransform());
|
||||
|
||||
if (blendMode > 1 && clrTrans != null) {
|
||||
img = clrTrans.apply(img);
|
||||
}
|
||||
|
||||
g.drawImage(img.getBufferedImage(), 0, 0, null);
|
||||
//g.setColor(Color.red);
|
||||
//g.drawRect(0, 0, img.getWidth(), img.getHeight());
|
||||
@@ -1020,7 +1030,7 @@ public class Timeline {
|
||||
Matrix absMat = absoluteTransformation.concatenate(layerMatrix);
|
||||
|
||||
ColorTransform clrTrans = colorTransform;
|
||||
if (layer.colorTransForm != null && layer.blendMode <= 1) { // Normal blend mode
|
||||
if (layer.colorTransForm != null) {
|
||||
clrTrans = clrTrans == null ? layer.colorTransForm : colorTransform.merge(layer.colorTransForm);
|
||||
}
|
||||
|
||||
|
||||
@@ -190,7 +190,14 @@ public final class BlendComposite implements Composite {
|
||||
srcPixel[1] = (pixel >> 8) & 0xFF;
|
||||
srcPixel[2] = (pixel) & 0xFF;
|
||||
srcPixel[3] = (pixel >> 24) & 0xFF;
|
||||
|
||||
|
||||
|
||||
if (srcPixel[3] != 1 && srcPixel[3] != 0) {
|
||||
srcPixel[0] = srcPixel[0] * 255 / srcPixel[3];
|
||||
srcPixel[1] = srcPixel[1] * 255 / srcPixel[3];
|
||||
srcPixel[2] = srcPixel[2] * 255 / srcPixel[3];
|
||||
}
|
||||
|
||||
pixel = dstPixels[x];
|
||||
dstPixel[0] = (pixel >> 16) & 0xFF;
|
||||
dstPixel[1] = (pixel >> 8) & 0xFF;
|
||||
@@ -198,12 +205,14 @@ public final class BlendComposite implements Composite {
|
||||
dstPixel[3] = (pixel >> 24) & 0xFF;
|
||||
|
||||
blender.blend(srcPixel, dstPixel, result);
|
||||
|
||||
result[3] = 255;
|
||||
|
||||
retPixel[0] = ((int) (dstPixel[0] + (result[0] - dstPixel[0]) * alpha) & 0xFF);
|
||||
retPixel[1] = ((int) (dstPixel[1] + (result[1] - dstPixel[1]) * alpha) & 0xFF);
|
||||
retPixel[2] = (int) (dstPixel[2] + (result[2] - dstPixel[2]) * alpha) & 0xFF;
|
||||
retPixel[3] = ((int) (dstPixel[3] + (result[3] - dstPixel[3]) * alpha) & 0xFF);
|
||||
|
||||
|
||||
float af = ((float) srcPixel[3]) / 255f;
|
||||
retPixel[0] = (int) ((1f - af) * dstPixel[0] + af * retPixel[0]);
|
||||
retPixel[1] = (int) ((1f - af) * dstPixel[1] + af * retPixel[1]);
|
||||
@@ -233,7 +242,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = Math.min(255, src[0] + dst[0]);
|
||||
result[1] = Math.min(255, src[1] + dst[1]);
|
||||
result[2] = Math.min(255, src[2] + dst[2]);
|
||||
result[3] = Math.min(255, src[3] + dst[3]);
|
||||
}
|
||||
};
|
||||
case INVERT:
|
||||
@@ -243,7 +251,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = 255 - dst[0];
|
||||
result[1] = 255 - dst[1];
|
||||
result[2] = 255 - dst[2];
|
||||
result[3] = src[3];
|
||||
}
|
||||
};
|
||||
case ALPHA:
|
||||
@@ -253,7 +260,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = src[0];
|
||||
result[1] = src[1];
|
||||
result[2] = src[2];
|
||||
result[3] = dst[3]; //?
|
||||
}
|
||||
};
|
||||
case ERASE:
|
||||
@@ -263,7 +269,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = src[0];
|
||||
result[1] = src[1];
|
||||
result[2] = src[2];
|
||||
result[3] = 255 - dst[3]; //?
|
||||
}
|
||||
};
|
||||
|
||||
@@ -274,7 +279,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = Math.min(src[0], dst[0]);
|
||||
result[1] = Math.min(src[1], dst[1]);
|
||||
result[2] = Math.min(src[2], dst[2]);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
case DIFFERENCE:
|
||||
@@ -284,7 +288,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = Math.abs(dst[0] - src[0]);
|
||||
result[1] = Math.abs(dst[1] - src[1]);
|
||||
result[2] = Math.abs(dst[2] - src[2]);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -298,7 +301,6 @@ public final class BlendComposite implements Composite {
|
||||
: 255 - ((255 - src[1]) * (255 - dst[1]) >> 7);
|
||||
result[2] = src[2] < 128 ? dst[2] * src[2] >> 7
|
||||
: 255 - ((255 - src[2]) * (255 - dst[2]) >> 7);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -309,7 +311,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = Math.max(src[0], dst[0]);
|
||||
result[1] = Math.max(src[1], dst[1]);
|
||||
result[2] = Math.max(src[2], dst[2]);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
case MULTIPLY:
|
||||
@@ -319,7 +320,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = (src[0] * dst[0]) >> 8;
|
||||
result[1] = (src[1] * dst[1]) >> 8;
|
||||
result[2] = (src[2] * dst[2]) >> 8;
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -333,7 +333,6 @@ public final class BlendComposite implements Composite {
|
||||
: 255 - ((255 - dst[1]) * (255 - src[1]) >> 7);
|
||||
result[2] = dst[2] < 128 ? dst[2] * src[2] >> 7
|
||||
: 255 - ((255 - dst[2]) * (255 - src[2]) >> 7);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
case SCREEN:
|
||||
@@ -343,7 +342,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = 255 - ((255 - src[0]) * (255 - dst[0]) >> 8);
|
||||
result[1] = 255 - ((255 - src[1]) * (255 - dst[1]) >> 8);
|
||||
result[2] = 255 - ((255 - src[2]) * (255 - dst[2]) >> 8);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -354,7 +352,6 @@ public final class BlendComposite implements Composite {
|
||||
result[0] = Math.max(0, dst[0] - src[0]);
|
||||
result[1] = Math.max(0, dst[1] - src[1]);
|
||||
result[2] = Math.max(0, dst[2] - src[2]);
|
||||
result[3] = Math.min(255, src[3] + dst[3] - 256 - (src[3] * dst[3]) / 255);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user