2016-04-25 14 views
0

私のアプリケーションでは、イメージを連続して表示したかったのです。しかしqimageをqpixmapに変換するのに30msくらいかかりました。これはフレームレートに影響を与えたので、私はQtGuiで自分のイメージを表示するためにもっと邪魔な方法を見つけたいと思っています。どの方法を使用できますか? 誰かが私を助けることができますか?QImage to QPixmapは高価です

答えて

2

ドキュメントをよく読んだら、すべてを説明します。

  • QImageのは、IO処理のためのデザインで、どんなことなく、直接ピクセルアクセスおよび操作のために
  • QPixmapのが設計されており、(画面

だけロードイメージとそれを表示した場合に画像を表示するために最適化画像を操作して)、画像をロードしてQPixmapとしてキャッシュするだけです。

しかし、あなたが操作を行うと、何もできません。ウィジェットのQPainterに直接画像をペイントしようとするかもしれません。画像をpixmapに変換してウィジェットにペイントするよりも速いのかどうか分かりません。

+0

をご助言をいただき、ありがとうございます。私はペインタで画像を描画するのが遅いのですが、私は試してみます – betterorbest

+0

はい、ペインタでQImageを描画するのは実際にはQPixmapに変換し、pixmap(Qt 5.4でテスト済み)を描画するより遅いです。 – Tomas

0

Iは前に同様の問題に直面し、私は発見した最良の解決策ではなく、QPixmapQImageの変換のOpenGLQOpenGLWidget + glDrawPixels())を使用することです。

+0

ありがとうございます。私はこの方法を試みます – betterorbest

0

変換する必要はありません。画像がbacking storeの形式で、ウィジェットの画像がdrawImageであることを確認してください。それはできるだけ早くです。

デフォルトのラスターバックエンドでは、QPixmapは、QImageのまわりの非常に薄いラッパーです。画像が正しいフォーマットである限り、変換はノーオペレーションです。

QPixmapと互換性のある形式を取得するには、次のコードを使用することができます:

QImage::Format pixmapFormat() { 
    static auto format = QPixmap{1,1}.toImage().format(); 
    return format; 
}