次の方法で共有


方法 : 自動スケーリングを解除してパフォーマンスを向上させる

GDI+ では、イメージを描画すると自動的にそのイメージがスケーリングされ、これによりパフォーマンスが低下する場合があります。 別の方法として、描画先の四角形の寸法を DrawImage メソッドに渡すと、イメージのスケーリングを制御できます。

たとえば、次の DrawImage メソッドの呼び出しでは、左上隅の値 (50, 30) を指定していますが、描画先の四角形は指定していません。

e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)
e.Graphics.DrawImage(image, 50, 30);  // upper-left corner at (50, 30)

これは、指定する引数の数が少なくて済むという点では一番簡単な形式の DrawImage メソッドですが、必ずしも効率的な形式ではありません。 GDI+ によって使用される解像度 (通常は 96 dpi) が Image オブジェクトに格納されている解像度と異なる場合、イメージは DrawImage メソッドによってスケーリングされます。 たとえば、Image オブジェクトの幅が 216 ピクセルで、格納されている水平方向の解像度の値が 72 dpi であるとします。 216/72 は 3 なので、DrawImage は、96 dpi の解像度で幅が 3 インチになるようにイメージをスケーリングします。 つまり、DrawImage は、96 × 3 = 288 ピクセルの幅でイメージを表示します。

画面解像度が 96 dpi ではない場合でも、GDI+ は解像度が 96 dpi であるものとしてイメージをスケーリングします。 これは、GDI+ Graphics オブジェクトがデバイス コンテキストに関連付けられているためです。一般的に、GDI+ がデバイス コンテキストに画面解像度を照会すると、実際の画面解像度がどうなっているかにかかわらず、結果は 96 になります。 DrawImage メソッドで描画先の四角形を指定すると、自動スケーリングを解除できます。

使用例

同じイメージを 2 回描画する例を次に示します。 1 回目は、描画先の四角形の幅と高さを指定していないため、イメージが自動的にスケーリングされます。 2 回目には、描画先の四角形の幅と高さ (ピクセル単位) が、元のイメージの幅と高さと同じになるように指定されています。 2 回描画された結果のイメージを次の図に示します。

スケール テクスチャ

Dim image As New Bitmap("Texture.jpg")

e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
Image image = new Bitmap("Texture.jpg");

e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);

コードのコンパイル

前述の例は Windows フォームと一緒に使用することが想定されていて、Paint イベント ハンドラーのパラメーターである PaintEventArgs e が必要です。 Texture.jpg は、システム上で有効なイメージの名前とパスに置き換えてください。

参照

その他の技術情報

イメージ、ビットマップ、およびメタファイル

イメージ、ビットマップ、アイコン、およびメタファイルの操作