绘制条形码

来源:互联网 发布:modbus tcp c编程实例 编辑:程序博客网 时间:2024/05/01 04:01

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace CjLibrary
{


    public class CjBarCode39 : CjBarCode
    {

        private double wideToNarrowRatio = 3.0;

        public double WideToNarrowRatio
        {
            get { return wideToNarrowRatio; }
            set { wideToNarrowRatio = value; }
        }
        private int  weight = 1;

        public int Weight
        {
            get { return weight; }
            set { weight = value; }
        }
        /// <summary>
        /// 39条码中能使用的字符
        /// </summary>
        private String alphabet39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";

        private String[] coded39Char =
  {
   /* 0 */ "001100100",
   /* 1 */ "100010100",
   /* 2 */ "010010100",
   /* 3 */ "110000100",
   /* 4 */ "001010100",
   /* 5 */ "101000100",
   /* 6 */ "011000100",
   /* 7 */ "000110100",
   /* 8 */ "100100100",
   /* 9 */ "010100100",
   /* A */ "100010010",
   /* B */ "010010010",
   /* C */ "110000010",
   /* D */ "001010010",
   /* E */ "101000010",
   /* F */ "011000010",
   /* G */ "000110010",
   /* H */ "100100010",
   /* I */ "010100010",
   /* J */ "001100010",
   /* K */ "100010001",
   /* L */ "010010001",
   /* M */ "110000001",
   /* N */ "001010001",
   /* O */ "101000001",
   /* P */ "011000001",
   /* Q */ "000110001",
   /* R */ "100100001",
   /* S */ "010100001",
   /* T */ "001100001",
   /* U */ "100011000",
   /* V */ "010011000",
   /* W */ "110001000",
   /* X */ "001011000",
   /* Y */ "101001000",
   /* Z */ "011001000",
   /* - */ "000111000",
   /* . */ "110000100",
   /*' '*/ "011000100",
   /* $ */ "010101000",
   /* / */ "010100010",
   /* + */ "010001010",
   /* % */ "100101000",
   /* * */ "001101000"
  };
        public CjBarCode39()
        {
            BarcodeText = "1234";
        }
        /// <summary>
        /// 为了使得条形码居中先要计算条形码的Left和Top坐标
        /// </summary>
        /// <returns></returns>
        private int getX()
        {
            int currentLocation = 0;
            string strBarcode = "*" + BarcodeText.ToUpper() + "*";
            for (int i = 0; i < strBarcode.Length; i++)
            {
               string  encodedString = coded39Char[alphabet39.IndexOf(strBarcode[i])];

                for (int j = 0; j < 5; j++)
                {

                    if (encodedString[j] == '0')
                    {
                        currentLocation += weight;
                    }
                    else
                    {
                        currentLocation += 3 * weight;
                    }
                    //画第6个     5   白条
                    if ((j + 5) < 9)
                    {
                        if (encodedString[j + 5] == '0')
                        {
                            currentLocation += weight;
                        }
                        else
                        {
                            currentLocation += 3 * weight;
                        }
                    }
                }
                currentLocation += weight;
            }
            return currentLocation;
        }
        /// <summary>
        /// 显示条形码
        /// </summary>
        /// <param name="g">GDI+</param>
        /// <param name="rects">画图区域</param>
        protected override void DrawBitmap(Graphics g, Rectangle rects)
        {
            if (BarcodeText == "") return;
            string strBarcode = "*" + BarcodeText.ToUpper() + "*";
            //string strBarcode =  BarcodeText.ToUpper() ;
            String encodedString = "";
            int currentLocation =(rects.Width- getX())/2;
            SolidBrush blackBrush = new SolidBrush(Color.Black);
            SolidBrush witeBrush = new SolidBrush(Color.White);           
            int yTop = rects.Y;
            for (int i = 0; i < strBarcode.Length; i++)
            {
                encodedString = coded39Char[alphabet39.IndexOf(strBarcode[i])];

                for (int j = 0; j < 5; j++)
                {

                    if (encodedString[j] == '0')
                    {
                        Rectangle re1 = new Rectangle(currentLocation, yTop, weight, BarcodeHeight);
                        g.FillRectangle(blackBrush, re1);
                        currentLocation += weight;
                    }
                    else
                    {
                        Rectangle re1 = new Rectangle(currentLocation, yTop, 3 * weight, BarcodeHeight);
                        g.FillRectangle(blackBrush, re1);
                        currentLocation += 3 * weight;
                    }
                    //画第6个     5   白条
                    if ((j + 5) < 9)
                    {
                        if (encodedString[j + 5] == '0')
                        {
                            Rectangle re1 = new Rectangle(currentLocation, yTop, weight, BarcodeHeight);
                            g.FillRectangle(witeBrush, re1);
                            currentLocation += weight;
                        }
                        else
                        {
                            Rectangle re1 = new Rectangle(currentLocation, yTop, 3 * weight, BarcodeHeight);
                            g.FillRectangle(witeBrush, re1);
                            currentLocation += 3 * weight;
                        }
                    }
                }
                Rectangle re2 = new Rectangle(currentLocation, yTop, weight, BarcodeHeight);
 

原创粉丝点击