QT实现文字取模的原理
配合POVLED上下位机工作还需要一个软件用于将需要显示的图形的位模形生成,分为文字和图片,在这里我们先讲解下文字字模的取法。
在QT中图片使用功能QImage类存储,又支持很多种数据格式,Format_ARGB32,等格式,像这种格式每个像素需要32位数据存储,第一字节是透明度,红色,绿色,蓝色。
实现该功能的基本原理是将目标文字写到16x16像素的图片中,白底黑字,然后通过遍历图片像素,将像素底色白色为0,黑色为1,存储到目标数组中,一个汉字可以生成 32 byte数组。
具体实现代码
mainWidget::mainWidget(QWidget *parent) : QWidget(parent) { paintArea = new PaintArea; pLineEdit = new QLineEdit; pTextBrower = new QTextBrowser; pPushButton = new QPushButton; //pinputString = new QString; pLineEdit->setFixedWidth(500); pLineEdit->setFixedHeight(25); pPushButton->setText("确定"); pPushButton->setFixedHeight(25); rightLayout = new QGridLayout; rightLayout->addWidget(pLineEdit,0,0); rightLayout->addWidget(pPushButton,0,1); rightLayout->addWidget(pTextBrower,1,0); QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->addWidget(paintArea); mainLayout->addLayout(rightLayout); mainLayout->setStretchFactor(paintArea,0); mainLayout->setStretchFactor(rightLayout,1); connect(pPushButton,SIGNAL(clicked()),this,SLOT(pushbutton_clicked())); } mainWidget::~mainWidget() { } void mainWidget::pushbutton_clicked() { qDebug() << "button clocked"; qDebug() << pLineEdit->text(); pinputString = pLineEdit->text(); qDebug() << QString(pinputString[0]); qDebug() << QString(pinputString[1]); qDebug() << pinputString.size(); QSize size(16,16); QImage image(size,QImage::Format_ARGB32); image.fill(Qt::white); QPainter painter(&image); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); QPen ppen = painter.pen(); ppen.setColor(Qt::black); QFont pfont = painter.font(); pfont.setBold(true); pfont.setPixelSize(16); painter.setPen(ppen); painter.setFont(pfont); painter.drawText(image.rect(),Qt::AlignLeft | Qt::AlignVCenter,QString(pinputString[0])); image.save("C:/Users/Administrator/Desktop/LED_ARY/build-codeary-Desktop_Qt_5_9_9_MinGW_32bit-Debug/debug/myImage.png"); uchar hziCode[32]; uint hanzicode = 0; for(unsigned char i = 0;i < 16;i++) { hanzicode = 0; for(unsigned char j = 0;j < 16; j++) { hanzicode <<= 1; if(image.pixel(i,j) == 0xff000000) { hanzicode |= 1; } } //qDebug("%",hanzicode); qDebug("%s",qPrintable(QString::number(hanzicode,2).rightJustified(16,'0'))); hziCode[2*i] = uchar(hanzicode >>8); hziCode[2*i+1] =uchar( hanzicode); qDebug("%s%s",qPrintable(QString::number( hziCode[2*i],2).rightJustified(8,'0')),qPrintable(QString::number(hziCode[2*i+1],2).rightJustified(8,'0'))); //qDebug(";;;"); } }


浙公网安备 33010602011771号