2009-07-17 40 views
3

次のコードがあります。ファイルダイアログがポップアップ表示 - - ユーザーがフォーマットやファイルを選択 - システムはQPixmapの上にプロットを描画します - ファイルにQPixmapのを保存します:QPixmapを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); 
    } 
} 

ので、パスはこのようなものです。

PNGとBMPは問題なく動作しますが、JPEG、jpg、JPGなどの場合は問題ありません。

私はすべてQtのドキュメントを読んでいましたが、詳細は見つかりませんでした。それはうまくいくはずです。 アイデア

私はQtの商用版4.5.1をWindows用に使用しています。
私はDLLを使用していますが、Qtはパスにありません。

私は、他のライブラリで使用されている古典的なサードパーティのjpeg.lib(Independent JPEG GroupのJPEGソフトウェア)に静的にリンクしていることに気付きました。

このために競合が発生する可能性はありますか?

または、単にプラグインが正しくロードされていないことです。

答えて

5

おそらくそれは、プラグインを見つける傾ける...

あなたが投影するか、あなたは、単にあなたのバイナリ近くimageformatsフォルダを置くことができ、ライブラリのパスを追加することができます。フォルダがプラグインである

imageformats ..

(おそらくあなたもJPEG画像を表示カント)

+0

私は最後に、qtプラグインディレクトリのimageformatsフォルダをプロジェクトディレクトリに配置し、次にリリースの軌跡に入れて整理することもできます。 –

4

あなたは静的ビルドを作っている場合は、あなたがそのように、あなたの.PROファイルにQTPLUGIN += qjpegを追加する必要がありますimageformatsの静的JPEGライブラリはアプリケーションにリンクされています。

+0

私はスタティックビルドを作っていません(少なくとも私が思うもの)。 私のアプリケーションは、exeと同じディレクトリにQtCore4.dllとQtGui4.dllがなければ実行されません。 c:\ Qt \ 4.5.1 \ lib \ QtGui4.lib c:\ Qt \ 4.5.1 \ lib \ QtCore4.lib がリンカに提供されていますが、コンパイラは、このことがdllや何かに来ることを知っている。 QTPLUGIN + = qjpegを.proファイル に追加して、後で別のものになるかどうか確認します。 –

4

あなたのプラグインが不足している可能性が最も高いので、作業する最良の方法は、ツールキットがサポートする画像フォーマットのみを一覧表示することです。

この例は、私の挿入ピクチャからですが、としてあなたの保存のためにそれを適応させることができる必要があります:開発者のコ​​ピーデバッグビルドた場合にも、我々は時々QAマシンにフォーマットを失う

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

。デバッグバージョンでは、デバッグプラグインが検索され、ロードされません。

関連する問題