zoukankan      html  css  js  c++  java
  • 条形码(barcode)code128生成代码

    条形码(barcode)code128生成代码 很简单 多些这位兄弟https://bbs.csdn.net/topics/350125614

    下面是我的DEMO 直接放到VS2005下面编译即可

    #include <ctime>
    #include <string>
    #include <map>
    #include <vector>
    using namespace std;
    #include <windows.h>
    #include <atlimage.h>
    map<int,string> g_codemap;
    bool FillCodeMap(void);
    bool GetStringCode(char *str, string &strCode);
    bool GetImg(string code,CImage& img);
    HDC Hdc=::GetWindowDC(::GetDesktopWindow());
    int main(int argc, char **argv)
    { 
        //"038000356216"
        FillCodeMap();
        string code;
        GetStringCode("038000356216",code);
        printf("cod:
    %s
    ",code.c_str());
        CImage img;
        GetImg(code,img);
        img.Save(L"d:/barcode-demo.jpg");//这里基本就OK了 下面是直接显示到屏幕的代码
    
        CImage demo;
        {
            demo.Create(img.GetWidth()+400,img.GetHeight()+400,24);
            HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
            RECT rc;
            rc.left=0;
            rc.right=demo.GetWidth();;
            rc.top=0;
            rc.bottom=demo.GetHeight();
            HDC hdc=demo.GetDC();
            ::FillRect(hdc,&rc,white);
            img.BitBlt(hdc,200,200);
            demo.ReleaseDC();
        }
    
        while(1)
        {
            demo.BitBlt(Hdc,100,100);
            ::Sleep(50);
        }
        return 0;
    }
    
    bool GetImg(string code,CImage& img)
    {
        if(code.empty())return false;
        if(!img.IsNull())img.Destroy();
    
        int perWid=1;
        int externWid=0;
        int hei=76+externWid*2;
        int wid=code.length()*perWid+externWid*2;
        img.Create(wid,hei,24);
        HDC hdc=img.GetDC();
        HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
        HBRUSH black=(HBRUSH)GetStockObject(BLACK_BRUSH);
        RECT rc;
        rc.left=rc.top=0;
        rc.right=img.GetWidth();
        rc.bottom=img.GetHeight();
        ::FillRect(hdc,&rc,white);
    
        rc.left=externWid;
        rc.right=rc.left+perWid;
        rc.top=externWid;
        rc.bottom=img.GetHeight()-externWid;
        const char* p=code.c_str();
        for(int i=0;i<code.length();++i)
        {
            ::FillRect(hdc,&rc,p[i]=='0'?white:black);
            rc.left+=perWid;
            rc.right+=perWid;
        }
        img.ReleaseDC();
    }
    bool FillCodeMap(void)//g_codemap是个map,这我不用讲了,找个地方定义一下,在此处填充
    {
    if(!g_codemap.empty())
    return true;
    
    g_codemap[32]="11011001100";
    g_codemap[33]="11001101100";
    g_codemap[34]="11001100110";
    g_codemap[35]="10010011000";
    g_codemap[36]="10010001100";
    g_codemap[37]="10001001100";
    g_codemap[38]="10011001000";
    g_codemap[39]="10011000100";
    g_codemap[40]="10001100100";
    g_codemap[41]="11001001000";
    g_codemap[42]="11001000100";
    g_codemap[43]="11000100100";
    g_codemap[44]="10110011100";
    g_codemap[45]="10011011100";
    g_codemap[46]="10011001110";
    g_codemap[47]="10111001100";
    g_codemap[48]="10011101100";
    g_codemap[49]="10011100110";
    g_codemap[50]="11001110010";
    g_codemap[51]="11001011100";
    g_codemap[52]="11001001110";
    g_codemap[53]="11011100100";
    g_codemap[54]="11001110100";
    g_codemap[55]="11101101110";
    g_codemap[56]="11101001100";
    g_codemap[57]="11100101100";
    g_codemap[58]="11100100110";
    g_codemap[59]="11101100100";
    g_codemap[60]="11100110100";
    g_codemap[61]="11100110010";
    g_codemap[62]="11011011000";
    g_codemap[63]="11011000110";
    g_codemap[64]="11000110110";
    g_codemap[65]="10100011000";
    g_codemap[66]="10001011000";
    g_codemap[67]="10001000110";
    g_codemap[68]="10110001000";
    g_codemap[69]="10001101000";
    g_codemap[70]="10001100010";
    g_codemap[71]="11010001000";
    g_codemap[72]="11000101000";
    g_codemap[73]="11000100010";
    g_codemap[74]="10110111000";
    g_codemap[75]="10110001110";
    g_codemap[76]="10001101110";
    g_codemap[77]="10111011000";
    g_codemap[78]="10111000110";
    g_codemap[79]="10001110110";
    g_codemap[80]="11101110110";
    g_codemap[81]="11010001110";
    g_codemap[82]="11000101110";
    g_codemap[83]="11011101000";
    g_codemap[84]="11011100010";
    g_codemap[85]="11011101110";
    g_codemap[86]="11101011000";
    g_codemap[87]="11101000110";
    g_codemap[88]="11100010110";
    g_codemap[89]="11101101000";
    g_codemap[90]="11101100010";
    g_codemap[91]="11100011010";
    g_codemap[92]="11101111010";
    g_codemap[93]="11001000010";
    g_codemap[94]="11110001010";
    g_codemap[95]="10100110000";
    g_codemap[96]="10100001100";
    g_codemap[97]="10010110000";
    g_codemap[98]="10010000110";
    g_codemap[99]="10000101100";
    g_codemap[100]="10000100110";
    g_codemap[101]="10110010000";
    g_codemap[102]="10110000100";
    g_codemap[103]="10011010000";
    g_codemap[104]="10011000010";
    g_codemap[105]="10000110100";
    g_codemap[106]="10000110010";
    g_codemap[107]="11000010010";
    g_codemap[108]="11001010000";
    g_codemap[109]="11110111010";
    g_codemap[110]="11000010100";
    g_codemap[111]="10001111010";
    g_codemap[112]="10100111100";
    g_codemap[113]="10010111100";
    g_codemap[114]="10010011110";
    g_codemap[115]="10111100100";
    g_codemap[116]="10011110100";
    g_codemap[117]="10011110010";
    g_codemap[118]="11110100100";
    g_codemap[119]="11110010100";
    g_codemap[120]="11110010010";
    g_codemap[121]="11011011110";
    g_codemap[122]="11011110110";
    g_codemap[123]="11110110110";
    g_codemap[124]="10101111000";
    g_codemap[125]="10100011110";
    g_codemap[126]="10001011110";
    g_codemap[195]="10111101000";
    g_codemap[196]="10111100010";
    g_codemap[197]="11110101000";
    g_codemap[198]="11110100010";
    g_codemap[199]="10111011110";
    g_codemap[200]="10111101110";
    g_codemap[201]="11101011110";
    g_codemap[202]="11110101110";
    g_codemap[203]="11010000100";
    g_codemap[204]="11010010000";
    g_codemap[205]="11010011100";
    g_codemap[206]="1100011101011";
    g_codemap[207]="11011001100";
    
    return true;
    }
    bool GetStringCode(char *str, string &strCode)
    {//传说中的code128B码就是这么造的,因为VC中的char其实就是一个int,所以对我们VC来讲更是简单无比
    if(str==NULL)
    return false;
    if(int(strlen(str))==0)
    return false;
    
    vector <int> tV;
    
    int nTol = 104;
    int nsz = strlen(str);
    
    for (int i=0;i<nsz;i++)
    {
    if(str[i]>=32)
    nTol += (str[i] - 32) * (i+1);
    else
    nTol += (str[i] + 64) * (i+1);
    }
    
    int nEndCode = nTol%103;
    if (nEndCode>=95)
    {
    if(nEndCode<=102)
    nEndCode = 100 + nEndCode;
    }
    else
    {
    nEndCode += 32;
    }
    
    tV.push_back(204);//加头
    for (int j=0;j<nsz;j++)
    tV.push_back(int(str[j]));//加内容
    tV.push_back(nEndCode);//加校验码
    tV.push_back(206);//加尾
    
    int nV = tV.size();
    for (int k=0;k<nV;k++)
    {
    strCode += g_codemap[tV.at(k)];
    }
    
    
    return true;
    }
  • 相关阅读:
    python斐波那契数列
    python装饰器
    Python文件操作
    python 第三方库的安装方法
    Ajax 基本使用学习记录
    微分方程概述
    Typora中的数学公式
    Ubuntu20.04 安装 mysql8.0 之后 root 账户无法登录
    Ubuntu20.04换源之后依旧慢?如何更有效的换源
    Ubuntu18.04更新python版本
  • 原文地址:https://www.cnblogs.com/yuandaozhe/p/9735824.html
Copyright © 2011-2022 走看看