Clean up putBinaryImageData().

This commit is contained in:
Nicholas Nethercote 2014-02-24 19:41:04 -08:00
parent f62c1c469f
commit 4e1f92a893
2 changed files with 20 additions and 23 deletions

View File

@ -457,7 +457,6 @@ var PDFImage = (function PDFImageClosure() {
var newArray = new Uint8Array(imgArray.length); var newArray = new Uint8Array(imgArray.length);
newArray.set(imgArray); newArray.set(imgArray);
imgData.data = newArray; imgData.data = newArray;
imgData.origLength = imgArray.length;
return imgData; return imgData;
} }
} }

View File

@ -452,19 +452,17 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var chunkImgData = ctx.createImageData(width, fullChunkHeight); var chunkImgData = ctx.createImageData(width, fullChunkHeight);
var srcPos = 0; var srcPos = 0;
var src = imgData.data; var src = imgData.data;
var dst = chunkImgData.data; var dest = chunkImgData.data;
// There are multiple forms in which the pixel data can be passed, and // There are multiple forms in which the pixel data can be passed, and
// imgData.kind tells us which one this is. // imgData.kind tells us which one this is.
if (imgData.kind === 'grayscale_1bpp') { if (imgData.kind === 'grayscale_1bpp') {
// Grayscale, 1 bit per pixel (i.e. black-and-white). // Grayscale, 1 bit per pixel (i.e. black-and-white).
var srcData = imgData.data; var destDataLength = dest.length;
var destData = chunkImgData.data; var srcLength = src.byteLength;
var destDataLength = destData.length;
var origLength = imgData.origLength;
for (var i = 3; i < destDataLength; i += 4) { for (var i = 3; i < destDataLength; i += 4) {
destData[i] = 255; dest[i] = 255;
} }
for (var i = 0; i < totalChunks; i++) { for (var i = 0; i < totalChunks; i++) {
var thisChunkHeight = var thisChunkHeight =
@ -475,21 +473,21 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var srcByte = 0; var srcByte = 0;
for (var k = 0; k < width; k++, destPos += 4) { for (var k = 0; k < width; k++, destPos += 4) {
if (mask === 0) { if (mask === 0) {
if (srcPos >= origLength) { if (srcPos >= srcLength) {
break; break;
} }
srcByte = srcData[srcPos++]; srcByte = src[srcPos++];
mask = 128; mask = 128;
} }
if ((srcByte & mask)) { if ((srcByte & mask)) {
destData[destPos] = 255; dest[destPos] = 255;
destData[destPos + 1] = 255; dest[destPos + 1] = 255;
destData[destPos + 2] = 255; dest[destPos + 2] = 255;
} else { } else {
destData[destPos] = 0; dest[destPos] = 0;
destData[destPos + 1] = 0; dest[destPos + 1] = 0;
destData[destPos + 2] = 0; dest[destPos + 2] = 0;
} }
mask >>= 1; mask >>= 1;
@ -499,7 +497,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
// We ran out of input. Make all remaining pixels transparent. // We ran out of input. Make all remaining pixels transparent.
destPos += 3; destPos += 3;
do { do {
destData[destPos] = 0; dest[destPos] = 0;
destPos += 4; destPos += 4;
} while (destPos < destDataLength); } while (destPos < destDataLength);
} }
@ -509,18 +507,18 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
} else if (imgData.kind === 'rgba_32bpp') { } else if (imgData.kind === 'rgba_32bpp') {
// RGBA, 32-bits per pixel. // RGBA, 32-bits per pixel.
var haveSetAndSubarray = 'set' in dst && 'subarray' in src; var haveSetAndSubarray = 'set' in dest && 'subarray' in src;
for (var i = 0; i < totalChunks; i++) { for (var i = 0; i < totalChunks; i++) {
var thisChunkHeight = var thisChunkHeight =
(i < fullChunks) ? fullChunkHeight : partialChunkHeight; (i < fullChunks) ? fullChunkHeight : partialChunkHeight;
var elemsInThisChunk = imgData.width * thisChunkHeight * 4; var elemsInThisChunk = imgData.width * thisChunkHeight * 4;
if (haveSetAndSubarray) { if (haveSetAndSubarray) {
dst.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
srcPos += elemsInThisChunk; srcPos += elemsInThisChunk;
} else { } else {
for (var j = 0; j < elemsInThisChunk; j++) { for (var j = 0; j < elemsInThisChunk; j++) {
chunkImgData.data[j] = imgData.data[srcPos++]; dest[j] = src[srcPos++];
} }
} }
ctx.putImageData(chunkImgData, 0, i * fullChunkHeight); ctx.putImageData(chunkImgData, 0, i * fullChunkHeight);
@ -534,10 +532,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var elemsInThisChunk = imgData.width * thisChunkHeight * 3; var elemsInThisChunk = imgData.width * thisChunkHeight * 3;
var destPos = 0; var destPos = 0;
for (var j = 0; j < elemsInThisChunk; j += 3) { for (var j = 0; j < elemsInThisChunk; j += 3) {
chunkImgData.data[destPos++] = imgData.data[srcPos++]; dest[destPos++] = src[srcPos++];
chunkImgData.data[destPos++] = imgData.data[srcPos++]; dest[destPos++] = src[srcPos++];
chunkImgData.data[destPos++] = imgData.data[srcPos++]; dest[destPos++] = src[srcPos++];
chunkImgData.data[destPos++] = 255; dest[destPos++] = 255;
} }
ctx.putImageData(chunkImgData, 0, i * fullChunkHeight); ctx.putImageData(chunkImgData, 0, i * fullChunkHeight);
} }