注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。
画像を拡大、縮小(スケーリング)して表示する方法は「画像を拡大、縮小(スケーリング)して描画する」で紹介しましたが、補間方法(内挿方法)を指定するとよりきれいに拡大、縮小できかもしれません。
Graphics.InterpolationModeプロパティにより、画像を拡大、縮小して描画する時の補間方法を変更することができます。このプロパティに設定できるInterpolationMode列挙体のメンバには、以下のようなものがあります。説明は、MSDNからの抜粋です。
InterpolationMode列挙体のメンバ名 | 補間方法 | 説明 |
---|---|---|
Bicubic | 双三次補間、バイキュービック法 | 事前フィルター処理は実行されません。このモードは、イメージを元のサイズの 25% 以下にするような縮小処理には適していません。 |
Bilinear | 双一次補間、バイリニア法 | 事前フィルター処理は実行されません。このモードは、イメージを元のサイズの 50% 以下にするような縮小処理には適していません。 |
Default | 既定のモード。(Bilinear?) | |
High | 高品質補間 | |
HighQualityBicubic | 高品質双三次補間 | 事前フィルター処理が適用され、高品質の縮小処理が実行されます。このモードを使用すると、変換後のイメージが高品質になります。 |
HighQualityBilinear | 高品質双一次補間 | 事前フィルター処理が適用され、高品質の縮小処理が実行されます。 |
Invalid | QualityMode列挙体の要素Invalid(無効なモードを指定)と等価。 | |
Low | 低品質補間 | |
NearestNeighbor | 最近傍補間、ニアレストネイバー法 |
以上の補間方法について「アスキーデジタル用語辞典」では次のように説明されています。
「ニアレストネイバー法はその名の通り、単純に元の画像を水増し(拡大)、間引き(縮小)する方式。ジャギーが目立ちやすく階調のある画像のリサイズにはむいていない。バイリニア法、バイキュービック法は元の画像の周辺の複数の画像を数学的に算出して拡大、縮小する。バイキュービック法のほうが計算が複雑で精度が高く階調のある画像のリサイズにむいている。」
一般的に高品質の補間方法を指定したときのほうが描画に時間がかかります。
以下の例では、最近傍補間と高品質双三次補間によって画像を縮小表示しています。
'Imports System.Drawing '補間方法を指定して画像を縮小して描画する '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(canvas) 'Bitmapオブジェクトの作成 Dim image = New Bitmap("C:\サンプル.jpg") '補間方法として最近傍補間を指定する g.InterpolationMode = _ System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor '画像を縮小して描画する g.DrawImage(image, 0, 0, 150, 120) '補間方法として高品質双三次補間を指定する g.InterpolationMode = _ System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic '画像を縮小して描画する g.DrawImage(image, 160, 0, 150, 120) 'BitmapとGraphicsオブジェクトを破棄 image.Dispose() g.Dispose() 'PictureBox1に表示する PictureBox1.Image = canvas
//using System.Drawing; //補間方法を指定して画像を縮小して描画する //描画先とするImageオブジェクトを作成する Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height); //ImageオブジェクトのGraphicsオブジェクトを作成する Graphics g = Graphics.FromImage(canvas); //Bitmapオブジェクトの作成 Bitmap image = new Bitmap(@"C:\サンプル.jpg"); //補間方法として最近傍補間を指定する g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; //画像を縮小して描画する g.DrawImage(image, 0, 0, 150, 120); //補間方法として高品質双三次補間を指定する g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //画像を縮小して描画する g.DrawImage(image, 160, 0, 150, 120); //BitmapとGraphicsオブジェクトを破棄 image.Dispose(); g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。