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

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

  1. #include <ctime>
  2. #include <string>
  3. #include <map>
  4. #include <vector>
  5. using namespace std;
  6. #include <windows.h>
  7. #include <atlimage.h>
  8. map<int,string> g_codemap;
  9. bool FillCodeMap(void);
  10. bool GetStringCode(char *str, string &strCode);
  11. bool GetImg(string code,CImage& img);
  12. HDC Hdc=::GetWindowDC(::GetDesktopWindow());
  13. int main(int argc, char **argv)
  14. {
  15. //"038000356216"
  16. FillCodeMap();
  17. string code;
  18. GetStringCode("",code);
  19. printf("cod:\n%s\n",code.c_str());
  20. CImage img;
  21. GetImg(code,img);
  22. img.Save(L"d:/barcode-demo.jpg");//这里基本就OK了 下面是直接显示到屏幕的代码
  23.  
  24. CImage demo;
  25. {
  26. demo.Create(img.GetWidth()+,img.GetHeight()+,);
  27. HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
  28. RECT rc;
  29. rc.left=;
  30. rc.right=demo.GetWidth();;
  31. rc.top=;
  32. rc.bottom=demo.GetHeight();
  33. HDC hdc=demo.GetDC();
  34. ::FillRect(hdc,&rc,white);
  35. img.BitBlt(hdc,,);
  36. demo.ReleaseDC();
  37. }
  38.  
  39. while()
  40. {
  41. demo.BitBlt(Hdc,,);
  42. ::Sleep();
  43. }
  44. return ;
  45. }
  46.  
  47. bool GetImg(string code,CImage& img)
  48. {
  49. if(code.empty())return false;
  50. if(!img.IsNull())img.Destroy();
  51.  
  52. int perWid=;
  53. int externWid=;
  54. int hei=+externWid*;
  55. int wid=code.length()*perWid+externWid*;
  56. img.Create(wid,hei,);
  57. HDC hdc=img.GetDC();
  58. HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
  59. HBRUSH black=(HBRUSH)GetStockObject(BLACK_BRUSH);
  60. RECT rc;
  61. rc.left=rc.top=;
  62. rc.right=img.GetWidth();
  63. rc.bottom=img.GetHeight();
  64. ::FillRect(hdc,&rc,white);
  65.  
  66. rc.left=externWid;
  67. rc.right=rc.left+perWid;
  68. rc.top=externWid;
  69. rc.bottom=img.GetHeight()-externWid;
  70. const char* p=code.c_str();
  71. for(int i=;i<code.length();++i)
  72. {
  73. ::FillRect(hdc,&rc,p[i]==''?white:black);
  74. rc.left+=perWid;
  75. rc.right+=perWid;
  76. }
  77. img.ReleaseDC();
  78. }
  79. bool FillCodeMap(void)//g_codemap是个map,这我不用讲了,找个地方定义一下,在此处填充
  80. {
  81. if(!g_codemap.empty())
  82. return true;
  83.  
  84. g_codemap[]="";
  85. g_codemap[]="";
  86. g_codemap[]="";
  87. g_codemap[]="";
  88. g_codemap[]="";
  89. g_codemap[]="";
  90. g_codemap[]="";
  91. g_codemap[]="";
  92. g_codemap[]="";
  93. g_codemap[]="";
  94. g_codemap[]="";
  95. g_codemap[]="";
  96. g_codemap[]="";
  97. g_codemap[]="";
  98. g_codemap[]="";
  99. g_codemap[]="";
  100. g_codemap[]="";
  101. g_codemap[]="";
  102. g_codemap[]="";
  103. g_codemap[]="";
  104. g_codemap[]="";
  105. g_codemap[]="";
  106. g_codemap[]="";
  107. g_codemap[]="";
  108. g_codemap[]="";
  109. g_codemap[]="";
  110. g_codemap[]="";
  111. g_codemap[]="";
  112. g_codemap[]="";
  113. g_codemap[]="";
  114. g_codemap[]="";
  115. g_codemap[]="";
  116. g_codemap[]="";
  117. g_codemap[]="";
  118. g_codemap[]="";
  119. g_codemap[]="";
  120. g_codemap[]="";
  121. g_codemap[]="";
  122. g_codemap[]="";
  123. g_codemap[]="";
  124. g_codemap[]="";
  125. g_codemap[]="";
  126. g_codemap[]="";
  127. g_codemap[]="";
  128. g_codemap[]="";
  129. g_codemap[]="";
  130. g_codemap[]="";
  131. g_codemap[]="";
  132. g_codemap[]="";
  133. g_codemap[]="";
  134. g_codemap[]="";
  135. g_codemap[]="";
  136. g_codemap[]="";
  137. g_codemap[]="";
  138. g_codemap[]="";
  139. g_codemap[]="";
  140. g_codemap[]="";
  141. g_codemap[]="";
  142. g_codemap[]="";
  143. g_codemap[]="";
  144. g_codemap[]="";
  145. g_codemap[]="";
  146. g_codemap[]="";
  147. g_codemap[]="";
  148. g_codemap[]="";
  149. g_codemap[]="";
  150. g_codemap[]="";
  151. g_codemap[]="";
  152. g_codemap[]="";
  153. g_codemap[]="";
  154. g_codemap[]="";
  155. g_codemap[]="";
  156. g_codemap[]="";
  157. g_codemap[]="";
  158. g_codemap[]="";
  159. g_codemap[]="";
  160. g_codemap[]="";
  161. g_codemap[]="";
  162. g_codemap[]="";
  163. g_codemap[]="";
  164. g_codemap[]="";
  165. g_codemap[]="";
  166. g_codemap[]="";
  167. g_codemap[]="";
  168. g_codemap[]="";
  169. g_codemap[]="";
  170. g_codemap[]="";
  171. g_codemap[]="";
  172. g_codemap[]="";
  173. g_codemap[]="";
  174. g_codemap[]="";
  175. g_codemap[]="";
  176. g_codemap[]="";
  177. g_codemap[]="";
  178. g_codemap[]="";
  179. g_codemap[]="";
  180. g_codemap[]="";
  181. g_codemap[]="";
  182. g_codemap[]="";
  183. g_codemap[]="";
  184. g_codemap[]="";
  185. g_codemap[]="";
  186. g_codemap[]="";
  187. g_codemap[]="";
  188. g_codemap[]="";
  189. g_codemap[]="";
  190. g_codemap[]="";
  191. g_codemap[]="";
  192.  
  193. return true;
  194. }
  195. bool GetStringCode(char *str, string &strCode)
  196. {//传说中的code128B码就是这么造的,因为VC中的char其实就是一个int,所以对我们VC来讲更是简单无比
  197. if(str==NULL)
  198. return false;
  199. if(int(strlen(str))==)
  200. return false;
  201.  
  202. vector <int> tV;
  203.  
  204. int nTol = ;
  205. int nsz = strlen(str);
  206.  
  207. for (int i=;i<nsz;i++)
  208. {
  209. if(str[i]>=)
  210. nTol += (str[i] - ) * (i+);
  211. else
  212. nTol += (str[i] + ) * (i+);
  213. }
  214.  
  215. int nEndCode = nTol%;
  216. if (nEndCode>=)
  217. {
  218. if(nEndCode<=)
  219. nEndCode = + nEndCode;
  220. }
  221. else
  222. {
  223. nEndCode += ;
  224. }
  225.  
  226. tV.push_back();//加头
  227. for (int j=;j<nsz;j++)
  228. tV.push_back(int(str[j]));//加内容
  229. tV.push_back(nEndCode);//加校验码
  230. tV.push_back();//加尾
  231.  
  232. int nV = tV.size();
  233. for (int k=;k<nV;k++)
  234. {
  235. strCode += g_codemap[tV.at(k)];
  236. }
  237.  
  238. return true;
  239. }

