From: Pranav Batra In unpackBits() round width down instead of up and separately handle the remaining bits (b/217983652). Corresponding change in ChromeOS: https://crrev.com/c/3451049 --- a/prnt/hpcups/Job.cpp +++ b/prnt/hpcups/Job.cpp @@ -148,7 +148,7 @@ void Job::unpackBits(BYTE *BlackImageData) { // Convert K from 1-bit raster to 8-bit raster. unsigned char bitflag[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; - int width = (m_job_attributes.media_attributes.printable_width + 7) / 8; + int width = m_job_attributes.media_attributes.printable_width / 8; for (int i = 0; i < width; i++) { for (int j = 0; j < 8; j++) @@ -157,6 +157,12 @@ void Job::unpackBits(BYTE *BlackImageData) m_pBlackRaster[i*8+j] = 1; } } + int bits = m_job_attributes.media_attributes.printable_width % 8; + for (int j = 0; j < bits; j++) + { + if (BlackImageData[width] & bitflag[j]) + m_pBlackRaster[width*8+j] = 1; + } } DRIVER_ERROR Job::SendRasters(BYTE* BlackImageData, BYTE* ColorImageData)