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);
}
}
したがって、パスは次のようになります。- ファイルダイアログがポップアップします - ユーザーが形式とファイルを選択します - システムが QPixmap 上にプロットを描画します - QPixmap をファイルに保存します。
PNG と BMP では問題なく動作しますが、JPEG、jpg、JPG などでは失敗します。
Qt のドキュメントをくまなく調べましたが、詳細は見つかりませんでした。それはうまくいくはずです。何か案は?
Windows 版 Qt 商用版 4.5.1 を使用しています。
DLL を使用していますが、Qt がパス上にありません。
他のライブラリで使用されている古典的なサードパーティの jpeg.lib (The Independent JPEG Group の JPEG ソフトウェア) に静的にリンクしていることに今気づきました。
これが原因で衝突か何かが起こる可能性はありますか?
あるいは、単にプラグインが正しく読み込まれていないだけです。
解決
おそらくそれは、プラグインを見つける傾ける...
あなたが投影するか、あなたは、単にあなたのバイナリ近くimageformatsフォルダを置くことができ、ライブラリのパスを追加することができます。
imageformatsフォルダはプラグインである..
(おそらくあなたもJPEG画像を表示カント)
他のヒント
あなたは静的ビルドを作っている場合、あなたは、あなたの.PROファイルにQTPLUGIN += qjpeg
を追加する必要があります。
プラグインが見つからない可能性が高く、ツールキットがサポートする画像形式のみをリストすることが最善の方法です。
この例は私の挿入画像からのものですが、次の名前で保存できるように調整できるはずです。
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);
また、開発者がデバッグ ビルドを QA マシンにコピーすると、フォーマットが失われることがあります。デバッグ バージョンはデバッグ プラグインを探しますが、それらのロードに失敗します。