none
画像表示の方法について RRS feed

  • 質問

  • VS2008 C#を用いています。
    画像ビューワのような物を作成しているのですが、フォーム上に
    ピクチャボックスを置いてそこにピクチャボックスのPaintイベント
    でDrawImageをしているのですが、画像がピクチャボックスを
    置いてある部分にしか表示されません。
    SizeModeも勿論AutoSizeにしてあるのですが、何が不足して
    いるのでしょうか?
    Paintイベントでの画像表示は以下のようにしています。

    e.Graphics.DrawImage( Img, 0, 0, Img.Width, Img.Height );
    2009年12月16日 23:40

回答

  • Hongliangさんも書かれていますが、Imageプロパティに設定する方法とe.Graphics.DrawImageを使う方法は全く別物だということを言いたかったのです。e.Graphics.DrawImageはGDI+で直接描写しますので、PictureBoxはSizeModeがAutoSizeだろうがなんであろうが、GDI+で描画されたことはわかりません。
    一方、Imageプロパティにセットされた画像はPictureBoxは知ることができますから(プロパティにセットされているので)、SizeModeがAutoSizeになっていればその画像に合わせて自分自身のサイズを変えることができます。
    くどいようですが、e.Graphics.DrawImageはGDI+が描画、PicureBoxのImageプロパティはPictureBoxが描画しますので、後者はPictureBoxが自分のサイズを変えることができるのです。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク shimpo 2009年12月17日 1:30
    2009年12月17日 1:23
    モデレータ

すべての返信

  • PictureBox1.Image = Image.FromFile(@"hoge.jpg");
    のように Image プロパティを使った場合にサイズが変わるかと。
    2009年12月17日 0:34
  • PictureBox は、Image プロパティを使って手軽に画像を表示させるコントロールであって、基本的に自分で DrawImage するためのコントロールではありません。
    SizeMode = AutoSize も、Image プロパティに設定された Image の Size に自分の ClientSize を設定するものであり、ユーザが勝手に描いた画像のサイズは知りようがありません。
    2009年12月17日 0:38
  • こちらが参考になるのではないかと思います。

    PictureBoxのImageプロパティに関するよくある勘違い
    http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク shimpo 2009年12月17日 1:05
    • 回答としてマークされていない shimpo 2009年12月17日 1:06
    2009年12月17日 0:38
    モデレータ
  • こちらが参考になるのではないかと思います。

    PictureBoxのImageプロパティに関するよくある勘違い
    http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    元々上記サイトを参考にしていたんですが、上記サイトにもPictureBoxのPaintイベント
    でDrawImageすると記載されていたんですが、違うのでしょうか?
    2009年12月17日 1:08
  • こちらが参考になるのではないかと思います。

    PictureBoxのImageプロパティに関するよくある勘違い
    http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    元々上記サイトを参考にしていたんですが、上記サイトにもPictureBoxのPaintイベント
    でDrawImageすると記載されていたんですが、違うのでしょうか?
    2009年12月17日 1:09
  • Hongliangさんも書かれていますが、Imageプロパティに設定する方法とe.Graphics.DrawImageを使う方法は全く別物だということを言いたかったのです。e.Graphics.DrawImageはGDI+で直接描写しますので、PictureBoxはSizeModeがAutoSizeだろうがなんであろうが、GDI+で描画されたことはわかりません。
    一方、Imageプロパティにセットされた画像はPictureBoxは知ることができますから(プロパティにセットされているので)、SizeModeがAutoSizeになっていればその画像に合わせて自分自身のサイズを変えることができます。
    くどいようですが、e.Graphics.DrawImageはGDI+が描画、PicureBoxのImageプロパティはPictureBoxが描画しますので、後者はPictureBoxが自分のサイズを変えることができるのです。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク shimpo 2009年12月17日 1:30
    2009年12月17日 1:23
    モデレータ
  • なるほど。そうでしたか。
    という事はMFCのようにそれぞれ画像の位置管理やスクロールバーボックスの位置管理も
    自分で制御しないといけないんですね。
    2009年12月17日 1:30