При печати файлов bmp с использованием языка печати EPL2 появляется большая черная линия - PullRequest
1 голос
/ 07 апреля 2010

Это третья часть этой темы. Часть 1 , Часть 2. .

Мне удалось распечатать мое монохромное растровое изображение на моем принтере, однако при печати элемента есть большая черная полоса вдоль правой части изображения.

Вот оригинал

enter image description here

(Отсканировано) Что напечатано на принтере

enter image description here

Код для генерации двоичного двоичного объекта

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 в конце каждой строки. Но я пишу здесь на тот случай, если кто-нибудь придумает лучший способ.

1 Ответ

5 голосов
/ 07 апреля 2010

Растровые изображения Microsoft всегда дополняются до 32 бит. При создании растрового изображения округлите ширину до значения, кратного 32, и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...