PictureBoxに元の画像の縦横比を保ったまま画像表示するには?

解決


xyz  2004-02-06 13:22:07  No: 111701  IP: [192.*.*.*]

PictureBoxに画像表示することは出来るのですが、
表示させる元の画像の縦横比を保ったまま、
規定のPictureBox内に画像を表示させるには
どのようにすれば良いのでしょうか?
画像の縦・横の長さ。PictureBoxの縦・横の長さは
取得できていると思うのですが、それを元に計算した
長さの画像に変換してPictureBox内に表示させることが出来ません。

宜しくお願い致します。
ちなみにWinXP・VB.Net使用です。

編集 削除
Y2  2004-02-06 14:25:49  No: 111702  IP: [192.*.*.*]

画像のWidth / PictureBoxのWidth
画像のHeight / PictureBoxのHeight
↑の二つの倍率を比べて小さいほうの倍率で画像を拡大縮小してあげればいいと思います。(分母分子の関係が逆の場合、大きいほうの倍率を選択)
あとは、

'画像の準備
Dim Img As Image
Img = New Bitmap("画像のパス")
'画像の拡大縮小描画
Dim G As Graphics = PictureBox1.CreateGraphics
G.DrawImage(Img, Img.Width * 倍率, Img.Height * 倍率, Img.Width, Img.Height)
G.Dispose()

のような感じで描画すればいいと思います。
ちなみに、画像の変換をどういった用途に使おうとしているのですか?
場合によっては、↑のGDI+の機能を使わないほうがいい場合もありますので。

編集 削除
xyz  2004-02-09 14:38:51  No: 111703  IP: [192.*.*.*]

Y2さん  お返事ありがとうございます。

用途はリストボックスで選択した画像を表示させてユーザーに確認させたいだけです。
Y2さんに教えていただいたように組んではいたのですがPictureBoxにすら表示されない状態です。

******************************************************************
Dim strUrl As String = ComBox.Text & "\" & FLName   ' 画像の格納Pathの取得
Dim G As Graphics = PictureBox.CreateGraphics
Dim MyImg As Bitmap = New Bitmap(strUrl)
Dim intWidth As Single = MyImg.Width
Dim intHeight As Single = MyImg.Height
Dim Picturex As Single = PictureBox.Width
Dim Picturey As Single = PictureBox.Height
  ' 縦横比の格納変数
Dim Comparisonx As Double = Picturex / intWidth
Dim Comparisony As Double = Picturey / intHeight
  ' 倍率の格納変数
Dim magnification As Double

If Comparisonx >= Comparisony Then
   magnification = Comparisony
ElseIf Comparisonx < Comparisony Then
   magnification = Comparisonx
End If

'画像の拡大縮小描画
G.DrawImage(MyImg, intWidth * magnification, intHeight * magnification, intWidth, intHeight)
G.Dispose()
MyImg.Dispose()
End If
******************************************************************

ソースは上記の通りです。
Private Sub ListBox_SelectedIndexChanged(ByVal sender As 
System.Object, ByVal e As System.EventArgs) Handles ListBox.SelectedIndexChanged
〜ENDの中に書き込んでるからいけないのですかね?
そんなわけないですよね〜。。。

すみませんが、もう少し教えてください。お願い致します。

編集 削除
xyz  2004-02-09 15:15:51  No: 111704  IP: [192.*.*.*]

Y2さん  ありがとうございました。
無事に縮小表示できました。

PictureBox.CreateGraphicsを使用せずにPictureBox.Imageに
Dim MyImg2 As Bitmap = New Bitmap(MyImg, PicWidth, PicHeight)
と縮小させたMyImg2というのを入れればOKでした。

編集 削除