GDI 绘制条码文本

Posted

技术标签:

【中文标题】GDI 绘制条码文本【英文标题】:GDI draw barcode text 【发布时间】:2017-05-31 07:05:03 【问题描述】:

我正在尝试在C# 中使用GDI 来绘制Code 128 条形码。我有 .ttffont 应该作为矢量图形(不是 rastr):

        var bmp = new Bitmap(900, 100);
        var g = Graphics.FromImage(bmp);
        g.Clear(Color.White);
        g.SmoothingMode = SmoothingMode.None;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.DrawString(value, new Font("Code 128", 72), Brushes.Black, 0, 50);
        g.DrawPath(new Pen(Brushes.Black, (float) 1.0), new GraphicsPath());
        g.Flush();

结果图像很宽,我想将其缩放到 0.5(仅限 x 轴)。但是当我将 X 缩放到 450 时,图像变得不清晰。我注意到图像(当它仍然是 900 时)略微模糊:

如果图像如下所示,我认为我的问题将得到解决:

如何以这种方式绘制字符串?

【问题讨论】:

同时关闭 InterpolationMode!结果必须适合最近的像素。 谢谢@taw 我试过了,但结果是一样的 这些对我有用:e.Graphics.SmoothingMode = SmoothingMode.None; e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor; 【参考方案1】:

文本的平滑由 TextRenderingHint 属性控制。只需在呈现字符串之前设置此属性:

g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

【讨论】:

以上是关于GDI 绘制条码文本的主要内容,如果未能解决你的问题,请参考以下文章

windows打印GDI+出现锯齿和虚化问题的解决方法

winform 打印条码 如何去实现

win32-UpdateLayeredWindow

GDI+ Graphics Obj - 使用 GDI 直接绘制到 DC 时消除锯齿丢失

通过GDI+绘制 验证码

How-to:绘制换行文本的两种方法