var tinted = this.tintFn.func(color);
return this.base.getRgb(tinted);
},
- getRgbBuffer: function sepcs_getRgbBuffer(input) {
+ getRgbBuffer: function sepcs_getRgbBuffer(input, bits) {
var tintFn = this.tintFn;
var base = this.base;
+ var scale = 1 / ((1 << bits) - 1);
var length = 3 * input.length;
var pos = 0;
var numComps = base.numComps;
var baseBuf = new Uint8Array(numComps * input.length);
for (var i = 0, ii = input.length; i < ii; ++i) {
- var scaled = input[i] / 255;
+ var scaled = input[i] * scale;
var tinted = tintFn.func([scaled]);
for (var j = 0; j < numComps; ++j)
baseBuf[pos++] = 255 * tinted[j];
}
- return base.getRgbBuffer(baseBuf);
+ return base.getRgbBuffer(baseBuf, 8);
}
};
}
}
- return base.getRgbBuffer(baseBuf);
+ return base.getRgbBuffer(baseBuf, 8);
}
};
return constructor;
var c = color[0];
return [c, c, c];
},
- getRgbBuffer: function graycs_getRgbBuffer(input) {
+ getRgbBuffer: function graycs_getRgbBuffer(input, bits) {
+ var scale = 255 / ((1 << bits) - 1);
var length = input.length * 3;
var rgbBuf = new Uint8Array(length);
for (var i = 0, j = 0; i < length; ++i) {
- var c = input[i];
+ var c = (scale * input[i]) | 0;
rgbBuf[j++] = c;
rgbBuf[j++] = c;
rgbBuf[j++] = c;
})();
var DeviceRgbCS = (function() {
- function constructor() {
+ function constructor(bits) {
this.name = 'DeviceRGB';
this.numComps = 3;
this.defaultColor = [0, 0, 0];
getRgb: function rgbcs_getRgb(color) {
return color;
},
- getRgbBuffer: function rgbcs_getRgbBuffer(input) {
- return input;
+ getRgbBuffer: function rgbcs_getRgbBuffer(input, bits) {
+ var scale = 255 / ((1 << bits) - 1);
+ var i, length = input.length;
+ var rgbBuf = new Uint8Array(length);
+ for (i = 0; i < length; ++i)
+ rgbBuf[i] = (scale * input[i]) | 0;
+ return rgbBuf;
}
};
return constructor;
return [r, g, b];
},
- getRgbBuffer: function cmykcs_getRgbBuffer(colorBuf) {
+ getRgbBuffer: function cmykcs_getRgbBuffer(colorBuf, bits) {
+ var scale = 1 / ((1 << bits) - 1);
var length = colorBuf.length / 4;
var rgbBuf = new Uint8Array(length * 3);
var rgbBufPos = 0;
for (var i = 0; i < length; i++) {
var cmyk = [];
for (var j = 0; j < 4; ++j)
- cmyk.push(colorBuf[colorBufPos++] / 255);
+ cmyk.push(scale * colorBuf[colorBufPos++]);
var rgb = this.getRgb(cmyk);
for (var j = 0; j < 3; ++j)
var length = width * height;
var bufferPos = 0;
- var output = new Uint8Array(length);
+ var output = new Uint16Array(length);
if (bpc == 1) {
- var valueZero = 0, valueOne = 255;
+ var valueZero = 0, valueOne = 1;
if (decodeMap) {
- valueZero = decodeMap[0] ? 255 : 0;
- valueOne = decodeMap[1] ? 255 : 0;
+ valueZero = decodeMap[0] ? 1 : 0;
+ valueOne = decodeMap[1] ? 1 : 0;
}
var rowComps = width * numComps;
var mask = 0;
if (decodeMap != null)
TODO('interpolate component values');
var rowComps = width * numComps;
- var bits = 0;
- var buf = 0;
-
+ var bits, buf;
for (var i = 0, ii = length; i < ii; ++i) {
+ if (i % rowComps == 0) {
+ buf = 0;
+ bits = 0;
+ }
+
while (bits < bpc) {
buf = (buf << 8) | buffer[bufferPos++];
bits += 8;
}
- var remainingBits = bits - bpc;
- var ret = buf >> remainingBits;
- if (i % rowComps == 0) {
- buf = 0;
- bits = 0;
- } else {
- buf = buf & ((1 << remainingBits) - 1);
- bits = remainingBits;
- }
- output[i] = Math.round(255 * ret / ((1 << bpc) - 1));
+ var remainingBits = bits - bpc;
+ output[i] = buf >> remainingBits;
+ buf = buf & ((1 << remainingBits) - 1);
+ bits = remainingBits;
}
}
return output;
var imgArray = this.image.getBytes(height * rowBytes);
var comps = this.colorSpace.getRgbBuffer(
- this.getComponents(imgArray, decodeMap));
+ this.getComponents(imgArray, decodeMap), bpc);
var compsPos = 0;
var opacity = this.getOpacity();
var opacityPos = 0;