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

Sco*_*ain 1 c# printing bitmap

这是本主题的第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;
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*som 5

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