配合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(";;;"); } }

