問題描述
這是本主題的第三部分.第 1 部分、第 2 部分..
This is the 3rd part to this topic. Part 1, Part 2..
我能夠成功地將我的單色位圖打印到我的打印機,但是在打印項目時,圖像右側(cè)有一條大的黑色條紋.
I was successfully able to print my monochrome bitmap to my printer, however there is a large black stripe along the right of the image when the item prints.
這是原文
(Scanned in)打印機打印的內(nèi)容
(Scanned in)What the printer printed
生成二進制 blob 的代碼
Code to generate binary 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)'
';
return buffer;
我最初的理論是 BMP 格式將該行添加為行尾標記,并且在呈現(xiàn)時不可行.我想在我擁有二進制數(shù)組并取出每行末尾的 00 00 00 后,我可能必須重新解析文件.但我在這里發(fā)帖以防萬一有人想到更好的方法.
My initial theory is the BMP format is adding that line as a end of line marker and is not viable when rendered. I am thinking I may have to reparse the file after I have the binary array and take out the 00 00 00 at the end of every line. But I am posting here in case anyone thinks of a better way.
推薦答案
Microsoft 位圖始終填充為偶數(shù) 32 位.生成位圖時,將寬度四舍五入到 32 的倍數(shù)就可以了.
Microsoft bitmaps are always padded to an even 32 bits. When you generate the bitmap, round the width up to a multiple of 32 and you should be fine.
這篇關(guān)于使用 EPL2 打印語言打印 bmp 文件時出現(xiàn)大黑線的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!