mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-21 15:48:06 +02:00
Merge pull request #9802 from Snuffleupagus/ColorSpace-PDFImage-Uint8ClampedArray
Update `ColorSpace` and `PDFImage` to use `Uint8ClampedArray`s and remove manual clamping/rounding
This commit is contained in:
commit
620da6f4df
15 changed files with 363 additions and 273 deletions
|
@ -166,7 +166,7 @@ describe('annotation', function() {
|
|||
var annotation = new Annotation({ dict, ref, });
|
||||
annotation.setColor('red');
|
||||
|
||||
expect(annotation.color).toEqual(new Uint8Array([0, 0, 0]));
|
||||
expect(annotation.color).toEqual(new Uint8ClampedArray([0, 0, 0]));
|
||||
});
|
||||
|
||||
it('should set and get a transparent color', function() {
|
||||
|
@ -180,28 +180,28 @@ describe('annotation', function() {
|
|||
var annotation = new Annotation({ dict, ref, });
|
||||
annotation.setColor([0.4]);
|
||||
|
||||
expect(annotation.color).toEqual(new Uint8Array([102, 102, 102]));
|
||||
expect(annotation.color).toEqual(new Uint8ClampedArray([102, 102, 102]));
|
||||
});
|
||||
|
||||
it('should set and get an RGB color', function() {
|
||||
var annotation = new Annotation({ dict, ref, });
|
||||
annotation.setColor([0, 0, 1]);
|
||||
|
||||
expect(annotation.color).toEqual(new Uint8Array([0, 0, 255]));
|
||||
expect(annotation.color).toEqual(new Uint8ClampedArray([0, 0, 255]));
|
||||
});
|
||||
|
||||
it('should set and get a CMYK color', function() {
|
||||
var annotation = new Annotation({ dict, ref, });
|
||||
annotation.setColor([0.1, 0.92, 0.84, 0.02]);
|
||||
|
||||
expect(annotation.color).toEqual(new Uint8Array([233, 59, 47]));
|
||||
expect(annotation.color).toEqual(new Uint8ClampedArray([234, 59, 48]));
|
||||
});
|
||||
|
||||
it('should not set and get an invalid color', function() {
|
||||
var annotation = new Annotation({ dict, ref, });
|
||||
annotation.setColor([0.4, 0.6]);
|
||||
|
||||
expect(annotation.color).toEqual(new Uint8Array([0, 0, 0]));
|
||||
expect(annotation.color).toEqual(new Uint8ClampedArray([0, 0, 0]));
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -764,7 +764,7 @@ describe('api', function() {
|
|||
|
||||
expect(outlineItem.bold).toEqual(true);
|
||||
expect(outlineItem.italic).toEqual(false);
|
||||
expect(outlineItem.color).toEqual(new Uint8Array([0, 64, 128]));
|
||||
expect(outlineItem.color).toEqual(new Uint8ClampedArray([0, 64, 128]));
|
||||
|
||||
expect(outlineItem.items.length).toEqual(1);
|
||||
expect(outlineItem.items[0].title).toEqual('Paragraph 1.1');
|
||||
|
@ -791,7 +791,8 @@ describe('api', function() {
|
|||
var outlineItemOne = outline[1];
|
||||
expect(outlineItemOne.bold).toEqual(false);
|
||||
expect(outlineItemOne.italic).toEqual(true);
|
||||
expect(outlineItemOne.color).toEqual(new Uint8Array([0, 0, 0]));
|
||||
expect(outlineItemOne.color).toEqual(
|
||||
new Uint8ClampedArray([0, 0, 0]));
|
||||
|
||||
loadingTask.destroy().then(done);
|
||||
});
|
||||
|
|
|
@ -61,8 +61,8 @@ describe('colorspace', function () {
|
|||
let colorSpace = ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
|
||||
|
||||
let testSrc = new Uint8Array([27, 125, 250, 131]);
|
||||
let testDest = new Uint8Array(4 * 4 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(4 * 4 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
27, 27, 27,
|
||||
27, 27, 27,
|
||||
125, 125, 125,
|
||||
|
@ -83,7 +83,7 @@ describe('colorspace', function () {
|
|||
colorSpace.fillRgb(testDest, 2, 2, 4, 4, 4, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.1]), 0))
|
||||
.toEqual(new Uint8Array([25, 25, 25]));
|
||||
.toEqual(new Uint8ClampedArray([26, 26, 26]));
|
||||
expect(colorSpace.getOutputLength(2, 0)).toEqual(6);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -102,8 +102,8 @@ describe('colorspace', function () {
|
|||
let colorSpace = ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
|
||||
|
||||
let testSrc = new Uint8Array([27, 125, 250, 131]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
27, 27, 27,
|
||||
27, 27, 27,
|
||||
125, 125, 125,
|
||||
|
@ -117,7 +117,7 @@ describe('colorspace', function () {
|
|||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.2]), 0))
|
||||
.toEqual(new Uint8Array([51, 51, 51]));
|
||||
.toEqual(new Uint8ClampedArray([51, 51, 51]));
|
||||
expect(colorSpace.getOutputLength(3, 1)).toEqual(12);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -144,8 +144,8 @@ describe('colorspace', function () {
|
|||
111, 25, 198,
|
||||
21, 147, 255
|
||||
]);
|
||||
let testDest = new Uint8Array(4 * 4 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(4 * 4 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
27, 125, 250,
|
||||
27, 125, 250,
|
||||
131, 139, 140,
|
||||
|
@ -166,7 +166,7 @@ describe('colorspace', function () {
|
|||
colorSpace.fillRgb(testDest, 2, 2, 4, 4, 4, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.1, 0.2, 0.3]), 0))
|
||||
.toEqual(new Uint8Array([25, 51, 76]));
|
||||
.toEqual(new Uint8ClampedArray([26, 51, 77]));
|
||||
expect(colorSpace.getOutputLength(4, 0)).toEqual(4);
|
||||
expect(colorSpace.isPassthrough(8)).toBeTruthy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -190,8 +190,8 @@ describe('colorspace', function () {
|
|||
111, 25, 198,
|
||||
21, 147, 255
|
||||
]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
27, 125, 250,
|
||||
27, 125, 250,
|
||||
131, 139, 140,
|
||||
|
@ -205,7 +205,7 @@ describe('colorspace', function () {
|
|||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.1, 0.2, 0.3]), 0))
|
||||
.toEqual(new Uint8Array([25, 51, 76]));
|
||||
.toEqual(new Uint8ClampedArray([26, 51, 77]));
|
||||
expect(colorSpace.getOutputLength(4, 1)).toEqual(5);
|
||||
expect(colorSpace.isPassthrough(8)).toBeTruthy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -232,29 +232,29 @@ describe('colorspace', function () {
|
|||
111, 25, 198, 78,
|
||||
21, 147, 255, 69
|
||||
]);
|
||||
let testDest = new Uint8Array(4 * 4 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
135, 80, 18,
|
||||
135, 80, 18,
|
||||
113, 102, 97,
|
||||
113, 102, 97,
|
||||
135, 80, 18,
|
||||
135, 80, 18,
|
||||
113, 102, 97,
|
||||
113, 102, 97,
|
||||
112, 143, 75,
|
||||
112, 143, 75,
|
||||
let testDest = new Uint8ClampedArray(4 * 4 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
135, 81, 18,
|
||||
135, 81, 18,
|
||||
114, 102, 97,
|
||||
114, 102, 97,
|
||||
135, 81, 18,
|
||||
135, 81, 18,
|
||||
114, 102, 97,
|
||||
114, 102, 97,
|
||||
112, 144, 75,
|
||||
112, 144, 75,
|
||||
188, 98, 27,
|
||||
188, 98, 27,
|
||||
112, 143, 75,
|
||||
112, 143, 75,
|
||||
112, 144, 75,
|
||||
112, 144, 75,
|
||||
188, 98, 27,
|
||||
188, 98, 27
|
||||
]);
|
||||
colorSpace.fillRgb(testDest, 2, 2, 4, 4, 4, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.1, 0.2, 0.3, 1]),
|
||||
0)).toEqual(new Uint8Array([31, 27, 20]));
|
||||
0)).toEqual(new Uint8ClampedArray([32, 28, 21]));
|
||||
expect(colorSpace.getOutputLength(4, 0)).toEqual(3);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -278,22 +278,22 @@ describe('colorspace', function () {
|
|||
111, 25, 198, 78,
|
||||
21, 147, 255, 69
|
||||
]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
135, 80, 18,
|
||||
135, 80, 18,
|
||||
113, 102, 97,
|
||||
135, 80, 18,
|
||||
135, 80, 18,
|
||||
113, 102, 97,
|
||||
112, 143, 75,
|
||||
112, 143, 75,
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
135, 81, 18,
|
||||
135, 81, 18,
|
||||
114, 102, 97,
|
||||
135, 81, 18,
|
||||
135, 81, 18,
|
||||
114, 102, 97,
|
||||
112, 144, 75,
|
||||
112, 144, 75,
|
||||
188, 98, 27
|
||||
]);
|
||||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.1, 0.2, 0.3, 1]), 0))
|
||||
.toEqual(new Uint8Array([31, 27, 20]));
|
||||
.toEqual(new Uint8ClampedArray([32, 28, 21]));
|
||||
expect(colorSpace.getOutputLength(4, 1)).toEqual(4);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -323,8 +323,8 @@ describe('colorspace', function () {
|
|||
let colorSpace = ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
|
||||
|
||||
let testSrc = new Uint8Array([27, 125, 250, 131]);
|
||||
let testDest = new Uint8Array(4 * 4 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(4 * 4 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
25, 25, 25,
|
||||
25, 25, 25,
|
||||
143, 143, 143,
|
||||
|
@ -335,17 +335,17 @@ describe('colorspace', function () {
|
|||
143, 143, 143,
|
||||
251, 251, 251,
|
||||
251, 251, 251,
|
||||
148, 148, 148,
|
||||
148, 148, 148,
|
||||
149, 149, 149,
|
||||
149, 149, 149,
|
||||
251, 251, 251,
|
||||
251, 251, 251,
|
||||
148, 148, 148,
|
||||
148, 148, 148
|
||||
149, 149, 149,
|
||||
149, 149, 149
|
||||
]);
|
||||
colorSpace.fillRgb(testDest, 2, 2, 4, 4, 4, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([1.0]), 0))
|
||||
.toEqual(new Uint8Array([255, 255, 255]));
|
||||
.toEqual(new Uint8ClampedArray([255, 255, 255]));
|
||||
expect(colorSpace.getOutputLength(4, 0)).toEqual(12);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -381,8 +381,8 @@ describe('colorspace', function () {
|
|||
111, 25, 198,
|
||||
21, 147, 255
|
||||
]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
0, 238, 255,
|
||||
0, 238, 255,
|
||||
185, 196, 195,
|
||||
|
@ -396,7 +396,7 @@ describe('colorspace', function () {
|
|||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb(new Float32Array([0.1, 0.2, 0.3]), 0))
|
||||
.toEqual(new Uint8Array([0, 147, 151]));
|
||||
.toEqual(new Uint8ClampedArray([0, 147, 151]));
|
||||
expect(colorSpace.getOutputLength(4, 0)).toEqual(4);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -431,22 +431,22 @@ describe('colorspace', function () {
|
|||
11, 25, 98,
|
||||
21, 47, 55
|
||||
]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
0, 49, 101,
|
||||
0, 49, 101,
|
||||
0, 53, 116,
|
||||
0, 53, 117,
|
||||
0, 49, 101,
|
||||
0, 49, 101,
|
||||
0, 53, 116,
|
||||
0, 40, 39,
|
||||
0, 40, 39,
|
||||
0, 53, 117,
|
||||
0, 41, 40,
|
||||
0, 41, 40,
|
||||
0, 43, 90
|
||||
]);
|
||||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb([55, 25, 35], 0))
|
||||
.toEqual(new Uint8Array([188, 99, 61]));
|
||||
.toEqual(new Uint8ClampedArray([188, 100, 61]));
|
||||
expect(colorSpace.getOutputLength(4, 0)).toEqual(4);
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(colorSpace.isDefaultDecode([0, 1])).toBeTruthy();
|
||||
|
@ -479,8 +479,8 @@ describe('colorspace', function () {
|
|||
let colorSpace = ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
|
||||
|
||||
let testSrc = new Uint8Array([2, 2, 0, 1]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
255, 109, 70,
|
||||
255, 109, 70,
|
||||
255, 109, 70,
|
||||
|
@ -493,7 +493,8 @@ describe('colorspace', function () {
|
|||
]);
|
||||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb([2], 0)).toEqual(new Uint8Array([255, 109, 70]));
|
||||
expect(colorSpace.getRgb([2], 0)).toEqual(
|
||||
new Uint8ClampedArray([255, 109, 70]));
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(colorSpace.isDefaultDecode([0, 1])).toBeTruthy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
@ -534,22 +535,22 @@ describe('colorspace', function () {
|
|||
let colorSpace = ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
|
||||
|
||||
let testSrc = new Uint8Array([27, 25, 50, 31]);
|
||||
let testDest = new Uint8Array(3 * 3 * 3);
|
||||
let expectedDest = new Uint8Array([
|
||||
227, 243, 242,
|
||||
227, 243, 242,
|
||||
228, 243, 242,
|
||||
227, 243, 242,
|
||||
227, 243, 242,
|
||||
228, 243, 242,
|
||||
203, 233, 229,
|
||||
203, 233, 229,
|
||||
222, 241, 239
|
||||
let testDest = new Uint8ClampedArray(3 * 3 * 3);
|
||||
let expectedDest = new Uint8ClampedArray([
|
||||
226, 242, 241,
|
||||
226, 242, 241,
|
||||
229, 244, 242,
|
||||
226, 242, 241,
|
||||
226, 242, 241,
|
||||
229, 244, 242,
|
||||
203, 232, 229,
|
||||
203, 232, 229,
|
||||
222, 241, 238
|
||||
]);
|
||||
colorSpace.fillRgb(testDest, 2, 2, 3, 3, 3, 8, testSrc, 0);
|
||||
|
||||
expect(colorSpace.getRgb([0.1], 0))
|
||||
.toEqual(new Uint8Array([228, 243, 241]));
|
||||
.toEqual(new Uint8ClampedArray([228, 243, 242]));
|
||||
expect(colorSpace.isPassthrough(8)).toBeFalsy();
|
||||
expect(colorSpace.isDefaultDecode([0, 1])).toBeTruthy();
|
||||
expect(testDest).toEqual(expectedDest);
|
||||
|
|
|
@ -59,6 +59,11 @@ describe('stream', function() {
|
|||
expect(result).toMatchTypedArray(
|
||||
new Uint8Array([100, 3, 101, 2, 102, 1])
|
||||
);
|
||||
|
||||
predictor.reset();
|
||||
let clampedResult = predictor.getBytes(6, /* forceClamped = */ true);
|
||||
expect(clampedResult).toEqual(
|
||||
new Uint8ClampedArray([100, 3, 101, 2, 102, 1]));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue