2009-07-17 10 views
3

J'ai le code suivant.Sauvegarde de QPixmap en échec JPEG (Qt 4.5)

QString fileName = QFileDialog::getSaveFileName(
    this, 
    tr("Output Image file"), 
    (""), 
    tr("PNG (*.png);;JPEG (*.JPEG);;Windows Bitmap (*.bmp);;All Files (*.*)") 
); 

if(fileName != "") 
{ 
    QwtPlot* pPlot = ... 
    QSize size = pPlot->size(); 
    QRect printingRect(QPoint(0, 0), size); 

    QPixmap pixmapPrinter(size); 
    pixmapPrinter.fill(Qt::white); 

    { 
     QPainter painter(&pixmapPrinter); 
     pPlot->print(&painter, printingRect);  
    } 

    bool isOk = pixmapPrinter.save(fileName); 

    if(!isOk) 
    {     
     QString msgText = tr("Failed to write into ") + fileName; 

     QMessageBox::critical(this, tr("Error Writing"), msgText); 
    } 
} 

Ainsi, le chemin est comme ceci: - dialogue Fichier affiche - les utilisateurs sélectionne le format et le fichier - le système tire terrain sur QPixmap - Enregistre QPixmap dans le fichier.

Cela fonctionne pour PNG et BMP sans problème, mais pour JPEG, jpg, JPG, etc. il échoue.

J'étais partout dans la documentation de Qt mais n'ai pu trouver aucun détail. Ça devrait juste marcher. Des idées? J'utilise Qt commercial edition, 4.5.1 pour Windows.
J'utilise dlls, Qt n'est pas sur le chemin. Je viens de me rendre compte que je suis en train de relier statiquement à un jpeg.lib tiers classique (logiciel JPEG de The Independent JPEG Group), qui est utilisé par une autre bibliothèque.

Est-il possible qu'un conflit ou quelque chose se produise à cause de cela?

Ou c'est simplement que le plugin n'est pas chargé correctement.

Répondre

5

probablement Je ne trouve pas le plug-in ...

vous pouvez ajouter le chemin de bibliothèque pour projeter ou vous pouvez tout simplement dossier imageformats près de votre binaire.

dossier imageformats est en plug-ins ..

(probablement vous affichage catifs images jpeg aussi)

+0

Je pense qu'à la fin, nous arrivons à trier en mettant le dossier imageformats du répertoire qt plugins dans le répertoire du projet, puis aussi dans la trajectoire de publication. –

4

Si vous faites une accumulation d'électricité statique, vous devez ajouter QTPLUGIN += qjpeg à votre fichier .pro, de sorte que la La bibliothèque jpeg statique de l'imageformats est liée à votre application.

+0

Je ne fais pas une construction statique (du moins ce que je pense). Mon application ne fonctionne pas sans QtCore4.dll et QtGui4.dll dans le même répertoire que l'exe. Bien que c: \ Qt \ 4.5.1 \ lib \ QtGui4.lib c: \ Qt \ 4.5.1 \ lib \ QtCore4.lib sont fournis au lieur, mais je comprends qu'il est standard de fournir un "pont" de sorte que le compilateur sait que ces choses viendront dans dll, ou quelque chose. Je vais essayer d'ajouter QTPLUGIN + = qjpeg au fichier .pro, pour voir si elle diffère par la suite. –

4

Votre plugin est probablement manquant, la meilleure façon de travailler consiste à ne répertorier que les formats d'image pris en charge par la boîte à outils.

Cet exemple est de mon image d'insertion mais vous devriez être en mesure de l'adapter à votre sauvegarde comme:

QString fileFormats = "("; 
/* Get all inputformats */ 
for (int i = 0; i < QImageReader::supportedImageFormats().count(); i++) { 
    fileFormats += "*."; /* Insert wildcard */ 
    fileFormats 
      += QString(QImageReader::supportedImageFormats().at(i)).toLower(); /* Insert the format */ 
    fileFormats += " "; /* Insert a space */ 
} 
fileFormats += ")"; 

QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), 
     currentPath, tr("Images ") + fileFormats); 

Aussi, nous perdons parfois de formats si une copie de développeur un débogage construire une machine d'assurance qualité. La version de débogage recherchera les plugins de débogage et ne parviendra pas à les charger.

Questions connexes