这是我用来生成 Interleaved 2 of 5 条码的一些 sn-ps 代码,这是最简单的一维条码。
它只为数字而不是字母设置,但我相信你会明白的。
这决定了数字 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;
}
}
这里的前提是有一个表示位图的字节数组和子函数设置该字节数组中的位,例如设置像素。
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);
}
}
}