条形码(barcode)code128生成代码的更多相关文章

  1. 使用Spire.Barcode程序库生成二维码

    使用Spire.Barcode程序库生成二维码 某天浏览网页发现了一个二维码的程序库.它的描述说他可以扫描二维码图像.我很感兴趣,想试试他是不是会有用.所以我就用了些方法扫描二维码图像来测试一下.结果 ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. mybatis Generator生成代码及使用方式

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...

  4. x01.CodeBuilder: 生成代码框架

    根据 Assembly 生成代码框架. 这是学习 AvalonEdit 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ...

  5. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  6. 动态生成一个设定好特殊样式的Tlabel,快速生成代码

    动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...

  7. apt 根据注解,编译时生成代码

    apt: @Retention后面的值,设置的为CLASS,说明就是编译时动态处理的.一般这类注解会在编译的时候,根据注解标识,动态生成一些类或者生成一些xml都可以,在运行时期,这类注解是没有的~~ ...

  8. 使用mybatis-generator生成代码

    文档地址: ​http://mbg.cndocs.tk/index.html ​ 以下是一个简单的配置内容. 一.在maven配置文件中添加mybatis-generator插件 1 2 3 4 5 ...

  9. WebStorm按Tab建快速生成代码模块

    WS中,比如调试每次都要写的console.log(xxx);每次都要敲一遍,还有if模块,for循环模块,难道没有快捷键,可以生成代码模块吗,答案是“有”. 操作步骤如下(汉化版WS): 1.Alt ...

