アプリ版:「スタンプのみでお礼する」機能のリリースについて

C# で、
Image img = new Bitmap(fileName);
Point p = this.PointToClient( new Point( e.X, e.Y ) );
で画像と描画位置を決め、
e.Graphics.DrawImage(img, p);
で、そこに画像を描画するのですが、写真によって、同じ1024*768ピクセルなのに、表示される大きさがばらばらです。
Graphics.DrawImage メソッド (Image, Point)の説明を読むと、「指定した位置に、指定した Image を元の物理サイズで描画します」とあり、「元の物理サイズで描画」に問題があることがわかりました。
質問ですが、「指定した位置に、指定した Image をピクセルサイズで描画」するメソッドは何でしょう?探し方が悪いのか、見つけられません。

A 回答 (2件)

追記と訂正。



>e.Graphics.DrawImage(img, p);
>で、そこに画像を描画するのですが

見落としたけど「画像サイズを指定してない」んですね。

だったらGraphics.DrawImageは「元のbmpファイルの中に書いてある解像度に従って、拡大縮小する」ので「大きさがバラバラ」で表示されますね。

私は「Graphics.DrawImageでは、元画像のサイズを指定するのが常識」だったので「まさか、元画像のサイズを指定しないで、Graphics.DrawImageを呼んでるとは、思いもしなかった」ので、見落としました。

で「Graphics.DrawImageは、元画像のサイズを指定すると1ピクセルを1ピクセルで描画する」ので、当然、そうしているのだとばかり思ってました。

e.Graphics.DrawImage(img, p);

e.Graphics.DrawImage(img, p.X, p.Y, img.Width, img.Height);
にして下さい。こうすれば「1ピクセルは1ピクセルで描画」します。

なお、画像のサイズがバラバラな場合に拡大縮小して、すべて1024*768で表示したいなら
e.Graphics.DrawImage(img, p.X, p.Y, 1024, 768);
にして下さい。
    • good
    • 1
この回答へのお礼

再度、回答ありがとうございます。

>e.Graphics.DrawImage(img, p.X, p.Y, img.Width, img.Height);
できました!!

お礼日時:2009/03/31 13:50

「元の物理サイズで描画」ってのは「1ピクセルを1ピクセルで描画」って意味です。



「元画像が1024*768」であれば、画像は1024*768で表示されます。

もし「表示される大きさがばらばら」って言うなら「読み込んだbmpファイルの画像の大きさがバラバラ」って事で「どの画像も1024*768だと思っていたのは、勘違い」です。

あくまでも「元画像が1024*768」であれば、画像は1024*768で表示されます。

もし「どの画像も、元のピクセルサイズを無視し、1024*768で表示したい」のであれば「元画像が1024*768より小さい場合は拡大処理、元画像が1024*768より大きい場合は縮小処理しなければならない」と言う事です。

もし「画像はどれも1024*768の筈だ。拡大や縮小は要らない」と言い張るなら、現状の通りGraphics.DrawImageメソッドで充分です。

Graphics.DrawImageは拡大縮小は行わず、常に「等倍で、ピクセルサイズで描画」しますから、もし本当に「すべての画像が1024*768で作られてる」なら、すべて同じ大きさで、1024*768の領域に描画される筈です。表示される大きさがバラバラになる事はありません。

一度「本当に、全部の画像が、1024*768で作られてる」かどうか、確かめる事をお勧めします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>「元の物理サイズで描画」ってのは「1ピクセルを1ピクセルで描画」って意味です。
>「元画像が1024*768」であれば、画像は1024*768で表示されます。
私も、そのような表示を希望するのですが、実際は違うんで困っています。
なお、元画像は1024*768のbmpファイルではなく、1024*768のjpegファイルです。
>一度「本当に、全部の画像が、1024*768で作られてる」かどうか、確かめる事をお勧めします。
確かめました。ためしに2つの写真で確かめましたが、ビューア(Vix)ではちゃんと同じ大きさで表示されますが、C#で作成したソフトでは違った大きさに表示されます。

お礼日時:2009/03/31 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!