亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#生成Code39條形碼而非條形碼字體的方法

2020-01-24 01:34:44
字體:
來源:轉載
供稿:網友

由于Code39編譯簡單、能夠對任意長度的數據進行編碼、支持設備比較廣泛所以被廣泛的采用,下面通過文字說明和代碼分析給大家介紹下C#生成Code39條形碼而非條形碼字體的方法。

能夠對任意長度的數據進行編碼。其局限在于印刷品的長度和條碼閱讀器的識別范圍。
支持設備廣泛。目前幾乎所有的條形碼閱讀設備都能閱讀Code39碼,打印機也是同樣情況。
編制簡單。簡單的開發技術就能快速生成相應的編碼圖像。
一般Code39碼由5條線和分開它們的4條縫隙共9個元素構成。線和縫隙有寬窄之分,而且無論線還是縫隙僅有3個比其他的元素要寬一定比例。39碼因此得名
Code39條形碼規則

  1、 每五條線表示一個字符;
  2、 粗線表示1,細線表示0;
  3、 線條間的間隙寬的表示1,窄的表示0;
  4、 五條線加上它們之間的四條間隙就是九位二進制編碼,而且這九位中必定有三位是1,所以稱為39碼;
  5、 條形碼的首尾各一個 * 標識開始和結束。
Code 39只接受如下43個有效輸入字符:
  1、26個大寫字母(A - Z),
  2、十個數字(0 - 9),
  3、連接號(-),句號(.),空格,美圓符號($),斜扛(/),加號(+)以及百分號(%)。
     4、其余的輸入將被忽略。
  5、code39通常情況下不需要校驗碼。但是對於精確度要求高的應用,需要在code39條形碼後面增加一個校驗碼。
