但是,如果我这样做,我怎么知道要创建什么大小的位图以适合其上的完整条形码?
位图基于具有特定分辨率的物理设备,通常以 DPI(每英寸点数)测量。Windows 操作系统为显示器分配 96 或 120 dpi 的逻辑分辨率。打印机的物理分辨率为 300 - 600,有时高达 1200 或更高。处理胶片的照排机可以具有高达 2540 或更高 DPI 的物理分辨率。
逻辑分辨率意味着 X 点在某个设备上等于一英寸。通常这是一个近似值,可用于缩放。物理分辨率表示设备可以实现(或实际存在)X 个每英寸点数。
在制作条形码和打印到设备时,您必须考虑该设备的分辨率。如果您有一个 4 英寸宽的条形码并想在 600 dpi 打印机上打印,您需要一个 4 * 600 = 2400 像素宽的位图。在某些设备上打印还有其他影响,这样您就不会无意中缩小/放大代码条。
我所有漫无边际的要点是,您应该使用矢量格式(例如 .WMF 或 .EMF)生成条形码,然后将其渲染为针对您要输出到的设备量身定制的位图。这也将允许您在 CorelDRAW 或 Adobe Illustrator 等矢量绘图程序中编辑代码。
大多数(如果不是全部)条码都有一个宽度公式,它会告诉您在给定特定编码(条码中编码的符号系统)的情况下最终代码的宽度(以英寸为单位)。
有了这些知识,您可以使用类似于以下内容制作条形码(将此 vb.net 代码复制并粘贴到新项目的 form.load 或按钮单击事件中):
Dim gfx As Graphics = Me.CreateGraphics
Dim hdc As IntPtr = gfx.GetHdc()
Dim mf As System.Drawing.Imaging.Metafile = New Imaging.Metafile("c:\1.wmf", hdc, New RectangleF(0, 0, 5 * 2540, 1 * 2540), Imaging.MetafileFrameUnit.GdiCompatible)
Dim g As Graphics = Graphics.FromImage(mf)
g.PageUnit = GraphicsUnit.Inch
g.FillRectangle(Brushes.Blue, New RectangleF(0, 0, 5, 1))
g.FillRectangle(Brushes.Red, New RectangleF(0.25, 0.25, 4.5, 0.5))
g.Dispose()
mf.Dispose()
gfx.ReleaseHdc(hdc)
gfx.Dispose()
- 图元文件构造函数中的尺寸是英寸 * 2540。2540 是一个常数,表示每英寸 0.01 毫米。这是底层 GDI 使用的。
现在使用 CorelDRAW 或 Illustrator 等真正的矢量图形程序打开“1.wmf”文件。(您不能使用 MSPaint 或 Windows Preview 等...)您会注意到您有一个 5x1 蓝色矩形,中间有一个 4.5 x 0.5 红色矩形。
这就是应如何将您的条形码绘制到元文件中。用您的条形码绘制例程替换蓝色和红色矩形代码。不要忘记创建一个透明的大小框架来告诉元文件你的绘图边界。
g.FillRectangle(Brushes.Transparent, rectBounds)
绘制条形码并将其保存到元文件后,您可以使用 GDI+ 加载它并将其渲染为具有输出设备分辨率的位图。显然,最后一步是将位图发送到您的输出设备,除非您的输出设备当然内置了矢量或 postscript 处理器。
好吧,这可能比您想知道的更多,但这是正确的方法,如果您的代码被指责为“不可扫描”,它将为您节省大量时间和心痛。 .
祝你好运,让我知道结果如何。