
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 をピクセルサイズで描画」するメソッドは何でしょう?探し方が悪いのか、見つけられません。
No.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);
にして下さい。
再度、回答ありがとうございます。
>e.Graphics.DrawImage(img, p.X, p.Y, img.Width, img.Height);
できました!!
No.1
- 回答日時:
「元の物理サイズで描画」ってのは「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で作られてる」かどうか、確かめる事をお勧めします。
回答ありがとうございます。
>「元の物理サイズで描画」ってのは「1ピクセルを1ピクセルで描画」って意味です。
>「元画像が1024*768」であれば、画像は1024*768で表示されます。
私も、そのような表示を希望するのですが、実際は違うんで困っています。
なお、元画像は1024*768のbmpファイルではなく、1024*768のjpegファイルです。
>一度「本当に、全部の画像が、1024*768で作られてる」かどうか、確かめる事をお勧めします。
確かめました。ためしに2つの写真で確かめましたが、ビューア(Vix)ではちゃんと同じ大きさで表示されますが、C#で作成したソフトでは違った大きさに表示されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB2010のChartで、何本もの線を...
-
DrawLineで引いた線が消えてし...
-
線の描画速度
-
ビットマップに描画をしてピク...
-
ExcelVBAのコントロールの種類...
-
どう増強すべきか
-
複数のコマンドボタン(VBAで)...
-
VBA シートのボタン名を変更し...
-
パソコンへの「Dropbox...
-
AccessVBAで「dim dbs as datab...
-
Debug.exe実行時にWinMainCRTSt...
-
【マクロ】エラー【#DIV/0!】が...
-
フォーム1が開いているのならMs...
-
VB.NETでラベルの大きさってど...
-
クリックイベントなのに、2回ク...
-
[VB.net] ボタン(Flat)のEnable...
-
Do While中のVBAアプリケーショ...
-
共通モジュールでDBへの接続と...
-
worksheetFunctionクラスのVloo...
-
Amazon api について。JANコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
PowerPoint の VBA
-
VC;;6.0のMFCで線を簡単に引け...
-
vb6のTEXTBOX
-
C# DrawImage 物理サイズでな...
-
for文の実行速度を遅くしたいの...
-
Pythonにおける物理のシミュレ...
-
MFCでのコンボボックスについて
-
C#を用いて描画する四角形の角...
-
円の頂点の求め方を知りたいです。
-
win32api複数のタイマーを同時...
-
給紙トレイをダイアログを使わ...
-
エクセルのレーダーチャート 0...
-
VB 6.0 PictureBox のプロパテ...
-
Excel VBA:コントロールボタン...
-
C#で壁の当たり判定と自キャラ...
-
VC++ ドラッグしながらの図の...
-
Word 描画オブジェクトを削除...
-
scilabでのグラフ描画時の軸設定
-
ピクチャーボックスでの折線グ...
おすすめ情報