Огромные пробелы существуют сразу после рисования изображения.Хочешь от этого избавиться - PullRequest
1 голос
/ 23 июля 2010

Я использую следующий кодпроект для создания сайта asp.net, и пока все хорошо. Моя единственная проблема в том, что после того, как штрих-код сгенерирован, справа от штрих-кода существуют огромные пробелы. Я играл с этим и не могу решить.

Подробности ниже:

Ссылка на код проекта статьи: http://www.codeproject.com/KB/aspnet/AspBarCodes.aspx?msg=3543809

Копия шрифта находится здесь: http://trussvillemethodist.web01.appliedi -labs.net / IDAutomationHC39M.ttf

          //Working Path
        string sWorkPath = "";
        sWorkPath = this.Context.Server.MapPath("");

        //Fonts
        PrivateFontCollection fnts = new PrivateFontCollection();
        fnts.AddFontFile(sWorkPath + @"\IDAutomationHC39M.ttf");
        FontFamily fntfam = new FontFamily("IDAutomationHC39M", fnts);
        Font oFont = new Font(fntfam, 18);

        // Get the Requested code sent from the previous page.
        string strCode = Request["code"].ToString();

        //Graphics
        //I don't know what to set the width to as I can't call the MeasureString without creating the Graphics object.
        Bitmap oBitmaptemp = new Bitmap(40, 100);
        Graphics oGraphicstemp = Graphics.FromImage(oBitmaptemp);
        int w = (int)oGraphicstemp.MeasureString(strCode, oFont).Width + 4;

        // Create a bitmap object of the width that we calculated and height of 100
        Bitmap oBitmap = new Bitmap(w, 100);

        // then create a Graphic object for the bitmap we just created.
        Graphics oGraphics = Graphics.FromImage(oBitmap);

        // Let's create the Point and Brushes for the barcode
        PointF oPoint = new PointF(2f, 2f);
        SolidBrush oBrushWrite = new SolidBrush(Color.Black);
        SolidBrush oBrush = new SolidBrush(Color.White);

        // Now lets create the actual barcode image
        // with a rectangle filled with white color
        oGraphics.FillRectangle(oBrush, 0, 0, w, 100);

        // We have to put prefix and sufix of an asterisk (*),
        // in order to be a valid barcode
        oGraphics.DrawString("*" + strCode + "*", oFont, oBrushWrite, oPoint);

        // Then we send the Graphics with the actual barcode
        Response.ContentType = "image/gif";
        oBitmap.Save(Response.OutputStream, ImageFormat.Gif);

        oBitmap.Dispose();
        oGraphics.Dispose();
        oBrush.Dispose();
        oFont.Dispose();

1 Ответ

3 голосов
/ 23 июля 2010

Код предполагает только 40 пикселей на символ, поэтому справа от текста вы видите много изображений. Вы можете использовать метод MeasureString, чтобы измерить размер текста, и использовать его для создания изображения правильного размера:

int w = (int)oGraphics.MeasureString("*123$10.00*", oFont).Width + 4;

Я заметил, что вы не утилизируете ни один из объектов, которые вы используете. Объекты Graphics, Bitmap, SolidBrush и Font необходимо утилизировать.

Возможно, вы захотите использовать изображение GIF вместо JPEG, оно больше подходит для этого вида графики.

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