QImage と QPixmap の違いがわかりません。同じ機能を提供しているようです。いつ QImage を使用し、いつ QPixmap を使用する必要がありますか?
5 に答える
QImageとQPixmapのドキュメントを読むことで簡単に答えられます:
QPixmapクラスは、ペイント デバイスとして使用できるオフスクリーンイメージ表現です。
QImageクラスは、ハードウェアに依存しない画像表現を提供し、ピクセル データへの直接アクセスを可能にし、ペイント デバイスとして使用できます。
編集:また、@ Daveの回答から:
GUI スレッドの外で QPixmap を操作することはできませんが、QImage にはそのような制限はありません。
そして@アーノルドから:
以下は、通常 (常にではありません) 適用される短い要約です。
- 画像の操作、変更、ピクセルの変更などを計画している場合は、QImage を使用します。
- 画面に同じ画像を複数回描画する場合は、QPixmap に変換します。
Qt Labs には、Qt グラフィックス システムについて多くのことを説明しているすばらしい一連の記事があります。特にこの記事QImage
には、 vs .に関するセクションがありQPixmap
ます。
以下は、通常 (常にではありません) 適用される短い要約です。
- 画像の操作、変更、ピクセルの変更などを計画している場合は、
QImage
. - 画面に同じ画像を複数回描画する予定がある場合は、
QPixmap
.
QPixmap
1 つの重要な違いは、メインの GUI スレッド以外では を作成または操作できないことです。ただし、QImage
バックグラウンド スレッドでインスタンスを作成および操作し、インスタンスを GUI スレッドに戻してから変換することはできます。
産業環境で重要:
QPixmap は、表示を行うビデオ カードに保存されます。QImageではありません。
そのため、アプリケーションを実行するサーバーと表示を行うクライアント ステーションがある場合、ネットワークの使用に関して非常に重要です。
Pixmap では、Redraw は再描画する命令 (数バイト) のみをネットワーク経由で送信することで構成されます。
QImage を使用すると、イメージ全体 (数 MB 程度) を送信することになります。
QPixmap は「画像オブジェクト」であり、その
pixel
表現はコードでは重要ではありません。したがって、QPixmap は表示画面に画像をレンダリングするように設計および最適化されており、X11 を使用する場合は XServer に保存されるため、XWindow での QPixmap の描画は描画よりもはるかに高速です。データはすでにサーバー上にあり、すぐに使用できるため、QImages。QPixmap を使用する場合: 既存の画像 (アイコン .. 背景 .. など) を特に繰り返し描画する場合は、QPixmap を使用します。
QImageは、クライアントコードの「メモリ内のピクセルの配列」です。QImage は、I/O およびピクセルへの直接アクセスと操作用に設計および最適化されています。
QImage を使用する場合: Qpaint を使用して描画する場合、または画像ピクセルを操作する場合。
QBitmapは、深さ 1 を保証する便利な QPixmap サブクラスであり、モノクロ (1 ビットの深さ) ピックスマップです。QPixmap と同様に、 QBitmap は暗黙的なデータ共有の使用に最適化されています。
- QPictureは、QPainter コマンド (描画) を記録および再生するペイント デバイスです。