条形码(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("",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()+,img.GetHeight()+,);
- HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
- RECT rc;
- rc.left=;
- rc.right=demo.GetWidth();;
- rc.top=;
- rc.bottom=demo.GetHeight();
- HDC hdc=demo.GetDC();
- ::FillRect(hdc,&rc,white);
- img.BitBlt(hdc,,);
- demo.ReleaseDC();
- }
- while()
- {
- demo.BitBlt(Hdc,,);
- ::Sleep();
- }
- return ;
- }
- bool GetImg(string code,CImage& img)
- {
- if(code.empty())return false;
- if(!img.IsNull())img.Destroy();
- int perWid=;
- int externWid=;
- int hei=+externWid*;
- int wid=code.length()*perWid+externWid*;
- img.Create(wid,hei,);
- HDC hdc=img.GetDC();
- HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
- HBRUSH black=(HBRUSH)GetStockObject(BLACK_BRUSH);
- RECT rc;
- rc.left=rc.top=;
- 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=;i<code.length();++i)
- {
- ::FillRect(hdc,&rc,p[i]==''?white:black);
- rc.left+=perWid;
- rc.right+=perWid;
- }
- img.ReleaseDC();
- }
- bool FillCodeMap(void)//g_codemap是个map,这我不用讲了,找个地方定义一下,在此处填充
- {
- if(!g_codemap.empty())
- return true;
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- g_codemap[]="";
- return true;
- }
- bool GetStringCode(char *str, string &strCode)
- {//传说中的code128B码就是这么造的,因为VC中的char其实就是一个int,所以对我们VC来讲更是简单无比
- if(str==NULL)
- return false;
- if(int(strlen(str))==)
- return false;
- vector <int> tV;
- int nTol = ;
- int nsz = strlen(str);
- for (int i=;i<nsz;i++)
- {
- if(str[i]>=)
- nTol += (str[i] - ) * (i+);
- else
- nTol += (str[i] + ) * (i+);
- }
- int nEndCode = nTol%;
- if (nEndCode>=)
- {
- if(nEndCode<=)
- nEndCode = + nEndCode;
- }
- else
- {
- nEndCode += ;
- }
- tV.push_back();//加头
- for (int j=;j<nsz;j++)
- tV.push_back(int(str[j]));//加内容
- tV.push_back(nEndCode);//加校验码
- tV.push_back();//加尾
- int nV = tV.size();
- for (int k=;k<nV;k++)
- {
- strCode += g_codemap[tV.at(k)];
- }
- return true;
- }
条形码(barcode)code128生成代码的更多相关文章
- 使用Spire.Barcode程序库生成二维码
使用Spire.Barcode程序库生成二维码 某天浏览网页发现了一个二维码的程序库.它的描述说他可以扫描二维码图像.我很感兴趣,想试试他是不是会有用.所以我就用了些方法扫描二维码图像来测试一下.结果 ...
- Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架
前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...
- mybatis Generator生成代码及使用方式
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...
- x01.CodeBuilder: 生成代码框架
根据 Assembly 生成代码框架. 这是学习 AvalonEdit 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ...
- mybatis generator maven插件自动生成代码
如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...
- 动态生成一个设定好特殊样式的Tlabel,快速生成代码
动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...
- apt 根据注解,编译时生成代码
apt: @Retention后面的值,设置的为CLASS,说明就是编译时动态处理的.一般这类注解会在编译的时候,根据注解标识,动态生成一些类或者生成一些xml都可以,在运行时期,这类注解是没有的~~ ...
- 使用mybatis-generator生成代码
文档地址: http://mbg.cndocs.tk/index.html 以下是一个简单的配置内容. 一.在maven配置文件中添加mybatis-generator插件 1 2 3 4 5 ...
- WebStorm按Tab建快速生成代码模块
WS中,比如调试每次都要写的console.log(xxx);每次都要敲一遍,还有if模块,for循环模块,难道没有快捷键,可以生成代码模块吗,答案是“有”. 操作步骤如下(汉化版WS): 1.Alt ...
随机推荐
- Let和Const的使用
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const. let 声明的变量只在 let 命令所在的代码块内有效,const 声明一个只读的常量,一旦声明, ...
- orm的设计思路
一,我们先搞懂什么是orm? ORM:对象关系映射(Object Relational Mapping,简称ORM),目的是想像操作对象一样操作数据库.因为数据库不是面向对象的,所以需要编程进行映射. ...
- ArcGis执行StartEditing(true)时,winform程序直接崩溃.
问题描述:在Program中配置了ArcGis的许可,又在winform窗体添加了许可,导致执行StartEditing(true)时,winform程序直接崩溃. 原代码如下: static cla ...
- qt QAbstractItemModel一些方法介绍
一. virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::Edit ...
- 解决Linux下SSH超时自动断开
title: 解决Linux下SSH超时自动断开 comments: false date: 2019-08-19 19:22:55 description: Linux 下 SSH 超时自动断开?? ...
- 微软推出全新的Windows终端应用程序
微软正推出一款名为Windows Terminal的新命令行应用程序.它被设计为访问PowerShell,cmd.exe和Windows子系统Linux(WSL)等环境的中心位置.微软正在为想要调整终 ...
- [工具] BurpSuite--快速生成CSRF POC
我们使用工具分析出存在csrf漏洞时,可以快速生成这个请求的poc,下面我们来看看怎么快速生成 0x00 上图是通过proxy,点击action,选择上图的选项即可生成这个请求的CSRF Poc了 当 ...
- Rsync以守护进程(socket)的方式传输数据
Rsync以守护进程(socket)的方式传输数据 Rsync服务部署 一.以守护进程(socket)的方式传输数据(重点) 部署环境: 分别用uname命令查看各系统相关信息 1 2 ...
- git过期后,如何将新建的项目push到码云上而且下拉成功
1.在码云上创建一个项目: 2.打开STS(spring Tool Suite) 新建一个Maven(webapp)项目: 3.打开你的码云账号,把码云上的工程的URL复制: 4.重新在另一个目录 ...
- buuctf@rip
exp: from pwn import * buf_start = 0x00007FFDBD754931 buf_end = 0x00007FFDBD754948 func_fun_addr= 0x ...