Skip to content

Commit ac64bcf

Browse files
Merge pull request #21427 from Snuffleupagus/putBinaryImageData-convertBlackAndWhiteToRGBA
Use the `convertBlackAndWhiteToRGBA` helper with grayscale images in `putBinaryImageData`
2 parents ce08a80 + d1926fb commit ac64bcf

2 files changed

Lines changed: 15 additions & 39 deletions

File tree

src/display/canvas.js

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -349,48 +349,16 @@ function putBinaryImageData(ctx, imgData) {
349349
// imgData.kind tells us which one this is.
350350
if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {
351351
// Grayscale, 1 bit per pixel (i.e. black-and-white).
352-
const srcLength = src.byteLength;
353-
const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
354-
const dest32DataLength = dest32.length;
355-
const fullSrcDiff = (width + 7) >> 3;
356-
const white = 0xffffffff;
357-
const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
358-
359352
for (i = 0; i < totalChunks; i++) {
360353
thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
361-
destPos = 0;
362-
for (j = 0; j < thisChunkHeight; j++) {
363-
const srcDiff = srcLength - srcPos;
364-
let k = 0;
365-
const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
366-
const kEndUnrolled = kEnd & ~7;
367-
let mask = 0;
368-
let srcByte = 0;
369-
for (; k < kEndUnrolled; k += 8) {
370-
srcByte = src[srcPos++];
371-
dest32[destPos++] = srcByte & 128 ? white : black;
372-
dest32[destPos++] = srcByte & 64 ? white : black;
373-
dest32[destPos++] = srcByte & 32 ? white : black;
374-
dest32[destPos++] = srcByte & 16 ? white : black;
375-
dest32[destPos++] = srcByte & 8 ? white : black;
376-
dest32[destPos++] = srcByte & 4 ? white : black;
377-
dest32[destPos++] = srcByte & 2 ? white : black;
378-
dest32[destPos++] = srcByte & 1 ? white : black;
379-
}
380-
for (; k < kEnd; k++) {
381-
if (mask === 0) {
382-
srcByte = src[srcPos++];
383-
mask = 128;
384-
}
385354

386-
dest32[destPos++] = srcByte & mask ? white : black;
387-
mask >>= 1;
388-
}
389-
}
390-
// We ran out of input. Make all remaining pixels transparent.
391-
while (destPos < dest32DataLength) {
392-
dest32[destPos++] = 0;
393-
}
355+
({ srcPos } = convertBlackAndWhiteToRGBA({
356+
src,
357+
srcPos,
358+
dest,
359+
width,
360+
height: thisChunkHeight,
361+
}));
394362

395363
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
396364
}

test/test_manifest.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5389,6 +5389,14 @@
53895389
"rounds": 1,
53905390
"type": "eq"
53915391
},
5392+
{
5393+
"id": "images_1bit_grayscale-disable-isOffscreenCanvasSupported",
5394+
"file": "pdfs/images_1bit_grayscale.pdf",
5395+
"md5": "e1c36a19563944891bd30cfc0199d07f",
5396+
"rounds": 1,
5397+
"type": "eq",
5398+
"isOffscreenCanvasSupported": false
5399+
},
53925400
{
53935401
"id": "html5checker",
53945402
"file": "pdfs/html5checker.pdf",

0 commit comments

Comments
 (0)