tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 読み込んだ画像の縮小表示について
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。