- PR -

Graphics.DrawImage によるイメージの拡大について

1
投稿者投稿内容
凹っち
会議室デビュー日: 2007/04/27
投稿数: 2
投稿日時: 2007-04-27 15:02
お世話になります。

MSペイントでイメージの拡大をした時と同じように、自前のプログラムで指定
イメージを単純拡大したく、Graphics.DrawImageメソッドを使用して以下の様な
コードを記述しました。


public Bitmap bmp;

private void Form1_Load(object sender, EventArgs e)
{
  bmp = new Bitmap(@"c:\save.bmp");
}

// pictureBox1 のペイントイベント
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
  Rectangle DrawRect = new Rectangle(0, 0, bmp.Width * 8, bmp.Height * 8);
  e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
  e.Graphics.DrawImage(bmp, DrawRect);
}


処理の結果、pictureBox1には頭でイメージしたのと同じ様に拡大表示された…
と思ったのですが、良く見るとペイントの拡大結果と微妙に異なっていました。

どう異なっているのかを言葉で説明するのは中々難しいのですが、16x16を単純に
8倍する訳ですから、拡大後のサイズは128x128になっているハズです。

しかし実際に表示されている画像を見てみると124x124になっており、雰囲気的に
画像の描画開始位置を(-4,-4)とした様になっています。

私のやり方が悪いのか、Graphics.DrawImageの仕様なのか良く分からないのですが
ペイントと同じ結果を得られる拡大方法を教えて頂けないでしょうか?

尚、開発環境はWindows XP SP2 + VS2005(C#) + .NET2.0です。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-04-27 16:36
Draw前に

e.Graphics.PixelOffsetMode =
  System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
  又は
  System.Drawing.Drawing2D.PixelOffsetMode.Half

で、なんとかなりませんかね?
凹っち
会議室デビュー日: 2007/04/27
投稿数: 2
投稿日時: 2007-04-27 16:45
未記入さん、返信ありがとうございます。

掲示して頂いたコードを組み込んでみた所、HighQuality でも Half でも
望んだ結果を得る事が出来ました。

何故その様になるのかはまだ理解していないのですが、この辺りについて
は自力で答えに辿り着こうと思います。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)