2

私は大きなディスプレイ (約 1000x2000 ピクセル) を持っており、画面に画像を描画するために次のことを行っています。

QImage *pImage = GetImage(); // from wherever
QPainter painter(this);   
painter.drawImage((0,0), *pImage);  // this line takes over 100ms to complete.

描画する画面が大きいほど、このペイントにかかる時間は長くなります。pImage は memcpy されていると思いますが、それが違いです。このオーバーヘッドを削減するにはどうすればよいですか? ここでスケーリングなどをしようとしているわけではありません。

ありがとう。

4

2 に答える 2

4

あなたはQImageを描いています。そうしないで、代わりに QPixmap を試してください。

QImageのドキュメントから:

QImage は I/O 用に設計および最適化されており、直接ピクセルへのアクセスと操作を行うことができますが、QPixmap は画面上に画像を表示するために設計および最適化されています。」

プラットフォームによっては、QImage データをペイントに必要な形式と場所に変換するのに、非常にコストがかかる場合があります。

PS: ヒープに QImages を作成する必要はありません。

QImage クラスは暗黙的なデータ共有を使用するため、QImage オブジェクトは値で渡すことができます。

于 2011-06-28T20:39:35.897 に答える
0

できる簡単な改善の 1 つは、更新が必要な領域だけを描画することです (可能であれば)。には、変更された領域のQPaintEventrect が含まれておりQPainter::drawImage、部分を描画するために rect を使用できるオーバーロードがあります。

ImageConversionFlagsより高速なオプションについては、オプションを参照することもできます。

于 2011-06-29T14:44:39.210 に答える