Browse Source

calgray: fix getRgbBuffer problem

This fixes issue 3903.
Kalervo Kujala 11 years ago
parent
commit
4c040dd955
  1. 46
      src/shared/colorspace.js
  2. 1
      test/pdfs/issue3903.pdf.link
  3. 9
      test/test_manifest.json

46
src/shared/colorspace.js

@ -639,8 +639,8 @@ var DeviceCmykCS = (function DeviceCmykCSClosure() {
var CalGrayCS = (function CalGrayCSClosure() { var CalGrayCS = (function CalGrayCSClosure() {
function CalGrayCS(whitePoint, blackPoint, gamma) { function CalGrayCS(whitePoint, blackPoint, gamma) {
this.name = 'CalGray'; this.name = 'CalGray';
this.numComps = 3; this.numComps = 1;
this.defaultColor = new Float32Array([0, 0, 0]); this.defaultColor = new Float32Array([0]);
if (!whitePoint) { if (!whitePoint) {
error('WhitePoint missing - required for color space CalGray'); error('WhitePoint missing - required for color space CalGray');
@ -682,24 +682,17 @@ var CalGrayCS = (function CalGrayCSClosure() {
} }
} }
CalGrayCS.prototype = { function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
getRgb: function CalGrayCS_getRgb(src, srcOffset) {
var rgb = new Uint8Array(3);
this.getRgbItem(src, srcOffset, rgb, 0);
return rgb;
},
getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset,
dest, destOffset) {
// A represents a gray component of a calibrated gray space. // A represents a gray component of a calibrated gray space.
// A <---> AG in the spec // A <---> AG in the spec
var A = src[srcOffset]; var A = src[srcOffset] * scale;
var AG = Math.pow(A, this.G); var AG = Math.pow(A, cs.G);
// Computes intermediate variables M, L, N as per spec. // Computes intermediate variables M, L, N as per spec.
// Except if other than default BlackPoint values are used. // Except if other than default BlackPoint values are used.
var M = this.XW * AG; var M = cs.XW * AG;
var L = this.YW * AG; var L = cs.YW * AG;
var N = this.ZW * AG; var N = cs.ZW * AG;
// Decode XYZ, as per spec. // Decode XYZ, as per spec.
var X = M; var X = M;
@ -714,17 +707,26 @@ var CalGrayCS = (function CalGrayCSClosure() {
dest[destOffset] = Lstar * 255 / 100; dest[destOffset] = Lstar * 255 / 100;
dest[destOffset + 1] = Lstar * 255 / 100; dest[destOffset + 1] = Lstar * 255 / 100;
dest[destOffset + 2] = Lstar * 255 / 100; dest[destOffset + 2] = Lstar * 255 / 100;
}
CalGrayCS.prototype = {
getRgb: function CalGrayCS_getRgb(src, srcOffset) {
var rgb = new Uint8Array(3);
this.getRgbItem(src, srcOffset, rgb, 0);
return rgb;
},
getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset,
dest, destOffset) {
convertToRgb(this, src, srcOffset, dest, destOffset, 1);
}, },
getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count, getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count,
dest, destOffset, bits) { dest, destOffset, bits) {
// TODO: This part is copied from DeviceGray. Make this utility function. var scale = 1 / ((1 << bits) - 1);
var scale = 255 / ((1 << bits) - 1);
var j = srcOffset, q = destOffset;
for (var i = 0; i < count; ++i) { for (var i = 0; i < count; ++i) {
var c = (scale * src[j++]) | 0; convertToRgb(this, src, srcOffset, dest, destOffset, scale);
dest[q++] = c; srcOffset += 1;
dest[q++] = c; destOffset += 3;
dest[q++] = c;
} }
}, },
getOutputLength: function CalGrayCS_getOutputLength(inputLength) { getOutputLength: function CalGrayCS_getOutputLength(inputLength) {

1
test/pdfs/issue3903.pdf.link

@ -0,0 +1 @@
http://www.reloadbench.com/pdf/files/1%20Inch%20Diamonds.pdf

9
test/test_manifest.json

@ -76,6 +76,15 @@
"lastPage": 1, "lastPage": 1,
"type": "eq" "type": "eq"
}, },
{ "id": "issue3903",
"file": "pdfs/issue3903.pdf",
"md5": "c9a4a8012e15cf3b10d671982ce35a92",
"rounds": 1,
"link": true,
"firstPage": 1,
"lastPage": 1,
"type": "eq"
},
{ "id": "issue2391-1", { "id": "issue2391-1",
"file": "pdfs/issue2391-1.pdf", "file": "pdfs/issue2391-1.pdf",
"md5": "25ae9cb959612e7b343b55da63af2716", "md5": "25ae9cb959612e7b343b55da63af2716",

Loading…
Cancel
Save