最近我设法让应用程序正常运行而没有错误。
问题在于它应该生成一个带有文本的条形码;它的作用是,它只生成带有文本的图像 - 没有条形码。
我使用的是字体IDAutomationHC39M。应用程序应将文本转换为条形码。
请参阅以下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
String barcode = pole.Text;
Bitmap bitmap = new Bitmap(barcode.Length * 40, 150);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
Font ofont = new System.Drawing.Font("IDAutomationHC39M", 20);
PointF point = new PointF(2f, 2f);
SolidBrush black = new SolidBrush(Color.Black);
SolidBrush White = new SolidBrush(Color.White);
graphics.FillRectangle(White, 0, 0, bitmap.Width, bitmap.Height);
graphics.DrawString("*" + barcode + "*", ofont, black, point);
}
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Png);
box.Image = bitmap;
box.Height = bitmap.Height;
box.Width = bitmap.Width;
}
}
private void pole_TextChanged(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:2)
您的代码中存在一些小问题,即GDI资源的泄漏以及您创建的位图的不精确测量。
这是一个处理这些问题的版本:
String barcode = "*" + pole.Text + "*";
PointF point = new PointF(5f, 5f);
float fontHeight = 20f;
Bitmap bitmap = new Bitmap(123,123);
using (Font ofont = new System.Drawing.Font("IDAutomationHC39M", fontHeight))
{ // create a Graphics object to measure the barcode
using (Graphics graphics = Graphics.FromImage(bitmap))
{
Size sz = Size.Round(graphics.MeasureString( barcode, ofont));
bitmap = new Bitmap(sz.Width + 10, sz.Height + 10);
} // create a new one with the right size to work on
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.Clear(Color.White);
graphics.DrawString(barcode, ofont, Brushes.Black, point);
}
}
box.Image = bitmap;
box.ClientSize = bitmap.Size;
// bitmap.Save(fileName, ImageFormat.Png);
但您的主要问题最有可能来自使用不完全兼容的字体。有许多免费字体,但并非所有字体都同样有效。
我发现this font工作正常,但无法获得this one to work directly,虽然我的一个旧程序枚举已安装的字体,但确实可以使用它。但即使是设计师也拒绝使用它,所以它不仅仅是名字......
以下是一个示例: