1. 程式人生 > >條形碼(barcode)code128生成代碼

條形碼(barcode)code128生成代碼

fill oid als ets 直接 tps amp sdn mage

條形碼(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:\n%s\n",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; }

條形碼(barcode)code128生成代碼