
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で質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 複数の写真を1枚に印刷 5 2023/05/05 22:41
- 美術・アート デッサンで使うカルトン、A4サイズでも使える? 1 2022/03/22 18:13
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- HTML・CSS ブロックエディターで作りつつ、画像を挿入しつつ、画像にスタイルシートのコードを付ける方法はありますか 1 2022/08/23 18:46
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- その他(ソフトウェア) 画像の拡大率を固定したまま次の画像を表示出来るビューアを探しています 2 2022/05/13 17:19
- Photoshop(フォトショップ) 写真のサイズ変更 1 2022/08/07 16:00
- PHP PHP echo バックスラッシュの使い方 img要素 2 2023/01/08 22:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
C#を用いて描画する四角形の角...
-
VB.NETでphotoshopのレイヤーの...
-
c言語 ちらつき
-
MFCでのコンボボックスについて
-
円の頂点の求め方を知りたいです。
-
PictureBoxのダブルバッファリ...
-
DrawLineで引いた線が消えてし...
-
C# DrawImage 物理サイズでな...
-
Bitmap画像の消去について
-
VB 6.0 PictureBox のプロパテ...
-
Excel VBA:コントロールボタン...
-
WindowsAPIの、ウインドウの表...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
実行時エラー 438になった時の...
-
VBA(エクセル)で自動的にボタン...
-
「Columns("A:C")」の列文字を...
-
ユーザーフォームを表示中にシ...
-
テキストボックス中の文字列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
給紙トレイをダイアログを使わ...
-
C#を用いて描画する四角形の角...
-
vb6のTEXTBOX
-
PowerPoint の VBA
-
for文の実行速度を遅くしたいの...
-
win32api複数のタイマーを同時...
-
MFCでのコンボボックスについて
-
VB.netで図形描画ができません^^;
-
花火のアルゴリズム
-
図の削除直後の再描画
-
円の頂点の求め方を知りたいです。
-
C# DrawImage 物理サイズでな...
-
VB.NETでグラフィックを描くと...
-
PictureBoxのダブルバッファリ...
-
色を合成するには
-
C++/CLIを用いて画像をクリップ...
-
【Delphi】 Canvasへの描画につ...
-
エクセルのレーダーチャート 0...
-
C#で壁の当たり判定と自キャラ...
おすすめ情報