2017-08-09 2 views
0

J'ai un problème. Je dois convertir base64 en QImage, mais après cette image est toujours nulle. Voici le code:Qt Conversion base64 à QImage renvoie null

void convertAll(QString path) 
{ 
    QDir *dir = new QDir(path); 
    QDirIterator *iter = new QDirIterator(*dir); 
    QVector<QFile*> files; 

    QTextStream cout(stdout); 

    cout << "Finding files...\n"; 
    cout.flush(); 

    while (iter->hasNext()) 
    { 
     iter->next(); 
     if (iter->fileInfo().completeSuffix() == "txt") 
      files.push_back(new QFile(iter->filePath())); 
    } 

    delete iter; 

    cout << "Converting files to images...\n"; 
    cout.flush(); 

    foreach (QFile *file, files) 
    { 
     QString filename = QFileInfo(*file).fileName(); 
     filename.remove(".txt"); 

     file->open(QIODevice::ReadOnly); 
     QTextStream stream(file); 

     cout << "Reading file...\n"; 
     cout.flush(); 

     QByteArray base64Data = stream.readAll().toUtf8(); 
     cout << "Reading is completed!\n"; 
     cout.flush(); 
     file->close(); 


     QImage *image = new QImage(); 
     cout << "Converting...\n"; 
     cout.flush(); 


     image->loadFromData(QByteArray::fromBase64(base64Data), "GIF"); 
     if (!image->isNull()) 
     { 
      cout << "Converting is completed! Saving...\n"; 
      cout.flush(); 
     } 
     else 
     { 
      cout << "Error converting to image!\n\n"; 
      cout.flush(); 
      delete image; 
      delete file; 
      continue; 
     } 

     if (image->save("/home/prosperis/ProgramFiles/Content/" + filename + ".bmp", "BMP")) 
     { 
      cout << "Saved successful!\nFile " << filename << ".bmp has been made!\n\n"; 
      cout.flush(); 
     } 
     else 
     { 
      cout << "Error saving the file!\n\n"; 
      cout.flush(); 
     } 


     delete image; 
     delete file; 
    } 

    delete dir; 
} 

Screenshot avec le résultat:

Result

exemple base64:

données: image/gif; base64, iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVFhH7ZSxDYMwEEW9RdqU9MhFOho6WrwAE0SsESGlyABpvEU2yB5ZItLFnG1kkJEgipUjuSdZWG78 + HdnwTAMAR73J7gtXTYjOSd61Wc6PxCTJCXYM5X8muDldJi9OJQkKdjj + 5KsoGc TgrHhSc5PJei2iVA1qNvRrBoyIYbLiAjmUBi5Sjc0BbPOJKdL2LVG0HzdMbJEMG16WNoGpBQUBW1pC2VLikl2OR3BqRAtQSzteCBigkv4vKAsoQpK65HaTHK7JyA4vHnxtVYy4ZCEjAdmDSyIYF/a99CdLCaxoE0u7MF3UmQYhmGYv0SIF0Zn9rmd3QoAAAAAAElFTkSuQmCC

En outre, il ne fonctionne pas si je retire data:image/gif;base64,

Répondre

0

Je l'ai essayé avec cet exemple simple et cela fonctionne sur ma machine.

QByteArray txt = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVFhH7ZSxDYMwEEW9RdqU9MhFOho6WrwAE0SsESGlyABpvEU2yB5ZItLFnG1kkJEgipUjuSdZWG78+HdnwTAMAR73J7gtXTYjOSd61Wc6PxCTJCXYM5X8muDldJi9OJQkKdjj+5KsoGcTgrHhSc5PJei2iVA1qNvRrBoyIYbLiAjmUBi5Sjc0BbPOJKdL2LVG0HzdMbJEMG16WNoGpBQUBW1pC2VLikl2OR3BqRAtQSzteCBigkv4vKAsoQpK65HaTHK7JyA4vHnxtVYy4ZCEjAdmDSyIYF/a99CdLCaxoE0u7MF3UmQYhmGYv0SIF0Zn9rmd3QoAAAAAAElFTkSuQmCC"; 
    QPixmap image; 
    image.loadFromData(QByteArray::fromBase64(txt)); 

    ui->label->setPixmap(image); 
+0

J'ai trouvé mon erreur. Merci. – Vlad