--アスペクト比を崩さず拡大、縮小--



う〜ん、このネタ速攻で終わっちゃう気がするけど・・・画像関連扱う上での基本中の基本なんで一応扱います
まずアスペクト比とはなにか?から行きたいと思います。
アスペクト比ってのは縦横の比です。いえ、多分そうです。実は詳しくは知らないんですが、いろんなHP見てるとどうもそんな気がします。こう考えても支障が無いんでこう考えてください。

ってことで用は縦横の比を崩さずに伸び縮みさせれば良いわけです。
こうなるともう中学生の算数ですね。これ以上説明すると俺が馬鹿みたいなんで下にVBのコード載せて終わりにします。

Private Sub Loadpict(PictureName As String)
Dim Temp As Long
On Error GoTo errorline

'Image1ってのはImageコントロールのことです。
'全体を通してWithで括っても良かったんだけど読み取りにくくなるかなぁなんて

With Image1
  'Stretch = Falseにして元の大きさで読み込みます
  .Stretch = False
  'Visible = Falseなのは表示されちゃみっともないから(^^;
  .Visible = False
  .Picture = LoadPicture(PictureName)
End With

'別に↓の判断せずに処理しても良いんだけど
'私は拡大ってのがあまり好きじゃないんで・・・
'この判断を抜かせば拡大されるはずです

If Image1.Height > Me.ScaleHeight Then
  Image1.Stretch = True
  Temp = Image1.Height
  '↓の33ってのは好みで・・・上下に少しも隙間が無いのは気持ち悪いんで付けてます
  Image1.Height = Me.ScaleHeight - 33
  '↓の計算がアスペクト比を崩さず縮小する計算です
  'たいしたこと無いですね(^^;

  Image1.Width = Image1.Width * Image1.Height / Temp
End If

'縦のときと同じです
If Image1.Width > Me.ScaleWidth Then
  Temp = Image1.Width
  Image1.Stretch = True
  Image1.Width = Me.ScaleWidth - 26
  Image1.Height = Image1.Height * Image1.Width / Temp
End If

'真ん中に表示ってのがすきなんで・・・
With Image1
  .Top = (Me.ScaleHeight - .Height) / 2
  .Left = (Me.ScaleWidth - .Width) / 2
  '↓これをしなきゃ表示されないよ〜
  .Visible = True
End With

Exit Sub
errorline:
Call MsgBox("画像ファイルでない可能性があります。" )

End Sub


ふぅ本当に早く終わってやんの

-Back-