不使用字体来绘制CODE39码
效果图
使用
- MyImage.BandCode.Code39 _Code39 =
new
MyImage.BandCode.Code39(); - _Code39.Height = 120;
- _Code39.Magnify = 1;
- _Code39.ViewFont =
new
Font(
"宋体"
, 20); - pictureBox1.Image = _Code39.GetCodeImage(
"123ABC4567890"
, MyImage.BandCode.Code39.Code39Model.Code39Normal,
true
); - pictureBox1.Image.Save(@
"C:/1.bmp"
);
全部代码
- using
System; - using
System.Collections; - using
System.ComponentModel; - using
System.Drawing; - using
System.Data; - namespace
MyImage.BandCode - {
-
/// <summary> -
/// Code39编码 -
/// zgke@sina.com -
/// qq:116149 -
/// </summary> -
public
class
Code39 - {
-
private
Hashtable m_Code39 =
new
Hashtable(); -
private
byte
m_Magnify = 0; -
/// <summary> -
/// 放大倍数 -
/// </summary> -
public
byte
Magnify {
get
{
return
m_Magnify; }
set
{m_Magnify=value;} } -
private
int
m_Height = 40; -
/// <summary> -
/// 图形高 -
/// </summary> -
public
int
Height {
get
{
return
m_Height; }
set
{ m_Height = value; } } -
private
Font m_ViewFont =
null
; -
/// <summary> -
/// 字体大小 -
/// </summary> -
public
Font ViewFont {
get
{
return
m_ViewFont; }
set
{ m_ViewFont = value; } } -
public
Code39() - {
- m_Code39.Add(
"A"
,
"1101010010110"
); - m_Code39.Add(
"B"
,
"1011010010110"
); - m_Code39.Add(
"C"
,
"1101101001010"
); - m_Code39.Add(
"D"
,
"1010110010110"
); - m_Code39.Add(
"E"
,
"1101011001010"
); - m_Code39.Add(
"F"
,
"1011011001010"
); - m_Code39.Add(
"G"
,
"1010100110110"
); - m_Code39.Add(
"H"
,
"1101010011010"
); - m_Code39.Add(
"I"
,
"1011010011010"
); - m_Code39.Add(
"J"
,
"1010110011010"
); - m_Code39.Add(
"K"
,
"1101010100110"
); - m_Code39.Add(
"L"
,
"1011010100110"
); - m_Code39.Add(
"M"
,
"1101101010010"
); - m_Code39.Add(
"N"
,
"1010110100110"
); - m_Code39.Add(
"O"
,
"1101011010010"
); - m_Code39.Add(
"P"
,
"1011011010010"
); - m_Code39.Add(
"Q"
,
"1010101100110"
); - m_Code39.Add(
"R"
,
"1101010110010"
); - m_Code39.Add(
"S"
,
"1011010110010"
); - m_Code39.Add(
"T"
,
"1010110110010"
); - m_Code39.Add(
"U"
,
"1100101010110"
); - m_Code39.Add(
"V"
,
"1001101010110"
); - m_Code39.Add(
"W"
,
"1100110101010"
); - m_Code39.Add(
"X"
,
"1001011010110"
); - m_Code39.Add(
"Y"
,
"1100101101010"
); - m_Code39.Add(
"Z"
,
"1001101101010"
); - m_Code39.Add(
"0"
,
"1010011011010"
); - m_Code39.Add(
"1"
,
"1101001010110"
); - m_Code39.Add(
"2"
,
"1011001010110"
); - m_Code39.Add(
"3"
,
"1101100101010"
); - m_Code39.Add(
"4"
,
"1010011010110"
); - m_Code39.Add(
"5"
,
"1101001101010"
); - m_Code39.Add(
"6"
,
"1011001101010"
); - m_Code39.Add(
"7"
,
"1010010110110"
); - m_Code39.Add(
"8"
,
"1101001011010"
); - m_Code39.Add(
"9"
,
"1011001011010"
); - m_Code39.Add(
"+"
,
"1001010010010"
); - m_Code39.Add(
"-"
,
"1001010110110"
); - m_Code39.Add(
"*"
,
"1001011011010"
); - m_Code39.Add(
"/"
,
"1001001010010"
); - m_Code39.Add(
"%"
,
"1010010010010"
); - m_Code39.Add(
"$"
,
"1001001001010"
); - m_Code39.Add(
"."
,
"1100101011010"
); - m_Code39.Add(
" "
,
"1001101011010"
); - }
-
public
enum
Code39Model - {
-
/// <summary> -
/// 基本类别 1234567890ABC -
/// </summary> - Code39Normal,
-
/// <summary> -
/// 全ASCII方式 +A+B 来表示小写 -
/// </summary> - Code39FullAscII
- }
-
/// <summary> -
/// 获得条码图形 -
/// </summary> -
/// <param name="p_Text">文字信息</param> -
/// <param name="p_Model">类别</param> -
/// <param name="p_StarChar">是否增加前后*号</param> -
/// <returns>图形</returns> -
public
Bitmap GetCodeImage(
string
p_Text, Code39Model p_Model,
bool
p_StarChar) - {
-
string
_ValueText =
""
; -
string
_CodeText =
""
; -
char
[] _ValueChar =
null
; -
switch
(p_Model) - {
-
case
Code39Model.Code39Normal: - _ValueText = p_Text.ToUpper();
-
break
; -
default
: - _ValueChar=p_Text.ToCharArray();
-
for
(
int
i = 0; i != _ValueChar.Length; i++) - {
-
if
((
int
)_ValueChar[i] >= 97 && (
int
)_ValueChar[i] <= 122) - {
- _ValueText +=
"+"
+ _ValueChar[i].ToString().ToUpper(); - }
-
else - {
- _ValueText += _ValueChar[i].ToString();
- }
- }
-
break
; - }
- _ValueChar = _ValueText.ToCharArray();
-
if
(p_StarChar ==
true
) _CodeText += m_Code39[
"*"
]; -
for
(
int
i = 0; i != _ValueChar.Length; i++) - {
-
if
(p_StarChar==
true
&& _ValueChar[i] ==
'*'
)
throw
new
Exception(
"带有起始符号不能出现*"
); -
object
_CharCode=m_Code39[_ValueChar[i].ToString()]; -
if
(_CharCode ==
null
)
throw
new
Exception(
"不可用的字符"
+ _ValueChar[i].ToString()); - _CodeText += _CharCode.ToString();
- }
-
if
(p_StarChar ==
true
) _CodeText += m_Code39[
"*"
]; - Bitmap _CodeBmp = GetImage(_CodeText);
- GetViewImage(_CodeBmp, p_Text);
-
return
_CodeBmp; - }
-
/// <summary> -
/// 绘制编码图形 -
/// </summary> -
/// <param name="p_Text">编码</param> -
/// <returns>图形</returns> -
private
Bitmap GetImage(
string
p_Text) - {
-
char
[] _Value = p_Text.ToCharArray(); -
//宽 == 需要绘制的数量*放大倍数 + 两个字的宽 - Bitmap _CodeImage =
new
Bitmap(_Value.Length * ((
int
)m_Magnify + 1) , (
int
)m_Height); - Graphics _Garphics = Graphics.FromImage(_CodeImage);
- _Garphics.FillRectangle(Brushes.White,
new
Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height)); -
int
_LenEx = 0; -
for
(
int
i = 0; i != _Value.Length; i++) - {
-
int
_DrawWidth = m_Magnify + 1; -
if
(_Value[i] ==
'1'
) - {
- _Garphics.FillRectangle(Brushes.Black,
new
Rectangle(_LenEx, 0, _DrawWidth, m_Height)); - }
-
else - {
- _Garphics.FillRectangle(Brushes.White,
new
Rectangle(_LenEx, 0, _DrawWidth, m_Height)); - }
- _LenEx += _DrawWidth;
- }
- _Garphics.Dispose();
-
return
_CodeImage; - }
-
/// <summary> -
/// 绘制文字 -
/// </summary> -
/// <param name="p_CodeImage">图形</param> -
/// <param name="p_Text">文字</param> -
private
void
GetViewImage(Bitmap p_CodeImage,
string
p_Text) - {
-
if
(m_ViewFont ==
null
)
return
; - Graphics _Graphics = Graphics.FromImage(p_CodeImage);
- SizeF _FontSize = _Graphics.MeasureString(p_Text, m_ViewFont);
-
if
(_FontSize.Width > p_CodeImage.Width || _FontSize.Height > p_CodeImage.Height - 20) - {
- _Graphics.Dispose();
-
return
; - }
-
int
_StarHeight = p_CodeImage.Height - (
int
)_FontSize.Height; - _Graphics.FillRectangle(Brushes.White,
new
Rectangle(0, _StarHeight, p_CodeImage.Width,(
int
)_FontSize.Height)); -
int
_StarWidth = (p_CodeImage.Width - (
int
)_FontSize.Width) / 2; - _Graphics.DrawString(p_Text, m_ViewFont, Brushes.Black, _StarWidth, _StarHeight);
- _Graphics.Dispose();
- }
- }
- }
http://blog.csdn.net/zgke/archive/2008/12/12/3503845.aspx