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+ で使用される解像度 (通常は 1 インチあたり 96 ドット) が、 Image オブジェクトに格納されている解像度と異なる場合、 DrawImage メソッドはイメージをスケーリングします。 たとえば、 Image オブジェクトの幅が 216 ピクセルで、格納されている水平解像度の値が 72 ドット/インチとします。 216/72 は 3 であるため、 DrawImage は 1 インチあたり 96 ドットの解像度で幅が 3 インチになるようにイメージをスケーリングします。 つまり、 DrawImage は幅が 96 x 3 = 288 ピクセルの画像を表示します。
画面解像度が 96 ドット/インチと異なる場合でも、GDI+ は画面解像度が 96 ドット/インチであるかのようにイメージをスケーリングする可能性があります。 これは、GDI+ Graphics オブジェクトがデバイス コンテキストに関連付けられているためです。GDI+ がデバイス コンテキストに対して画面解像度を照会すると、実際の画面解像度に関係なく、結果は通常 96 になります。 DrawImage メソッドで目的の四角形を指定することで、自動スケーリングを回避できます。
例
次の例では、同じイメージを 2 回描画します。 最初のケースでは、コピー先の四角形の幅と高さが指定されず、イメージが自動的に拡大縮小されます。 2 番目のケースでは、コピー先の四角形の幅と高さ (ピクセル単位) が、元の画像の幅と高さと同じであることを指定します。 次の図は、2 回レンダリングされた画像を示しています。
Image image = new Bitmap("Texture.jpg");
e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);
Dim image As New Bitmap("Texture.jpg")
e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
コードのコンパイル
前の例は Windows フォームで使用できるように設計されており、PaintEventArgs イベント ハンドラーのパラメーターである e
Paintが必要です。 Texture.jpg を、システムで有効なイメージ名とパスに置き換えます。
こちらも参照ください
.NET Desktop feedback