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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM