C# 用二进制数据代替C语言中的实际图像#

C# 用二进制数据代替C语言中的实际图像#,c#,C#,我正在使用下面提到的库创建一个条形码,该条形码存储在如下所示的指定位置: 我的问题是,有没有一种方法可以代替将其保存到png文件,而获得字节数据 谢谢 Code39 code = new Code39("10090"); code.Paint().Save("c:/NewBARCODE.png", ImageFormat.Png); using System; using System.Collections.Generic; using System.Drawing; us

我正在使用下面提到的库创建一个条形码,该条形码存储在如下所示的指定位置:
我的问题是,有没有一种方法可以代替将其保存到png文件,而获得字节数据

谢谢

Code39 code = new Code39("10090");
        code.Paint().Save("c:/NewBARCODE.png", ImageFormat.Png);


using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Diagnostics;

namespace BarCode39
{
    public class Code39Settings
    {
        private int height = 60;

        public int BarCodeHeight
        {
            get { return height; }
            set { height = value; }
        }

        private bool drawText = true;

        public bool DrawText
        {
            get { return drawText; }
            set { drawText = value; }
        }

        private int leftMargin = 10;

        public int LeftMargin
        {
            get { return leftMargin; }
            set { leftMargin = value; }
        }

        private int rightMargin = 10;

        public int RightMargin
        {
            get { return rightMargin; }
            set { rightMargin = value; }
        }

        private int topMargin = 10;

        public int TopMargin
        {
            get { return topMargin; }
            set { topMargin = value; }
        }

        private int bottomMargin = 10;

        public int BottomMargin
        {
            get { return bottomMargin; }
            set { bottomMargin = value; }
        }

        private int interCharacterGap = 2;

        public int InterCharacterGap
        {
            get { return interCharacterGap; }
            set { interCharacterGap = value; }
        }

        private int wideWidth = 2;

        public int WideWidth
        {
            get { return wideWidth; }
            set { wideWidth = value; }
        }

        private int narrowWidth = 1;

        public int NarrowWidth
        {
            get { return narrowWidth; }
            set { narrowWidth = value; }
        }

        private Font font = new Font(FontFamily.GenericSansSerif, 12);

        public Font Font
        {
            get { return font; }
            set { font = value; }
        }

        private int codeToTextGapHeight = 10;

        public int BarCodeToTextGapHeight
        {
            get { return codeToTextGapHeight; }
            set { codeToTextGapHeight = value; }
        }
    }
    public class Code39
    {
        #region Static initialization

        static Dictionary<char, Pattern> codes;

        static Code39()
        {
            object[][] chars = new object[][] 
            {
                new object[] {'0', "n n n w w n w n n"},
                new object[] {'1', "w n n w n n n n w"},
                new object[] {'2', "n n w w n n n n w"},
                new object[] {'3', "w n w w n n n n n"},
                new object[] {'4', "n n n w w n n n w"},
                new object[] {'5', "w n n w w n n n n"},
                new object[] {'6', "n n w w w n n n n"},
                new object[] {'7', "n n n w n n w n w"},
                new object[] {'8', "w n n w n n w n n"},
                new object[] {'9', "n n w w n n w n n"},
                new object[] {'A', "w n n n n w n n w"},
                new object[] {'B', "n n w n n w n n w"},
                new object[] {'C', "w n w n n w n n n"},
                new object[] {'D', "n n n n w w n n w"},
                new object[] {'E', "w n n n w w n n n"},
                new object[] {'F', "n n w n w w n n n"},
                new object[] {'G', "n n n n n w w n w"},
                new object[] {'H', "w n n n n w w n n"},
                new object[] {'I', "n n w n n w w n n"},
                new object[] {'J', "n n n n w w w n n"},
                new object[] {'K', "w n n n n n n w w"},
                new object[] {'L', "n n w n n n n w w"},
                new object[] {'M', "w n w n n n n w n"},
                new object[] {'N', "n n n n w n n w w"},
                new object[] {'O', "w n n n w n n w n"},
                new object[] {'P', "n n w n w n n w n"},
                new object[] {'Q', "n n n n n n w w w"},
                new object[] {'R', "w n n n n n w w n"},
                new object[] {'S', "n n w n n n w w n"},
                new object[] {'T', "n n n n w n w w n"},
                new object[] {'U', "w w n n n n n n w"},
                new object[] {'V', "n w w n n n n n w"},
                new object[] {'W', "w w w n n n n n n"},
                new object[] {'X', "n w n n w n n n w"},
                new object[] {'Y', "w w n n w n n n n"},
                new object[] {'Z', "n w w n w n n n n"},
                new object[] {'-', "n w n n n n w n w"},
                new object[] {'.', "w w n n n n w n n"},
                new object[] {' ', "n w w n n n w n n"},
                new object[] {'*', "n w n n w n w n n"},
                new object[] {'$', "n w n w n w n n n"},
                new object[] {'/', "n w n w n n n w n"},
                new object[] {'+', "n w n n n w n w n"},
                new object[] {'%', "n n n w n w n w n"}
            };

            codes = new Dictionary<char, Pattern>();
            foreach (object[] c in chars)
                codes.Add((char)c[0], Pattern.Parse((string)c[1]));
        }

