2011-07-24 25 views
1

私はズームインして表示したいximageを持っています。動作しますが、ゆっくりと、そして私は大きなズームレベルに近づいたら、800%のように、クロールXlibで画像を遠くに拡大

allocate bigger image 
use nearest-neighbor interpolation to fill it in. 
put the whole image on a pixmap. 

:私は現在、単純なアプローチを取っています。しかし、Gimpは3200%にズームインしても、やはり気分が悪くなります。ここで取り上げるアプローチは何ですか?私は一度に1つの画面だけを満たすべきですか?しかし、スクロールについてはどうでしょうか?補間やXPutImage、XCopyAreaを実行しないと、それぞれの強制終了のパフォーマンスが低下します。

答えて

1

私はXlibの専門家ではありませんが、私の考えでは、画像全体の補間を計算するのではなく、ズームした部分だけを描画するのが良い方法です。

スクロールする場合、パフォーマンスを探している場合は、新しい位置にまだ表示されている古いズームの部分をコピーし、「検出された」ピクセルの補間を計算することができます。たとえば、スクロールダウンすると、前の画像の一番下をコピーして上に貼り付け、下に新しい目に見えるものを計算/描画することができます。

1

ほとんどの最新のX11アプリケーションでは、Xlibはまったく直接使用しません。私の推測では、GIMPはXImageの画像で作業するのではなく、ズームされた画像をバッファそのものにレンダリングしてウィンドウに描画するというものです。

+0

はい、Gimpはgdkを利用しますが、gdkはXlibまたはxcbを使用します。いずれにしても、共有メモリピックスマップ(私が検討していた別のもの)なしで、あなたはX11 PutImageリクエストを実行しています。 – Dave

+0

あるレベルでは、はい。しかし、Gimpは、キャンバス全体を1つのXImageに保存してXLib/X11にスケーリングを行わせることはほとんどありません。キャンバスがズーム/スクロールされるたびに、別のイメージをレンダリングする可能性が非常に高くなります。画面上のウィンドウより大きくない – duskwuff

+0

しかし、彼らはウィンドウに置くバッファー上で補間を実行するのですか、またはエクスポージャーごとに補間を実行しますか? – Dave