c++ - 有没有办法从cpp中的文本生成条形码图像?
问题描述
我有一个在 CPP 中生成条形码编号的代码,为了在收据中显示它,我需要将该编号转换为图像(.bmp)。
是否有现有的库或实现上述结果的方法?
解决方案
这是我用来生成 Interleaved 2 of 5 条码的一些代码片段,这是最简单的一维条码。它只为数字而不是字母设置,但我相信你会明白的。
这规定了数字 0 到 9 的行距(包括 0 到 9)
const char I25_Code[10][6] = { {"NNWWN"}, {"WNNNW"}, {"NWNNW"}, {"WWNNN"}, {"NNWNW"}, {"WNWNN"}, {"NWWNN"}, {"NNNWW"}, {"WNNWN"}, {"NWNWN"} };
这将生成生成条形码:
void GenerateBarcodeI2of5(unsigned int startX, unsigned int startY, unsigned int width, unsigned int height, char *value)
{
if(value==NULL)return;
if(strlen(stringbuffer)==0) return;
int minBarThickness = MIN_BARCODE_BAR_WIDTH;
int barRatio = BARCODE_BAR_RATIO_3_TO_1 ? 3:2;
bool bars = true;
int sl = strlen(stringbuffer);
int pixelX=0;
pixelX=startX;
for(int i=0;i<sl;i++)
{
char c = stringbuffer[i];
if(bars)
{
if(c=='N' || c=='n')
{
GenerateLine(pixelX, startY, minBarThickness, height, false);
pixelX+=minBarThickness;
}
else
{
GenerateLine(pixelX, startY, minBarThickness*barRatio, height, false);
pixelX+=minBarThickness*barRatio;
}
}
else
{
if(c=='N' || c=='n')
{
GenerateLine(pixelX, startY, minBarThickness, height, true);
pixelX+=minBarThickness;
}
else
{
GenerateLine(pixelX, startY, minBarThickness*barRatio, height, true);
pixelX+=minBarThickness*barRatio;
}
}
bars=!bars;
}
}
这里的前提是存在一个表示位图的字节数组,并且子函数在该字节数组中设置位,例如 SetPixel。
void GenerateLine(unsigned int startX, unsigned int startY, unsigned int width, unsigned int height, bool inverse)
{
int bit = inverse?0:1;
for(int x = startX; x<(width+startX); x++)
{
for(int y=startY; y<(startY+height); y++)
{
if(x>=IMAGE_COLUMNS) continue;
if(y>=IMAGE_ROWS) continue;
SetPixel(x,y,ScreenImageData,IMAGE_ARRAY_COLUMN_DATA_BYTES, bit);
}
}
}
推荐阅读
- graphql - 尝试在 GraphCMS api 上连接时出现 Gatsby Graphql 问题
- varnish - 在默认端口 6081 上清漆
- ruby - kubeclient create_namespace NoMethodError
- html - NVDA 和 JAWS 在 Textarea 中禁用输入
- c# - 如何使用 CoreCursorType.Custom 在 C# UWP 中创建自定义光标?
- python - List append in a "for" loop
- android - json 显示错误 no value for total 即使值存在
- python - Conda 未安装最新版本
- c - 解析来自套接字的单个消息,其中包含 C 中的 2 个字符串
- angular6 - 导航到孙子路线Angular 6