C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 99 を表示中)
■59373 / )  画像拡大時のズレ
□投稿者/ B/B (3回)-(2011/05/23(Mon) 22:41:53)

分類:[C#] 

VisualStudio&C#にて、画像をPictureBoxに拡大表示すると、画像が若干左上に寄ってしまいます。(縮小時は問題ありません)

例えば、以下のようなサイズ8x8の画像を8倍で表示すると、画像が4ピクセルくらいズレてしまいます。
なので、左上の□が右下の□に比べて半分の大きさになっています。
□■□□□□■□
■■■■■■■■
□■□□□□■□
□■□□□□■□
□■□□□□■□
□■□□□□■□
■■■■■■■■
□■□□□□■□

具体的には、以下の様にすると再現できます。

1.C#でフォームアプリケーションを作成
2.フォーム内にPictureBoxを作成。Locationを0,0に設定
3.Paintイベント内にプログラムを以下のように追加
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
 //拡大後の画像が見やすいように補間方法を指定
 e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
 //画像の読み込み
 Bitmap img = new Bitmap("gazou.bmp");
 //画像を8倍に拡大して描画
 e.Graphics.DrawImage(img, 0, 0, 8 * img.Width, 8 * img.Height);
}

ちなみに、どんな画像であれ8倍拡大ならば4ピクセル、32倍ならば16ピクセル左上にずれていたので
私なりの仮説では、もともとPictureBoxに描画すると画像が0.5ずつ左上にずれているのではないかと考えています。

解決策として、PixelOffsetModeをHighQualityにしてから描画することでズレもなく表示できるようになりました。
しかし、他にも何か方法があるのではないか、どうしてズレが発生するのかが分からないので、分かる方がいらっしゃいましたら教えてください。
返信 編集キー/


管理者用

- Child Tree -