使用EPL2打印语言打印bmp文件时出现大黑线

这是本主题的第3部分。 第1 部分 , 第2部分 。

我成功地将单色位图打印到我的打印机,但是当打印项目时,图像右侧有一个大的黑色条纹。

这是原作

在此处输入图像描述

(扫描)打印机打印的内容

在此处输入图像描述

用于生成二进制blob的代码

Rectangle rect = new Rectangle(0, 0, Bitmap.Width, Bitmap.Height); System.Drawing.Imaging.BitmapData bmpData = null; byte[] bitVaues = null; int stride = 0; try { bmpData = Bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, Bitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; stride = bmpData.Stride; int bytes = bmpData.Stride * Bitmap.Height; bitVaues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, bitVaues, 0, bytes); } finally { if (bmpData != null) Bitmap.UnlockBits(bmpData); } string str = String.Format("GW{0},{1},{2},{3},", X, Y, stride, Bitmap.Height); byte[] ascii = Encoding.ASCII.GetBytes(str); byte[] buffer = new byte[ascii.Length + bitVaues.Length + 1]; Buffer.BlockCopy(ascii, 0, buffer, 0, ascii.Length); Buffer.BlockCopy(bitVaues, 0, buffer, ascii.Length, bitVaues.Length); buffer[buffer.Length - 1] = (byte)'\n'; return buffer; 

我的初步理论是BMP格式是将该行添加为行尾标记,并且在渲染时不可行。 我想我有二进制数组后可能需要重新解析文件,并在每一行的末尾取出00 00 00。 但我在这里张贴以防万一有人想到更好的方式。

Microsoft位图始终填充为偶数32位。 生成位图时,将宽度四舍五入到32的倍数,你应该没问题。