條形碼的生成網上也有很多庫文件,做的特別好的都是商業授權。一維碼二維碼在.net開源項目中的生成讀取比較知名的有:Zxing.net(http://zxingnet.codeplex.com/)、BarcodeLib等
但有些時候開源軟件所實現的并不滿足當下的需求,所以還要做一些其他嘗試。效果如下圖:


 代碼分享:

/// <summary> /// Code39一維碼生成類 /// http://www.cnblogs.com/bluescreen/p/4689351.html /// </summary> public class CSharpCode39 {  #region 數據碼  private byte[,] c39_bp = new byte[,] {    { 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x30 }, { 0x31, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x32, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x33, 0x31, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30 }, { 0x34, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x31 }, { 0x35, 0x31, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 0x36, 0x30, 0x30, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 0x37, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31 }, { 0x38, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x39, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x41, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31 }, { 0x42, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31 }, { 0x43, 0x31, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30 }, { 0x44, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x31 }, { 0x45, 0x31, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30 }, { 70, 0x30, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30 },    { 0x47, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x31 }, { 0x48, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30 }, { 0x49, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30 }, { 0x4a, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x30, 0x30 }, { 0x4b, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31 }, { 0x4c, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31 }, { 0x4d, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30 }, { 0x4e, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x31 }, { 0x4f, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30 }, { 80, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30 }, { 0x51, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31 }, { 0x52, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30 }, { 0x53, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30 }, { 0x54, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30 }, { 0x55, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x56, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31 },    { 0x57, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 }, { 0x58, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31 }, { 0x59, 0x31, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 90, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 0x2d, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31 }, { 0x2e, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x20, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x2a, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30 }, { 0x24, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30 }, { 0x2f, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30 }, { 0x2b, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30 }, { 0x25, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30 }   };  //code39合法字符集 [0-9A-Z+-*/%. ] 共43個  private byte[] c39_cw = new byte[] {    0x30, 0x31, 50, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 70,    0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 80, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,    0x57, 0x58, 0x59, 90, 0x2d, 0x2e, 0x20, 0x24, 0x2f, 0x2b, 0x25   };  private byte[,] c39_ex = new byte[,] {    { 1, 0x24, 0x41 }, { 2, 0x24, 0x42 }, { 3, 0x24, 0x43 }, { 4, 0x24, 0x44 }, { 5, 0x24, 0x45 }, { 6, 0x24, 70 }, { 7, 0x24, 0x47 }, { 8, 0x24, 0x48 }, { 9, 0x24, 0x49 }, { 10, 0x24, 0x4a }, { 11, 0x24, 0x4b }, { 12, 0x24, 0x4c }, { 13, 0x24, 0x4d }, { 14, 0x24, 0x4e }, { 15, 0x24, 0x4f }, { 0x10, 0x24, 80 },    { 0x11, 0x24, 0x51 }, { 0x12, 0x24, 0x52 }, { 0x13, 0x24, 0x53 }, { 20, 0x24, 0x54 }, { 0x15, 0x24, 0x55 }, { 0x16, 0x24, 0x56 }, { 0x17, 0x24, 0x57 }, { 0x18, 0x24, 0x58 }, { 0x19, 0x24, 0x59 }, { 0x1a, 0x24, 90 }, { 0x1b, 0x25, 0x41 }, { 0x1c, 0x25, 0x42 }, { 0x1d, 0x25, 0x43 }, { 30, 0x25, 0x44 }, { 0x1f, 0x25, 0x45 }, { 0x3b, 0x25, 70 },    { 60, 0x25, 0x47 }, { 0x3d, 0x25, 0x48 }, { 0x3e, 0x25, 0x49 }, { 0x3f, 0x25, 0x4a }, { 0x5b, 0x25, 0x4b }, { 0x5c, 0x25, 0x4c }, { 0x5d, 0x25, 0x4d }, { 0x5e, 0x25, 0x4e }, { 0x5f, 0x25, 0x4f }, { 0x7b, 0x25, 80 }, { 0x7c, 0x25, 0x51 }, { 0x7d, 0x25, 0x52 }, { 0x7e, 0x25, 0x53 }, { 0x7f, 0x25, 0x54 }, { 0, 0x25, 0x55 }, { 0x40, 0x25, 0x56 },    { 0x60, 0x25, 0x57 }, { 0x21, 0x2f, 0x41 }, { 0x22, 0x2f, 0x42 }, { 0x23, 0x2f, 0x43 }, { 0x26, 0x2f, 70 }, { 0x27, 0x2f, 0x47 }, { 40, 0x2f, 0x48 }, { 0x29, 0x2f, 0x49 }, { 0x2a, 0x2f, 0x4a }, { 0x2c, 0x2f, 0x4c }, { 0x3a, 0x2f, 90 }, { 0x61, 0x2b, 0x41 }, { 0x62, 0x2b, 0x42 }, { 0x63, 0x2b, 0x43 }, { 100, 0x2b, 0x44 }, { 0x65, 0x2b, 0x45 },    { 0x66, 0x2b, 70 }, { 0x67, 0x2b, 0x47 }, { 0x68, 0x2b, 0x48 }, { 0x69, 0x2b, 0x49 }, { 0x6a, 0x2b, 0x4a }, { 0x6b, 0x2b, 0x4b }, { 0x6c, 0x2b, 0x4c }, { 0x6d, 0x2b, 0x4d }, { 110, 0x2b, 0x4e }, { 0x6f, 0x2b, 0x4f }, { 0x70, 0x2b, 80 }, { 0x71, 0x2b, 0x51 }, { 0x72, 0x2b, 0x52 }, { 0x73, 0x2b, 0x53 }, { 0x74, 0x2b, 0x54 }, { 0x75, 0x2b, 0x55 },    { 0x76, 0x2b, 0x56 }, { 0x77, 0x2b, 0x57 }, { 120, 0x2b, 0x58 }, { 0x79, 0x2b, 0x59 }, { 0x7a, 0x2b, 90 }   };  #endregion  #region 字段和屬性  private bool _checksum;  private string _dataToEncode;  private bool _humanReadable;  private string _humanReadableFont;  private float _humanReadableSize;  private float _marginX;  private float _marginY;  private float _moduleHeight;  private float _moduleWidth;  private float _ratio;  private float _reduction;  private Color _codeBarColor = Color.Black;  private bool _isDisplayCheckCode;  private string _checkData;  private bool _isDisplayStartStopSign;  /// <summary>  /// 是否檢查效驗  /// </summary>  public bool Checksum  {   get   {    return _checksum;   }   set   {    _checksum = value;   }  }  /// <summary>  /// 要進行編碼的數據  /// </summary>  public string DataToEncode  {   get   {    return _dataToEncode;   }   set   {    _dataToEncode = value;   }  }  /// <summary>  /// 是否顯示文本內容  /// </summary>  public bool HumanReadable  {   get   {    return _humanReadable;   }   set   {    _humanReadable = value;   }  }  /// <summary>  /// 用于顯示文本內容的字體  /// </summary>  public string HumanReadableFont  {   get   {    return _humanReadableFont;   }   set   {    _humanReadableFont = value;   }  }  /// <summary>  /// 用于顯示文本內容文字的代大小   /// </summary>  public float HumanReadableSize  {   get   {    return _humanReadableSize;   }   set   {    _humanReadableSize = value;   }  }  /// <summary>  /// 水平方向邊距  /// 水平方向建議盡量留白  /// 如果沒有留白同時模塊寬度較小可能會造成無法識別  /// </summary>  public float MarginX  {   get   {    return _marginX;   }   set   {    _marginX = value;   }  }  /// <summary>  /// 垂直方向邊距  /// </summary>  public float MarginY  {   get   {    return _marginY;   }   set   {    _marginY = value;   }  }  /// <summary>  /// 模塊高度(mm)  /// </summary>  public float ModuleHeight  {   get   {    return _moduleHeight;   }   set   {    _moduleHeight = value;   }  }  /// <summary>  /// 模塊寬度(mm)  /// 模塊寬度不應低于0.2646f  /// 模塊寬度過低會造成數據丟失因而讀不出數據或者會誤讀  /// </summary>  public float ModuleWidth  {   get   {    return _moduleWidth;   }   set   {    _moduleWidth = value;   }  }  /// <summary>  /// 放大比率   /// </summary>  public float Ratio  {   get   {    return _ratio;   }   set   {    _ratio = value;   }  }  /// <summary>  /// 縮小  /// </summary>  public float Reduction  {   get   {    return _reduction;   }   set   {    _reduction = value;   }  }  /// <summary>  /// 設置條形碼的顏色  /// </summary>  public Color CodeBarColor  {   get   {    return _codeBarColor;   }   set   {    _codeBarColor = value;   }  }  /// <summary>  /// 是否顯示效驗碼  /// 此屬性要在Checksum屬性為true的情況下有用  /// </summary>  public bool IsDisplayCheckCode  {   get { return this._isDisplayCheckCode; }   set { this._isDisplayCheckCode = value; }  }  /// <summary>  /// 供人識別是否顯示起止符  /// </summary>  public bool IsDisplayStartStopSign  {   get { return this._isDisplayStartStopSign; }   set { this._isDisplayStartStopSign = value; }  }  #endregion  /// <summary>  /// 默認構造函數  /// 初始化  /// </summary>  public CSharpCode39()  {   this.initData();  }  public CSharpCode39(string dataToEncode)  {   this.initData();   this._dataToEncode = dataToEncode;  }  /// <summary>  /// 默認構造函數  /// 初始化數據  /// </summary>  private void initData()  {   this._humanReadableFont = "Arial";   this._humanReadableSize = 10f;   this._codeBarColor = Color.Black;   this._moduleHeight = 15f;//模塊高度毫米   this._moduleWidth = 0.35f;//模塊寬度毫米   this._ratio = 3f;   this._marginX =2;   this._marginY =2;   this._checksum = true;   this._isDisplayCheckCode = false;   this._isDisplayStartStopSign = false;  }  private char[] _bitpattern_c39(string rawdata, ref int finalLength)  {   //0x27 39    //0x50 80   if ((rawdata.Length == 0) || (rawdata.Length > 0x50 /*0x27*/))   {    return null;   }   for (int i = 0; i < rawdata.Length; i++)   {    if ((rawdata[i] == '/0') || (rawdata[i] > '/x007f'))    {     return null;    }   }   byte[] data = processTilde(rawdata);   if (data.Length == 0)   {    return null;   }   byte[] buffer2 = this.processExtended(data);   if ((buffer2.Length == 0) || (buffer2.Length > /*40*/80))   {    return null;   }   finalLength = this._checksum ? ((buffer2.Length + 2) + 1) : (buffer2.Length + 2);   return this.getPattern_c39(buffer2);  }  /// <summary>  /// 計算效驗值  /// </summary>  /// <param name="data"></param>  /// <param name="len"></param>  /// <returns></returns>  private byte _checksum_c39(byte[] data, int len)  {   //0x2b 43   //字符值的總和除以合法字符集的個數43 取余數 余數在合法字符數組中對應的數值就是效驗值   int num2 = 0;   for (int i = 1; i < len; i++)   {    num2 += this.valueFromCharacter(data[i]);   }   return this.c39_cw[num2 % 0x2b];  }  private char[] Code39_bitpattern(string dataToEncode)  {   int finalLength = 0;   return this._bitpattern_c39(dataToEncode, ref finalLength);  }  /// <summary>  /// 獲得Code39條碼圖片  /// </summary>  /// <param name="resolution">DPI</param>  /// <returns></returns>  public Bitmap getBitmapImage(float resolution)  {   return Code39_createCode(resolution);  }  private Bitmap Code39_createCode(float resolution)  {   int num6;   int finalLength = 0;   char[] chArray = this._bitpattern_c39(DataToEncode, ref finalLength);   if (chArray == null)   {    return null;   }   float fontsize = this._humanReadable ? (0.3527778f * this._humanReadableSize) : 0f;   // float num3 = (7f * ModuleWidth) + ((3f * Ratio) * ModuleWidth);   float num3 = (7f * this._moduleWidth) + ((3f * this._ratio) * this._moduleWidth);   float width = (finalLength * num3) + (2f * this._marginX);   float height = (this._moduleHeight + (2f * this._marginY)) + fontsize;   width *= resolution / 25.4f;   height *= resolution / 25.4f;   Bitmap image = new Bitmap((int)width, (int)height, PixelFormat.Format32bppPArgb);   image.SetResolution(resolution, resolution);   //image.SetResolution(300, 300);   Graphics g = Graphics.FromImage(image);   g.Clear(Color.White);   g.PageUnit = GraphicsUnit.Millimeter; //以毫米為度量單位   g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, /*(int)width*/image.Width, /*(int)height*/image.Height));   //new Pen(Color.Black, 2f);   //new SolidBrush(Color.White);   SolidBrush brush = new SolidBrush(Color.Black);   if (resolution < 300f)   {    //g.TextRenderingHint = TextRenderingHint.AntiAlias;    //g.SmoothingMode = SmoothingMode.AntiAlias;    g.CompositingQuality = CompositingQuality.HighQuality;    //g.SmoothingMode = SmoothingMode.HighQuality;    g.InterpolationMode = InterpolationMode.HighQualityBicubic;    g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;   }   float num7 = 0f;   for (num6 = 0; num6 < chArray.Length; num6++)   {    if (chArray[num6] == '0')    {     if ((num6 & 1) != 1)     {      RectangleF rect = new RectangleF(MarginX + num7, MarginY, ModuleWidth, ModuleHeight);      MakeBar(g, rect, Reduction);     }     num7 += 1f * ModuleWidth;    }    else    {     if ((num6 & 1) != 1)     {      RectangleF ef2 = new RectangleF(MarginX + num7, MarginY, Ratio * ModuleWidth, ModuleHeight);      MakeBar(g, ef2, Reduction);     }     num7 += Ratio * ModuleWidth;    }   }   #region 供人識別內容   if (this._humanReadable)   {    #region 保留    /*byte[] buffer2 = processTilde(this._dataToEncode);    int index = 0;    List<byte> arr = new List<byte>();    for (num6 = 0; num6 < buffer2.Length; num6++)    {     //0x20 32  0x7e 126     if ((buffer2[num6] >= 0x20) && (buffer2[num6] <= 0x7e))     {      arr.Add(buffer2[num6]);     }    }    byte[] bytes = new byte[arr.Count];    for (int i = 0; i < arr.Count; i++)    {     bytes[i] = arr[i];    }    index = arr.Count;    //string text = new ASCIIEncoding().GetString(bytes, 0, index);     */     #endregion    string text = this._dataToEncode;    if (this._isDisplayCheckCode&&!string.IsNullOrEmpty(this._checkData)) {     text += this._checkData;    }    if (this._isDisplayStartStopSign)    {     text = "*" + text + "*";    }    Font font = new Font(this._humanReadableFont, this._humanReadableSize);    //g.DrawString(text, font, brush, new PointF(MarginX, MarginY + ModuleHeight));    //新增字符串格式    var drawFormat = new StringFormat { Alignment = StringAlignment.Center };    float inpix = image.Width / resolution;//根據DPi求出 英寸數    float widthmm = inpix * 25.4f; //有每英寸像素求出毫米    //g.DrawString(text, font, Brushes.Black, width / 2, height - 14, drawFormat);    g.DrawString(text, font, /*Brushes.Black*/brush, new PointF(/*MarginX*/(int)(widthmm / 2), MarginY + ModuleHeight + 1), drawFormat);   }   #endregion   return image;  }  /// <summary>  /// 進行圖形填充  /// </summary>  /// <param name="g"></param>  /// <param name="rect"></param>  /// <param name="reduction"></param>  private void MakeBar(Graphics g, RectangleF rect, float reduction)  {   MakeBar(g, rect, reduction,this._codeBarColor);  }  /// <summary>  /// 進行圖形填充  /// </summary>  /// <param name="g"></param>  /// <param name="rect"></param>  /// <param name="reduction"></param>  /// <param name="brushColor"></param>  private void MakeBar(Graphics g, RectangleF rect, float reduction, Color brushColor)  {   float num = rect.Width * (reduction / 200f);   float num2 = rect.Width - (rect.Width * (reduction / 200f));   RectangleF ef = new RectangleF   {    X = rect.X + num,    Y = rect.Y,    Width = num2,    Height = rect.Height   };   SolidBrush brush = new SolidBrush(brushColor);   g.FillRectangle(brush, ef);  }  private char[] getPattern_c39(byte[] data)  { //0x2a 42為*   //int num = 0x27;   int num = 80;   byte[] buffer = new byte[num + 1];   buffer[0] = 0x2a;   int index = 1;   for (int i = 0; i < data.Length; i++)   {    buffer[index] = data[i];    index++;   }   if (Checksum)   {    buffer[index] = this._checksum_c39(buffer, index);    if (_isDisplayCheckCode)    {     this._checkData = ((char)buffer[index]).ToString();    }    index++;   }   buffer[index] = 0x2a;   index++;   char[] chArray = new char[index * 10];   int num5 = 0;   for (int j = 0; j < index; j++)   {    byte c = buffer[j];    int num9 = this.indexFromCharacter(c);    for (int k = 0; k < 9; k++)    {     chArray[num5] = (char)this.c39_bp[num9, k + 1];     num5++;    }    chArray[num5] = '0';    num5++;   }   return chArray;  }  private int indexFromCharacter(byte c)  {   //0x2c==44   for (int i = 0; i < 0x2c; i++)   {    if (this.c39_bp[i, 0] == c)    {     return i;    }   }   return -1;  }  private byte[] processExtended(byte[] data)  {   //0x25 38   //0x4F 79 0x4E 78   //int num = 0x4F;   int num = data.Length - 1;   byte[] sourceArray = new byte[num + 1];   int index = 0;   for (int i = 0; i < data.Length; i++)   {    byte c = data[i];    if (this.valueFromCharacter(c) != -1)    {     sourceArray[index] = c;     index++;    }    else    {     byte num5 = 0;     byte num6 = 0;     if (this.valuesFromExtended(c, ref num5, ref num6))     {      sourceArray[index] = num5;      sourceArray[index + 1] = num6;      index += 2;     }    }   }   byte[] destinationArray = new byte[index];   Array.Copy(sourceArray, destinationArray, index);   return destinationArray;  }  /// <summary>  /// 返回指定字符在code39合法字符數組中對應的索引  /// </summary>  /// <param name="c"></param>  /// <returns></returns>  private int valueFromCharacter(byte c)  {   //c39_cw為數組,保存的為合法的字符集信息[0-9A-Z+-*/%. ] 共43個   //如果存在這個字符就返回c39_cw對應的索引   for (int i = 0; i < /*0x2b*/this.c39_cw.Length; i++)   {    if (this.c39_cw[i] == c)    {     return i;    }   }   return -1;  }  /// <summary>  /// 判斷字符集是否存在Extended  /// </summary>  /// <param name="c"></param>  /// <param name="v1"></param>  /// <param name="v2"></param>  /// <returns></returns>  private bool valuesFromExtended(byte c, ref byte v1, ref byte v2)  {   //0x55 85   for (int i = 0; i < 0x55; i++)   {    if (this.c39_ex[i, 0] == c)    {     v1 = this.c39_ex[i, 1];     v2 = this.c39_ex[i, 2];     return true;    }   }   return false;  }  private byte[] processTilde(string rawdata)  {   byte[] sourceArray = new byte[rawdata.Length];   int index = 0;   for (int i = 0; i < rawdata.Length; i++)   {    if (rawdata[i] != '~')    {     sourceArray[index] = (byte)rawdata[i];     index++;    }    else if ((i + 3) < rawdata.Length)    {     string str = new string(new char[] { rawdata[i + 1], rawdata[i + 2], rawdata[i + 3] });     int num3 = Convert.ToInt32(str, 10);     if ((num3 > 0) && (num3 <= 0xff))     {      sourceArray[index] = (byte)num3;      index++;     }     if (num3 == 0x3e7)     {      sourceArray[index] = 0x86;      index++;     }     i += 3;    }    else    {     sourceArray[index] = (byte)rawdata[i];     index++;    }   }   byte[] destinationArray = new byte[index];   Array.Copy(sourceArray, destinationArray, index);   return destinationArray;  } }

 這個方法是根據DPI以及數據模塊的高寬來確定條碼的實際高寬。模塊的寬度以毫米(mm)來算。類中的getBitmapImage方法的一個參數getBitmapImage為DPI。安卓用戶安裝平時常用的掃碼軟件即可做識別測試。就識別率來說還是可以的,掃描槍絕對是可以掃的出的。同時使用過MessagingToolkit.Barcode進行解碼測試,萬張無一誤讀。

以上內容就是本文的全部內容,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕在线播放| 国产欧美精品日韩| 欧美日韩一区二区精品| 亚洲电影免费观看高清完整版在线观看| 55夜色66夜色国产精品视频| 日本一区二区在线免费播放| 日韩乱码在线视频| 亚洲综合色av| 亚洲成人a级网| 亚洲图片在区色| 亚洲精品国精品久久99热一| 免费不卡在线观看av| 国产精品久久久久久久美男| 亚洲国产中文字幕在线观看| 亚洲高清在线观看| 国内精品小视频在线观看| 亚洲国产日韩欧美在线动漫| 欧美做爰性生交视频| 久久亚洲综合国产精品99麻豆精品福利| 久久影院在线观看| 精品欧美国产一区二区三区| 久久国产精品视频| 国模视频一区二区| 国产精品久久久久久久久久久新郎| 国产婷婷成人久久av免费高清| 色综合久久中文字幕综合网小说| 欧美亚洲视频一区二区| 51精品国产黑色丝袜高跟鞋| 久热国产精品视频| 国产精品久久婷婷六月丁香| 亚洲免费视频观看| 日韩av理论片| 九九热r在线视频精品| 日韩专区在线播放| 欧美第一页在线| 欧美在线中文字幕| 国产精品美女免费看| 亚洲精品美女久久久| 激情av一区二区| 国产精品亚发布| 一区二区三区四区精品| 欧美在线视频导航| 欧洲精品毛片网站| 国产精品电影在线观看| 日韩精品视频在线| 亚洲免费精彩视频| 欧美性高潮在线| 国产精品黄视频| 中文字幕一区电影| 国产欧美一区二区三区在线看| 久久国产加勒比精品无码| 国产精品美女免费| 国产一区二区三区中文| 欧美大片在线看免费观看| 国产精品网站入口| 俺去了亚洲欧美日韩| 少妇激情综合网| 国产欧美久久一区二区| 欧美日韩精品中文字幕| 国产剧情久久久久久| 亚洲奶大毛多的老太婆| 国内精品小视频| 91久久精品在线| 欧美一区二区影院| 日韩在线中文字幕| 隔壁老王国产在线精品| 51精品在线观看| 亚洲精品91美女久久久久久久| 日韩人体视频一二区| 亚洲视频欧美视频| 色小说视频一区| 欧美巨大黑人极品精男| 日本精品免费一区二区三区| 日韩中文视频免费在线观看| 91成人精品网站| 亚洲欧美日韩天堂一区二区| 亚洲人成在线一二| 伊人青青综合网站| 51视频国产精品一区二区| 国产视频久久网| 国产精品自拍偷拍视频| 国产精品久久二区| 亚洲黄页视频免费观看| 98精品在线视频| 91精品视频免费观看| 久久久噜噜噜久久| 久久的精品视频| 欧美成人黑人xx视频免费观看| 欧美日韩在线免费观看| 亚洲永久免费观看| 国产精品揄拍一区二区| 欧美激情亚洲精品| 久久久久久91香蕉国产| 欧美大片欧美激情性色a∨久久| 国产精品一区二区3区| 国产精品久久久av| 91亚洲国产精品| 亚洲资源在线看| 欧美激情第99页| 久久九九有精品国产23| 国产成人福利夜色影视| 久久人人爽亚洲精品天堂| 久久久久北条麻妃免费看| 亚洲福利小视频| 亚洲已满18点击进入在线看片| 欧美夜福利tv在线| 亚洲综合中文字幕在线| 久久成人精品一区二区三区| 亚洲欧美国产va在线影院| 欧美精品999| 欧美中文字幕在线观看| 成人午夜在线影院| 成人免费在线视频网站| 国产欧美日韩免费看aⅴ视频| 91干在线观看| 精品女同一区二区三区在线播放| …久久精品99久久香蕉国产| 久久久久久久久久婷婷| 国产偷国产偷亚洲清高网站| 久久影视电视剧免费网站清宫辞电视| 欧美亚洲国产精品| 亚洲欧美日韩国产中文专区| 欧美日韩国产中字| 精品久久香蕉国产线看观看亚洲| 人人做人人澡人人爽欧美| 97碰在线观看| 国产成人一区三区| 国产综合久久久久| 亚洲国产精品999| 久久成人18免费网站| 久久久精品电影| 狠狠操狠狠色综合网| 亚洲综合中文字幕68页| 日韩免费在线看| 亚洲精品电影在线观看| 亚洲精品丝袜日韩| 亚洲性av网站| 国产精品视频在线播放| 日韩av网站电影| 国产91色在线| 亚洲精品电影网站| 久久免费视频在线观看| 国产91|九色| 欧美黑人巨大精品一区二区| 久久亚洲精品一区| 欧美激情视频一区| 欧美三级欧美成人高清www| 97国产精品视频| 日韩av大片免费看| 亚洲国产精品va在线观看黑人| 国产精品美乳一区二区免费| 国产精品视频资源| 欧美精品福利视频| 九九久久久久99精品| 日韩精品在线免费观看| 欧美视频13p| 最近2019中文字幕第三页视频| 国产精品91久久| 欧美极度另类性三渗透| 成人情趣片在线观看免费| 日本韩国欧美精品大片卡二| 亚洲成人网在线观看| 亚洲精品免费在线视频| 亚洲男人的天堂在线播放|