        #endregion

        private static Pen pen = new Pen(Color.Black);
        private static Brush brush = Brushes.Black;

        private string code;
        private Code39Settings settings;

        public Code39(string code)
            : this(code, new Code39Settings())
        {
        }

        public Code39(string code, Code39Settings settings)
        {
            foreach (char c in code)
                if (!codes.ContainsKey(c))
                    throw new ArgumentException("Invalid character encountered in specified code.");

            if (!code.StartsWith("*"))
                code = "*" + code;
            if (!code.EndsWith("*"))
                code = code + "*";

            this.code = code;
            this.settings = settings;
        }

        public Bitmap Paint()
        {
            string code = this.code.Trim('*');

            SizeF sizeCodeText = Graphics.FromImage(new Bitmap(1, 1)).MeasureString(code, settings.Font);

            int w = settings.LeftMargin + settings.RightMargin;
            foreach (char c in this.code)
                w += codes[c].GetWidth(settings) + settings.InterCharacterGap;
            w -= settings.InterCharacterGap;

            int h = settings.TopMargin + settings.BottomMargin + settings.BarCodeHeight;

            if (settings.DrawText)
                h += settings.BarCodeToTextGapHeight + (int)sizeCodeText.Height;

            Bitmap bmp = new Bitmap(w, h, PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(bmp);

            int left = settings.LeftMargin;

            foreach (char c in this.code)
                left += codes[c].Paint(settings, g, left) + settings.InterCharacterGap;

            if (settings.DrawText)
            {
                int tX = settings.LeftMargin + (w - settings.LeftMargin - settings.RightMargin - (int)sizeCodeText.Width) / 2;
                if (tX < 0)
                    tX = 0;
                int tY = settings.TopMargin + settings.BarCodeHeight + settings.BarCodeToTextGapHeight;
                g.DrawString(code, settings.Font, brush, tX, tY);
            }

            return bmp;
        }

        private class Pattern
        {
            private bool[] nw = new bool[9];

            public static Pattern Parse(string s)
            {
                Debug.Assert(s != null);

                s = s.Replace(" ", "").ToLower();

                Debug.Assert(s.Length == 9);
                Debug.Assert(s.Replace("n", "").Replace("w", "").Length == 0);

                Pattern p = new Pattern();

                int i = 0;
                foreach (char c in s)
                    p.nw[i++] = c == 'w';

                return p;
            }

            public int GetWidth(Code39Settings settings)
            {
                int width = 0;

                for (int i = 0; i < 9; i++)
                    width += (nw[i] ? settings.WideWidth : settings.NarrowWidth);

                return width;
            }

            public int Paint(Code39Settings settings, Graphics g, int left)
            {
#if DEBUG
                Rectangle gray = new Rectangle(left, 0, GetWidth(settings), settings.BarCodeHeight + settings.TopMargin + settings.BottomMargin);
                g.FillRectangle(Brushes.Gray, gray);
#endif
                int x = left;

                int w = 0;
                for (int i = 0; i < 9; i++)
                {
                    int width = (nw[i] ? settings.WideWidth : settings.NarrowWidth);

                    if (i % 2 == 0)
                    {
                        Rectangle r = new Rectangle(x, settings.TopMargin, width, settings.BarCodeHeight);
                        g.FillRectangle(brush, r);
                    }

                    x += width;
                    w += width;
                }

                return w;
            }
        }
    }
}
Code39代码=新代码39(“10090”);
code.Paint().Save(“c:/NewBARCODE.png”,ImageFormat.png);
使用制度;
使用System.Collections.Generic;
使用系统图;
使用系统、绘图、成像;
使用系统诊断;
名称空间条形码39
{
公共类代码设置
{
私人室内高度=60;
公共内部条码高度
{
获取{返回高度;}
设置{height=value;}
}
private bool drawText=true;
公共布尔图文本
{
获取{return drawText;}
设置{drawText=value;}
}
私有int leftMargin=10;
公共整型左边距
{
获取{return leftMargin;}
设置{leftMargin=value;}
}
私人int rightMargin=10;
公共int右页边距
{
获取{return rightMargin;}
设置{rightMargin=value;}
}
私人int topMargin=10;
公共int TopMargin
{
获取{返回topMargin;}
设置{topMargin=value;}
}
私人保证金=10;
公共边际
{
获取{return bottomMargin;}
设置{bottomMargin=value;}
}
私有int字符间距=2;
公共int字符间间隙
{
获取{return interCharacterGap;}
设置{interCharacterGap=value;}
}
私有宽度=2;
公共宽度
{
获取{return wideWidth;}
设置{wideWidth=value;}
}
私有宽度=1;
公共宽度
{
获取{返回窄宽度;}
设置{窄带宽度=值;}
}
私有字体字体=新字体(FontFamily.GenericSansSerif,12);
公共字体
{
获取{return font;}
设置{font=value;}
}
私有int-code-totextgapheight=10;
公共内部条形码TotextGapheight
{
获取{return codeToTextGapHeight;}
设置{codeToTextGapHeight=value;}
}
}
公共类代码39
{
#区域静态初始化
静态字典代码;
静态代码39()
{
对象[][]字符=新对象[][]
{
新对象[]{0',n n},
新对象[]{'1',“w n w”},
新对象[]{'2',“n w”},
新对象[]{'3',“w n”},
新对象[]{'4',“n w”},
新对象[]{'5',“w n”},
新对象[]{'6',“n w n”},
新对象[]{'7',“n w”},
新对象[]{'8',“w n”},
新对象[]{'9',“n w n”},
新对象[]{'A',“w n w”},
新对象[]{B',n w n w},
新对象[]{C',w n},
新对象[]{'D',“n w”},
新对象[]{E',w n},
新对象[]{F',n w n},
新对象[]{'G',“n w”},
新对象[]{'H',“w n”},
新对象[]{'I',“n w n”},
新对象[]{'J',“n n”},
新对象[]{K',w n w},
新对象[]{'L',“n w”},
新对象[]{M',“w n w n”},
新对象[]{'N',“nw”},
新对象[]{O',w n},
新对象[]{'P',“n w n”},
新对象[]{'Q',“n w w”},
新对象[]{'R',“w n”},
新对象[]{'S',“n w n”},
新对象[]{T',“n w n”},
新对象[]{U',w w},
新对象[]{'V',“n w n w”},
新对象[]{W',W n},
新对象[]{'X',“n w n w”},
新对象[]{'Y',“w n”},
新对象[]{'Z',“n w n”},
新对象[]{'-',n w n w},
新对象[]{.',“w n”},
新对象[]{“”,“n w n”},
新对象[]{'*',n w n},
新对象[]{'$,“n w n”},
新对象[]{'/',n w n},
新对象[]{'+',n w n},
新对象[]{“%”,“n”}
};
代码=新字典();
foreach(对象[]c,字符)
codes.Add((char)c[0],Pattern.Parse((string)c[1]);
}
#端区
专用静态笔=新笔(颜色为黑色);
私人静态画笔=画笔。黑色;
私有字符串码;
私人密码设置;
公共代码39(字符串代码)
:此(代码,新代码39设置())
{
}
公共代码39(字符串代码、代码39设置)
{
foreach(代码中的字符c)
如果(!code.ContainsKey(c))
抛出新ArgumentException(“指定代码中遇到无效字符”);
如果(!code.StartsWith(“*”))
code=“*”+代码;
如果(!code.EndsWith(“*”)
byte[] bytes;
using (var stream = new MemoryStream())
{
    Code39 code = new Code39("10090");
    code.Paint().Save(stream, ImageFormat.Png);
    bytes = stream.ToArray();
}
Code39 code = new Code39("10090");
var s = new MemoryStream();
code.Paint().Save(s, ImageFormat.Png);
// you can then get the array with ToArray();
var arr = s.ToArray();
MemoryStream ms = new MemoryStream();
// Save to memory using the Jpeg format
code.Paint().Save (ms, ImageFormat.Jpeg);

// read to end
byte[] bmpBytes = ms.GetBuffer();
bmp.Dispose();
ms.Close();