首页 > 解决方案 > 我正在寻找以窗口形式存在的 wpf 中的图形类

问题描述

这是我的代码,我想将其转换为 wpf,但遇到了太多困难。请有人帮助我。问题是首先找到我发现为位图图像的位图的替换,但现在我无法找到一个替换图形的类,这是我的代码:

string barcode = textBox1.Text;
            Bitmap bitmap = new Bitmap(barcode.Length * 40, 150);
            // i changed bitmap to this
            BitmapImage myBitmapImage = new BitmapImage();
            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);
                    pictureBox1.Image = bitmap;
                    pictureBox1.Height = bitmap.Height;
                    pictureBox1.Width = bitmap.Width;
                }

                sd = new SaveFileDialog();
                sd.Filter = "PNG File|*.png";
                if(sd.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image.Save(sd.FileName, 
                    System.Drawing.Imaging.ImageFormat.Png);
                }

标签: wpf

解决方案


如果您的系统上安装了条形码字体,以下方法会创建一个包含条形码文本的位图:

private BitmapSource CreateBarcodeBitmap(string barcodeText)
{
    var text = new FormattedText(
        barcodeText, CultureInfo.InvariantCulture, FlowDirection.LeftToRight,
        new Typeface("IDAHC39M Code 39 Barcode Standard"), 20, Brushes.Black);
    var rect = new Rect(0, 0, text.Width, text.Height);
    var visual = new DrawingVisual();

    using (var drawingContext = visual.RenderOpen())
    {
        drawingContext.DrawRectangle(Brushes.White, null, rect);
        drawingContext.DrawText(text, new Point());
    }

    var bitmap = new RenderTargetBitmap(
        (int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default);
    bitmap.Render(visual);

    return bitmap;
}

您现在可以将返回值分配给 UI 中 Image 元素的 Source 属性,或将其传递给例如 aPngBitmapEncoder以将其写入 PNG 文件,例如:

var barcodeBitmap = CreateBarcodeBitmap("1234567890");
var encoder = new PngBitmapEncoder();

encoder.Frames.Add(BitmapFrame.Create(barcodeBitmap));

using (var fileStream = new FileStream("barcode.png", FileMode.Create))
{
    encoder.Save(fileStream);
}

推荐阅读