tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
指定フォルダ内の画像ファイルをサムネイルで一覧表示(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2007/09/14 20:16
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル][描画・画像][]                                            *
* キーワード:リストビュー,イメージリスト,,,,                                  *
***********************************************************************************

元質問:画像をどのくらいの量なら、読み.. - はるか  2007/08/18-01:32No.9916

imageboxにフォルダの中にあるたくさんのjpg写真を読込んで、サムネイルを取り扱う動作をやりたいのですが
◆画像のサイズやパソコンの環境によっては、数が多すぎると重くなって動かないかもしれな
ということを懸念しています。
◆現在たくさんの写真を重ねて表示して、上の写真をドラッグで移動すると、写真が再表示sれようとして、画面がちらつきます。

1.実際のところ何メガ程度までなら問題なく動くのか
2.サムネイルファイルを作成して、再度、読み込むほうが、動作は軽くなるのか
3.bmpとjpgで「画像の形状大きさ」が同じ場合はjpgのほうが軽いのか?
4.画像がちらつかない方法はあるのか

-----------------------------------------------------------------------------------
Re^3: 画像をどのくらいの量なら.. - Starfish  2007/08/19-10:37 No.9923
-----------------------------------------------------------------------------------

イメージリスト、リストビュー、ピクチャボックス(2個)、コマンドボタンを貼り付けて、


Private Sub Command1_Click()
Dim lngImageSize        As Long
Dim strFolder           As String
Dim strFileType         As String
Dim strFileName         As String
Dim imgX                As ListImage
Dim itmX                As ListItem
Dim sngPosX             As Single
Dim sngPosY             As Single
Dim sngWidth            As Single
Dim sngHeight           As Single

    ' 設定部分
    lngImageSize = 64           ' サムネイルのサイズ
    strFolder = "C:\Temp\"      ' 対象のフォルダ
    strFileType = "jpg"         ' ファイルタイプ
    
    ' 実サイズで表示するコントロール
    Picture1.BorderStyle = vbBSNone
    Picture1.AutoSize = True
    Picture1.Visible = False
    
    ' サムネイルのサイズで表示するコンロトール
    Picture2.BorderStyle = vbBSNone
    Picture2.Width = lngImageSize * Screen.TwipsPerPixelX
    Picture2.Height = lngImageSize * Screen.TwipsPerPixelY
    Picture2.AutoRedraw = True
    Picture2.BackColor = vbWhite
    Picture2.Visible = False

    ' リストビューとイメージリストの初期化
    ListView1.Arrange = lvwAutoTop
    ListView1.ListItems.Clear
    Set ListView1.Icons = Nothing
    ImageList1.ListImages.Clear
    ImageList1.ImageHeight = lngImageSize
    ImageList1.ImageWidth = lngImageSize
    Picture2.Picture = Picture1.Image
    Set imgX = ImageList1.ListImages.Add(, "Dummy", Picture2.Picture)
    Set ListView1.Icons = ImageList1

    On Error Resume Next
    
    ' 全てのファイルを繰り返し
    strFileName = Dir(strFolder & "*." & strFileType)
    While strFileName <> ""
        Set itmX = ListView1.ListItems.Add(, , strFileName)
        Picture1.Picture = LoadPicture("")
        Picture1.Picture = LoadPicture(strFolder & strFileName)
        If Err.Number = 0 Then
            If Picture1.ScaleWidth <= lngImageSize * Screen.TwipsPerPixelX And _
               Picture1.ScaleHeight <= lngImageSize * Screen.TwipsPerPixelY Then
                sngPosX = (lngImageSize * Screen.TwipsPerPixelX -  _
                                                     Picture1.ScaleWidth) / 2
                sngWidth = Picture1.ScaleWidth
                sngPosY = (lngImageSize * Screen.TwipsPerPixelY - _
                                                  Picture1.ScaleHeight) / 2
                sngHeight = Picture1.ScaleHeight
            Else
                If Picture1.ScaleWidth > Picture1.ScaleHeight Then
                    sngWidth = lngImageSize * Screen.TwipsPerPixelX
                    sngPosX = 0
                    sngHeight = lngImageSize * Screen.TwipsPerPixelY * _
                                         Picture1.ScaleHeight / Picture1.ScaleWidth
                    sngPosY = (lngImageSize * Screen.TwipsPerPixelY - sngHeight) / 2
                Else
                    sngHeight = lngImageSize * Screen.TwipsPerPixelY
                    sngPosY = 0
                    sngWidth = lngImageSize * Screen.TwipsPerPixelX * _
                                        Picture1.ScaleWidth / Picture1.ScaleHeight
                    sngPosX = (lngImageSize * Screen.TwipsPerPixelX - sngWidth) / 2
                End If
            End If
            If sngWidth < Screen.TwipsPerPixelX Then sngWidth = Screen.TwipsPerPixelX
            If sngHeight < Screen.TwipsPerPixelY Then sngHeight = Screen.TwipsPerPixelY
            Picture2.Width = lngImageSize * Screen.TwipsPerPixelX
            Picture2.Height = lngImageSize * Screen.TwipsPerPixelY
            Picture2.Picture = LoadPicture("")
            Picture2.PaintPicture Picture1.Image, sngPosX, sngPosY, sngWidth, sngHeight
            Picture2.Picture = Picture2.Image
            Set imgX = ImageList1.ListImages.Add(, , Picture2.Picture)
            If Err.Number = 0 Then
                itmX.Icon = ImageList1.ListImages.Count
            Else
                If Err.Number = 7 Then
                    MsgBox "メモリ不足です。" & _
                        "イメージの表示サイズを小さくしてください。", vbCritical
                End If
            End If
        End If

        strFileName = Dir()
    Wend

    On Error Goto 0
    
End Sub

---------------------------------------------------------------------------
上記実行画面(画像をクリックすると元のサイズで見られます。)



 [スレッド一覧へ] [親スレッドへ]