2016-11-06 6 views
0

내가 필요한 모든 (Q) 문자열 같은 포함 된 이미지로 넣어 간단하다 내 코드 :어떤 아이디어, png 이미지로 QR 데이터를 인코딩하는 방법?</p> <p>이이 - (> apt-get을 libqrencode-dev에 설치 리눅스) <code>#include <qrencode.h></code> :</p> <pre><code><img src="data:image/png;base64,iVBORw..."> </code></pre> <p>내가 사용

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

모든 아이디어를 어떻게 PNG 이미지로 qr->data을 인코딩?

답변

0

나는 그것을했다! 당신이 (QImage ::와 setPixel`로 즉, 대신 QPixmap``FOF`QImage`를 사용하는 경우 : 개별 픽셀을 설정

#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

을 확장하지 않고 첫 번째 버전은'대신'QPainter를를 사용하는)에도 쉽게 :: drawPoint()'. ot'qr-> data' 형식에 따라 직접 변환하여 QImage로 변환 할 수도 있습니다. –