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();