随机推荐

  1. Let和Const的使用

    ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const. let 声明的变量只在 let 命令所在的代码块内有效,const 声明一个只读的常量,一旦声明, ...

  2. orm的设计思路

    一,我们先搞懂什么是orm? ORM:对象关系映射(Object Relational Mapping,简称ORM),目的是想像操作对象一样操作数据库.因为数据库不是面向对象的,所以需要编程进行映射. ...

  3. ArcGis执行StartEditing(true)时,winform程序直接崩溃.

    问题描述:在Program中配置了ArcGis的许可,又在winform窗体添加了许可,导致执行StartEditing(true)时,winform程序直接崩溃. 原代码如下: static cla ...

  4. qt QAbstractItemModel一些方法介绍

    一. virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::Edit ...

  5. 解决Linux下SSH超时自动断开

    title: 解决Linux下SSH超时自动断开 comments: false date: 2019-08-19 19:22:55 description: Linux 下 SSH 超时自动断开?? ...

  6. 微软推出全新的Windows终端应用程序

    微软正推出一款名为Windows Terminal的新命令行应用程序.它被设计为访问PowerShell,cmd.exe和Windows子系统Linux(WSL)等环境的中心位置.微软正在为想要调整终 ...

  7. [工具] BurpSuite--快速生成CSRF POC

    我们使用工具分析出存在csrf漏洞时,可以快速生成这个请求的poc,下面我们来看看怎么快速生成 0x00 上图是通过proxy,点击action,选择上图的选项即可生成这个请求的CSRF Poc了 当 ...

  8. Rsync以守护进程(socket)的方式传输数据

    Rsync以守护进程(socket)的方式传输数据       Rsync服务部署 一.以守护进程(socket)的方式传输数据(重点) 部署环境: 分别用uname命令查看各系统相关信息   1 2 ...

  9. git过期后,如何将新建的项目push到码云上而且下拉成功

    1.在码云上创建一个项目: 2.打开STS(spring Tool Suite)   新建一个Maven(webapp)项目: 3.打开你的码云账号,把码云上的工程的URL复制: 4.重新在另一个目录 ...

  10. buuctf@rip

    exp: from pwn import * buf_start = 0x00007FFDBD754931 buf_end = 0x00007FFDBD754948 func_fun_addr= 0x ...