Optimized PDFImage_undoPreblend
This commit is contained in:
parent
83cd530f45
commit
27d532efeb
@ -463,27 +463,29 @@ var PDFImage = (function PDFImageClosure() {
|
|||||||
if (!matte) {
|
if (!matte) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function clamp(value) {
|
|
||||||
return (value < 0 ? 0 : (value > 255 ? 255 : value)) | 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
var matteRgb = this.colorSpace.getRgb(matte, 0);
|
var matteRgb = this.colorSpace.getRgb(matte, 0);
|
||||||
|
var matteR = matteRgb[0];
|
||||||
|
var matteG = matteRgb[1];
|
||||||
|
var matteB = matteRgb[2];
|
||||||
var length = width * height * 4;
|
var length = width * height * 4;
|
||||||
|
var r, g, b;
|
||||||
for (var i = 0; i < length; i += 4) {
|
for (var i = 0; i < length; i += 4) {
|
||||||
var alpha = buffer[i + 3];
|
var alpha = buffer[i + 3];
|
||||||
if (alpha === 0) {
|
if (alpha === 0) {
|
||||||
// according formula we have to get Infinity in all components
|
// according formula we have to get Infinity in all components
|
||||||
// making it white (tipical paper color) should be okay
|
// making it white (typical paper color) should be okay
|
||||||
buffer[i] = 255;
|
buffer[i] = 255;
|
||||||
buffer[i + 1] = 255;
|
buffer[i + 1] = 255;
|
||||||
buffer[i + 2] = 255;
|
buffer[i + 2] = 255;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var k = 255 / alpha;
|
var k = 255 / alpha;
|
||||||
buffer[i] = clamp((buffer[i] - matteRgb[0]) * k + matteRgb[0]);
|
r = (buffer[i] - matteR) * k + matteR;
|
||||||
buffer[i + 1] = clamp((buffer[i + 1] - matteRgb[1]) * k + matteRgb[1]);
|
g = (buffer[i + 1] - matteG) * k + matteG;
|
||||||
buffer[i + 2] = clamp((buffer[i + 2] - matteRgb[2]) * k + matteRgb[2]);
|
b = (buffer[i + 2] - matteB) * k + matteB;
|
||||||
|
buffer[i] = r <= 0 ? 0 : r >= 255 ? 255 : r | 0;
|
||||||
|
buffer[i + 1] = g <= 0 ? 0 : g >= 255 ? 255 : g | 0;
|
||||||
|
buffer[i + 2] = b <= 0 ? 0 : b >= 255 ? 255 : b | 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user