Печать на принтере Zebra дает слабые и размытые изображения - PullRequest
3 голосов
/ 15 апреля 2010

Я написал библиотеку, которая создает растровое изображение из некоторого пользовательского ввода. Это растровое изображение затем распечатывается с использованием принтера Zebra. Проблема, с которой я сталкиваюсь, заключается в том, что на изображении, напечатанном принтером Zebra, все очень слабо и размыто, но если я распечатываю растровое изображение на лазерном принтере, оно выглядит совершенно нормально. Кто-нибудь сталкивался с этим раньше, и если да, то как они это исправили? Я перепробовал почти все, что могу придумать в настройках принтера.

Обновлен код для создания растровых изображений.

public static Bitmap GenerateLabel<T>(T obj, XmlDocument template)
    {
        try
        {
            int width = Convert.ToInt32(template.SelectSingleNode("/LABELS/@width").Value);
            int height = Convert.ToInt32(template.SelectSingleNode("/LABELS/@height").Value);

            if (obj == null || height <= 0 || width <= 0)
                throw new ArgumentException("Nothing to print");

            Bitmap bLabel = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(bLabel);

            XmlNodeList fieldList = template.SelectNodes("/LABELS/LABEL");

            foreach (XmlNode fieldDetails in fieldList)
            {
                //non important code...

                    g.DrawImage(bBarCode, field.Left, field.Top);


                using (TextBox txtbox = new TextBox())
                {
                    // more non important code...

                    Rectangle r = new Rectangle(field.Left, field.Top, field.Width, field.Height);
                    txtbox.DrawToBitmap(bLabel, r);
                }
            }

            return bLabel;
        }
        catch (Exception ex)
        {
            throw new Exception("Unable to create bitmap: " + ex.Message);
        }
    }

Ответы [ 6 ]

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

Драйвер печати Zebra сглаживает ваш вывод. Чтобы создать идеальное изображение для печати Zebra, необходимо создать изображение с разрешением 203 DPI и 2-цветным черно-белым (1-бит).

2 голосов
/ 01 февраля 2012

Для принтера требуется монохромное изображение размером 1 бит на дюйм. И не существует идеального алгоритма для преобразования цветного или полутонового изображения в монохромное. Такие алгоритмы могут или не могут дать хороший результат в зависимости от изображения. Так что лучший способ - это подготовить изображение, чтобы оно было монохромным с самого начала, как сказал Майк Рэнсом выше. Но если это нужно сделать программно, исходное цветное изображение должно использовать только черный и белый цвета (чтобы преобразование дало хороший результат), а затем вы можете использовать алгоритм, подобный этому ( ссылка на источник здесь ) :

public static Bitmap BitmapTo1Bpp(Bitmap img)
   {
       int w = img.Width;
       int h = img.Height;

       Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
       BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);

       for (int y = 0; y < h; y++)
       {
           byte[] scan = new byte[(w + 7) / 8];

           for (int x = 0; x < w; x++)
           {
               Color c = img.GetPixel(x, y);
               if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));
           }

           Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);
       }

       bmp.UnlockBits(data);

       return bmp;
   }
2 голосов
/ 24 апреля 2010

В итоге я использовал стороннюю библиотеку под названием Thermal SDK, которая позволяла мне рисовать / сохранять мое растровое изображение, а затем отправлять его на принтер zebra в «специальном» формате, в котором он нуждался. Он работает для отдельных этикеток, но если вы хотите сделать много одновременно, это будет довольно неэффективно, поскольку вам нужно сохранить каждую этикетку в файл, прежде чем вы сможете ее распечатать.

2 голосов
/ 22 апреля 2010

Это универсальная «функция» среди всех принтеров Zebra, драйверы сжимают изображения с использованием техники с потерями перед передачей на сам принтер, насколько я могу судить, обходного пути нет.

1 голос
/ 28 июля 2010

Ответ прост. Принтеры Zebra печатают только черно-белое изображение, поэтому перед отправкой изображения на принтер преобразуйте его в черно-белое.

Я не кодер на C #, но VB-код выглядит похоже, поэтому я надеюсь, что он поможет:

    ''' <summary>
''' Converts an image to Black and White
''' </summary>
''' <param name="image">Image to convert</param>
''' <param name="Mode">Convertion mode</param>
''' <param name="tolerance">Tolerancia del colores</param>
''' <returns>Converts an image to Black an white</returns>
''' <remarks></remarks>
Public Function PureBW(ByVal image As System.Drawing.Bitmap, Optional ByVal Mode As BWMode = BWMode.By_Lightness, Optional ByVal tolerance As Single = 0) As System.Drawing.Bitmap
    Dim x As Integer
    Dim y As Integer
    If tolerance > 1 Or tolerance < -1 Then
        Throw New ArgumentOutOfRangeException
        Exit Function
    End If
    For x = 0 To image.Width - 1 Step 1
        For y = 0 To image.Height - 1 Step 1
            Dim clr As Color = image.GetPixel(x, y)
            If Mode = BWMode.By_RGB_Value Then
                If (CInt(clr.R) + CInt(clr.G) + CInt(clr.B)) > 383 - (tolerance * 383) Then
                    image.SetPixel(x, y, Color.White)
                Else
                    image.SetPixel(x, y, Color.Black)
                End If
            Else
                If clr.GetBrightness > 0.5 - (tolerance / 2) Then
                    image.SetPixel(x, y, Color.White)
                Else
                    image.SetPixel(x, y, Color.Black)
                End If
            End If
        Next
    Next
    Return image
End Function
1 голос
/ 24 апреля 2010

Когда-то нужно посмотреть настройки драйвера, что такое dpi на принтере, есть много настроек, которые могут вызывать эффект, а не только техника с потерями.

мы отправили много растровых изображений в зебры и интермекционные термики, это должно работать

...