2

私のプログラムは、複雑なルールを使用して画像を作成し、QScrollArea に表示します。現在、私はこのようにしています:

  • QImageを作成する
  • QImage::setPixel を使用して塗りつぶします
  • ウィジェット (QWidget から派生) を QScrollArea に追加します
  • ウィジェットで paintEvent を定義し、QPainter::drawImage を使用します

生成された画像を表示する最も簡単な方法はありますか?

今、私は問題を抱えています。画像は非常に大きくなる場合があります。QImage はデータをメモリに保存し、大きな画像を保存できません。生成された画像をディスクに保存し、任意のズームでその一部をすばやく描画したいと考えています。これどうやってするの?

4

2 に答える 2

3

QPixmapとの違いのいくつかを説明しているこの記事をチェックしたいと思うかもしれませんQImage

http://techbase.kde.org/Development/Tutorials/Graphics/Performance#QPixmap_vs._QImage

非常に大きな画像を高速でズームしたい場合は、「ディープズーム」および「ズーム可能なユーザーインターフェイス」(ZUI)と呼ばれる方法があります。

http://en.wikipedia.org/wiki/Deep_Zoom

QScrollArea箱から出してこれを行うようには設計されていません。Qtの実装についてはわかりませんが、個人的にはOpenZoomと呼ばれるオープンソースのFlashで遊んでいました。あなたは私の結果を見ることができます:

http://hostilefork.com/2010/09/12/imagination-squared-plus-openzoom/

誰かがQtのために再利用可能な方法でこれに取り組んでいるのを見るのは素晴らしいことです。

于 2011-07-19T17:16:15.600 に答える
1

生成された画像を表示する最も簡単な方法は、それを QLabel に割り当てることです。QLabel::SetPixmap()独自のウィジェットの代わりに使用します。

その仕事をどうしようか…

まず、十分なサイズ (1024x1024 またはそれ以下) の個別の画像を多数作成します。

その後、その画像のマトリックスを作成します。そのイメージを 1 つずつファイルに読み書きすることができます。画像の一部を表示する必要がある場合は、必要な画像をファイルから読み取るだけです。

ファイル内の配置には、次のようなフィールドを持つ単純なルックアップ テーブルを使用します xId yId offset length

ズームを高速に操作するには、マトリックスを追加するだけです。次のマトリックスはベースの 2 倍小さくする必要があり、1 つのイメージが残るまで続けます (最も遠いズームの場合)。

于 2011-07-19T16:08:16.600 に答える