1,316
社区成员
发帖
与我相关
我的任务
分享
barcodeEAN13 barcode("10100110000000000",400,200, 1);
ui->label->setPixmap(barcode);
ui->label->pixmap()->save("d:/1.bmp");
#include "barcodeean13.h"
#include <QPainter>
#include <QDebug>
barcodeEAN13::barcodeEAN13(QString svalue,int width,int height,qreal ratio)
:QPixmap(width,height)
{
sValue = svalue;
starLine= "101"; //条形码左护线
midLine="01010"; //条形码间隔线
endLine="101"; //条形码右护线
listA<<"0001101"<<"0011001"<<"0010011"<<"0111101"<<"0100011"<<"0110001"<<"0101111"<<"0111011"<<"0110111"<<"0001011"; //间隔线左侧编码集合A
listB<<"0100111"<<"0110011"<< "0011011"<<"0100001"<<"0011101"<<"0111001"<<"0000101"<<"0010001"<<"0001001"<<"0010111"; //间隔线左侧编码集合B
listGuid <<"AAAAAA"<<"AABABB"<< "AABBAB"<< "AABBBA"<< "ABAABB"<< "ABBAAB"<< "ABBBAA"<< "ABABAB"<< "ABABBA"<<"ABBABA"; //引导数编码规则
listR <<"1110010"<< "1100110"<< "1101100"<< "1000010"<< "1011100"<<"1001110"<<"1010000"<<"1000100"<<"1001000"<<"1110100"; //间隔线右侧编码集合
calCheckDigit();
QString str = targetCode();
drawBar(str);
drawText();
}
void barcodeEAN13::calCheckDigit()
{
int sum=0;
int sum1=0;
QString check;
for(int i=11;i>=0;i--)
{
if(i%2==1)
//sum += sValue[i].digitValue();
sum += sValue[i].digitValue();
else
//sum1+=sValue[i].digitValue();
sum1 += sValue[i].digitValue();
}
sValue.append(check.setNum(10-(sum*3+sum1)%10).right(1));
}
QString barcodeEAN13::targetCode()
{
QString targetStr,guidStr;
//int guid I= sValue.at(0).digitValue();
int guidI= sValue[0].digitValue();
guidStr = listGuid.at(guidI);
targetStr.append(starLine);
for(int i=1;i<=6;i++)
{
if(guidStr[i-1] == 'A')
{
targetStr.append(listA.at(sValue[i].digitValue()));
}
else
{
targetStr.append(listB.at(sValue[i].digitValue()));
}
}
targetStr.append(midLine);
//return "";
for(int i=7;i<=12;i++)
{
targetStr.append(listR.at(sValue[i].digitValue()));
}
targetStr.append(endLine);
return targetStr;
}
void barcodeEAN13::drawBar(QString targetStr)
{
int h;
QPen pen;
pen.setWidth(2);
QPainter painter(this);
fill(QColor(255,255,255));
for(int i=0;i<targetStr.length();i++)
{
if(i<3 || i>91 || (i>44 && i<50))
h=100;
else
h=89;
if(targetStr.at(i)=='1')
{
pen.setColor(QColor(0,0,0));
}
else
{
pen.setColor(QColor(255,255,255));
}
painter.setPen(pen);
painter.drawLine((14+i)*pen.width(),0,(14+i)*pen.width(),h);
}
}
void barcodeEAN13::drawText()
{
QPainter painter(this);
painter.setFont(QFont("KaiTi_GB2312",10,false));
painter.drawText(14,108,sValue.left(1));
for(int i=1;i<7;i++)
{
painter.drawText(25+i*13,108,sValue.mid(i,1));
}
for(int i=7;i<13;i++)
{
painter.drawText(38+i*13,108,sValue.mid(i,1));
}
}
#include "barcodeean13.h"
#include <QPainter>
barcodeEAN13::barcodeEAN13(QString svalue,int width,int height,qreal ratio)
:QPixmap(width,height)
{
sValue=svalue;
starLine= "101"; //条形码左护线
midLine="01010"; //条形码间隔线
endLine="101"; //条形码右护线
listA<<"0001101"<<"0011001"<<"0010011"<<"0111101"<<"0100011"<<"0110001"<<"0101111"<<"0111011"<<"0110111"<<"0001011"; //间隔线左侧编码集合A
listB<<"0100111"<<"0110011"<< "0011011"<<"0100001"<<"0011101"<<"0111001"<<"0000101"<<"0010001"<<"0001001"<<"0010111"; //间隔线左侧编码集合B
listGuid <<"AAAAAA"<<"AABABB"<< "AABBAB"<< "AABBBA"<< "ABAABB"<< "ABBAAB"<< "ABBBAA"<< "ABABAB"<< "ABABBA"<<"ABBABA"; //引导数编码规则
listR <<"1110010"<< "1100110"<< "1101100"<< "1000010"<< "1011100"<<"1001110"<<"1010000"<<"1000100"<<"1001000"<<"1110100"; //间隔线右侧编码集合
calCheckDigit();
QString str=targetCode();
drawBar(str);
drawText();
}
void barcodeEAN13::calCheckDigit()
{
int sum=0;
int sum1=0;
QString check;
for(int i=11;i>=0;i--)
{
if(i%2==1)
sum+=sValue.at(i).digitValue();
else
sum1+=sValue.at(i).digitValue();
}
sValue.append(check.setNum(10-(sum*3+sum1)%10).right(1));
}
QString barcodeEAN13::targetCode()
{
QString targetStr,guidStr;
int guidI=sValue.at(0).digitValue();
guidStr=listGuid.at(guidI);
targetStr.append(starLine);
for(int i=1;i<=6;i++)
{
if(guidStr.at(i-1)=='A')
{
targetStr.append(listA.at(sValue.at(i).digitValue()));
}
else
{
targetStr.append(listB.at(sValue.at(i).digitValue()));
}
}
targetStr.append(midLine);
for(int i=7;i<=12;i++)
{
targetStr.append(listR.at(sValue.at(i).digitValue()));
}
targetStr.append(endLine);
return targetStr;
}
void barcodeEAN13::drawBar(QString targetStr)
{
int h;
QPen pen;
pen.setWidth(2);
QPainter painter(this);
fill(QColor(255,255,255));
for(int i=0;i<targetStr.length();i++)
{
if(i<3 || i>91 || (i>44 && i<50))
h=100;
else
h=89;
if(targetStr.at(i)=='1')
{
pen.setColor(QColor(0,0,0));
}
else
{
pen.setColor(QColor(255,255,255));
}
painter.setPen(pen);
painter.drawLine((14+i)*pen.width(),0,(14+i)*pen.width(),h);
}
}
void barcodeEAN13::drawText()
{
QPainter painter(this);
painter.setFont(QFont("KaiTi_GB2312",10,false));
painter.drawText(14,108,sValue.left(1));
for(int i=1;i<7;i++)
{
painter.drawText(25+i*13,108,sValue.mid(i,1));
}
for(int i=7;i<13;i++)
{
painter.drawText(38+i*13,108,sValue.mid(i,1));
}
}