2016-11-06 10 views
0

Все, что мне нужно просто (Q) строка, чтобы положить его в качестве вложенного изображения, как:Любые идеи, как кодировать QR-данные в png-изображение?

<img src="data:image/png;base64,iVBORw..."> 

Я использую: #include <qrencode.h> (Linux -> APT-получить установку libqrencode-DEV)

Это мой код:

QRcode *qr=QRcode_encodeString(QString("my test string").toStdString().c_str(), 1, QR_ECLEVEL_L, QR_MODE_8,1); 
QByteArray *ba = new QByteArray(); 
for (unsigned int y=0; y<qr->width;y++) 
{ 
    int yy=y*qr->width; 
    for (unsigned int x=0; x<qr->width;x++) 
    { 
     int xx=yy+x; 
     const unsigned char b=qr->data[xx]; 

     ///WHAT TO DO NOW??? IS IT CORRECT? 
     ba->push_back(b); 
     qDebug()<<"Char "<<b; 
     if(b &0x01) 
     { 
     qDebug()<<"Point +++"; 
     } 
    } 
} 

qDebug()<<ba->toBase64(); 

Любые идеи, как кодировать qr->dataв PNG изображение?

ответ

0

Я сделал это! :) Первая версия, без масштабирования

#include<QString> 
    #include<QDebug> 
    #include<QByteArray> 
    #include<QBuffer> 
    #include<QImage> 
    #include<QImageWriter> 
    #include<QPixmap> 
    #include<QPainter> 
    #include<QColor> 
    #include<QPointF> 
    #include<QRectF> 



    //ustawiam kolory 
    QColor bialy = Qt::white; 
    QColor czarny = Qt::black; 

//PNG  
     QByteArray ImageAsByteArray; 
     QBuffer ImageBuffer(&ImageAsByteArray); 
     ImageBuffer.open(QIODevice::WriteOnly); 




    QRcode *qr=QRcode_encodeString(QString("afya.pl").toStdString().c_str(), 1, QR_ECLEVEL_L, QR_MODE_8,1); 

    QPixmap p(qr->width,qr->width); 
    QPainter pa; 
    pa.begin(&p); 
    pa.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::HighQualityAntialiasing |QPainter::TextAntialiasing| QPainter::Antialiasing); 
    pa.setPen(bialy); 
    pa.setBrush(bialy); 
    //czyścimy tło 
    QPointF a=QPointF(0.0,0.0); 
    QPointF b=QPointF(p.width(),p.height()); 
    pa.drawRect(QRectF(a,b)); 


    pa.setPen(czarny); 

    for (unsigned int y=0; y<qr->width;y++) 
    { 
     int yy=y*qr->width; 
     for (unsigned int x=0; x<qr->width;x++) 
     { 
     int xx=yy+x; 
     const unsigned char b=qr->data[xx]; 

     if(b &0x01){ 
    a=QPointF(y,x); 
    pa.drawPoint(a); 
     } 
     } 


    } 
    p.save(&ImageBuffer,"PNG"); 


    qDebug()<<ImageAsByteArray.toBase64(); 
    } 
+1

Настройка отдельных пикселов еще проще, если вы используете 'QImage' вместо ФОФ' QPixmap', т.е. 'QImage :: SetPixel()' вместо 'QPainter :: drawPoint() '. В зависимости от формата ot 'qr-> data' может быть даже возможно преобразовать его непосредственно в' QImage' –