タイトル | : Re^3: 読み込んだ画像の縮小表示について |
記事No | : 16037 |
投稿日 | : 2014/11/30(Sun) 11:16 |
投稿者 | : マサタロウ |
どうも。
縮小表示の時に画像サイズの複数の条件により同様のコードがある為、 画像サイズが縦横ビューアーの画面より大きい場合のコードを記述します。
しかし、投稿用のコードを作成するために新しくプロジェクトを作成して 以下のコードを実行してみると、自作のビューアーと以下のコードで 同じサイズの画像ファイルを開いた時に以下の場合は線が表示されません でした。また、開発環境のXPで自作のビューアーで確認したら線が表示 されませんでした。以下のコードはVista、Xpともに線が表示されません でした。
・APIは追加したモジュールファイルに宣言。
・PictureBoxのMouseUpイベントでコモンダイアログを呼び出して ファイルパスを取得、別プロシージャにあるコードをCallで呼び出す。
・呼び出されたプロシージャで、Image1に画像を表示し、縮小表示させる 別プロシージャを呼び出す。
Dim ret As Variant '宣言セクションで宣言
Private Sub Picture4_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
CommonDialog1.DialogTitle = "ファイルを開く" CommonDialog1.filename = "" CommonDialog1.Filter = "画像ファイル(*.gif;*.jpg;*.png;*.ico;*.bmp)|*.gif;*.jpg;*.png;*.ico;*.bmp" CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.ShowOpen Call mF_FOPEN
End Sub
Sub mF_FOPEN()
Image1.Picture = LoadPicture(CommonDialog1.filename)
Call mG_Window
End Sub
Sub mG_Window()
Dim P(1) As Long
P(0) = Image1.Width P(1) = Image1.Height
Image1.Stretch = False
If Image1.Height > Picture1.Height And Image1.Width > Picture1.Width Then
Picture2.Height = Image1.Height Picture2.Width = Image1.Width
If Picture2.Height >= Picture2.Width Then
For mShuku1 = 1 To Image1.Height P(1) = P(1) / 1.1 If P(1) < Picture1.Height Then Image1.Height = P(1) Exit For End If Next For mShuku2 = 1 To Image1.Width P(0) = P(0) / 1.1 Image1.Width = P(0) If mShuku2 = mShuku1 Then If Image1.Width > Picture1.Width Then For mShuku1 = 1 To Image1.Width P(0) = P(0) / 1.1 P(1) = P(1) / 1.1 Image1.Width = P(0) Image1.Height = P(1) If Image1.Width < Picture1.Width Then Exit For Next End If Exit For End If Next
Picture2.Picture = Image1 Picture3.Height = Image1.Height Picture3.Width = Image1.Width ret = SetStretchBltMode(Picture3.hdc, HALFTONE) ret = StretchBlt(Picture3.hdc, 0, 0, Picture3.Width, Picture3.Height, _ Picture2.hdc, 0, 0, Picture2.Width, Picture2.Height, SRCCOPY) ret = SetBrushOrgEx(Picture3.hdc, 0, 0, 0)
MsgBox ret 'ret = 1
Image1.Top = (Picture1.Height - Image1.Height) / 2 '画像を中央にする。 Image1.Left = (Picture1.Width - Image1.Width) / 2 '画像を中央にする。 Picture3.Top = Image1.Top Picture3.Left = Image1.Left Picture3.Refresh
End If
End If
End Sub
|