Tekst informacyjny o polityce Cookies Close   
    
 
         
• 1. Strona główna
• 2. Kontakt: e-Mail
 
         
• 1. Baza danych
• 2. Tabele i kwerendy
• 3. Formularze
• 4. Raporty
• 5. Moduły i makra
• 6. Obsługa błędów
 
    

II.   VBA 

    
• 1. Okna Accessa
• 2. Okna Formularzy
• 3.Okna Dialogowe
• 4. Tekst
• 5. Liczby
• 6. Pliki
• 7. Inne
 
    

III.   API 

    
• 1. Ogólnie o API
• 2. Funkcje API
• 3. System
• 4. Praca z oknami
• 5. Okna dialogowe
• 6. API - Inne
 
         
• 1. Bitmapy 24 Bit
• 2. GDI i HDC
• 3. Kody kreskowe
• 4. Formant Image
• 5. FreeImage.dll
 
    

V.   Inne 

    
• 1. Shell i MsDOS
• 2. Kontrolki
• 3. ६ԼҚ ਸ
• 4. Unikod

 
Odwiedzin:

Logo AccessFAQ• IV.5 FreeImage.dll - miniatury plików •

5.1 FreeImage.dll - Jak zrobić miniatury plików graficznych tzw. Thumbsy ?
5.2 FreeImage.dll - Jak zrobić konwerter plików graficznych ?
5.3 FreeImage.dll - Jak załadować różne typy plików graficznych i jak reskalować formant Image wraz ze zmianą wielkości formularza ?
5.4 FreeImage.dll - Jak uatrakcyjnić pokaz obrazków w kontrolce Image ?
5.5 FreeImage.dll - Jak zmienić jasność, kontrast i współczynnik gamma obrazu ?
 

O przykładach z użyciem biblioteki FreeImage.dll

    Po raz pierwszy bibliotekę FreeImage.dll na forum dyskusyjnym pl.comp.bazy-danych.msaccess przedstawił 24.02.2003 Krzysztof Ciuba w wątku Access + zdjęcia (Uwaga: mocno przydługawe) Poruszony był w nim problem wykonanie miniatur plików graficznych (thumbsów).

    Od tego czasu FreeImage.dll przeszła wiele zmian na lepsze. Najnowszą wersję biblioteki FreeImage.dll wraz z Wrapperem VB6 oraz opisem funkcji można pobrać ze strony: http://freeimage.sourceforge.net/download.html Jest licencjonowana jako GNU General Public License (GPL) lub FreeImage Public License (FIPL)

    W przedstawionych poniżej przykładach biblioteka FreeImage.dll jest (dla wygody użytkowników) dołączona do każdej przykładowej bazy. Po rozpakowaniu archiwum znajdować się będzie ona w katalogu bazy. W modułach standardowych zadeklarowano jedynie te funkcje z FreeImage.dll, które są niezbędne w danym konkretnym przykładzie.

 ΔΔΔ 

 

5.1 FreeImage.dll - Jak zrobić miniatury plików graficznych tzw. Thumbsy ?

    W najprostszym przypadku musimy mieć bibliotekę FreeImage.dll w folderze Environ$("WinDir") & "\system), a w module formularza zadeklarować poniższe funkcje i wywołać zbMakeThumbs (...)


    Bardziej rozbudowany przykład umożliwiający wybór wielu plików (w obrębie jednego folderu) i i utworzenie z tych miniatury plików (thumbsy) znajduje się na:
   Przykład:  • bmp34a_01  •  906 KB  •  status: FREE  Pobrano    razy   


Private Const FIF_UNKNOWN = -1&
Private Const FISO_SAVE_DEFAULT = 0&
Private Const FILO_LOAD_DEFAULT = 0&

Private Declare Function FreeImage_GetFileType _
Lib "FreeImage.dll" _
Alias "_FreeImage_GetFileType@8" ( _
ByVal FileName As String, _
Optional ByVal Size As Long = 0) As Long
Private Declare Function FreeImage_Load _
Lib "FreeImage.dll" _
Alias "_FreeImage_Load@12" ( _
ByVal fif As Long, _
ByVal FileName As String, _
Optional ByVal flags As Long = _
FILO_LOAD_DEFAULT) As Long
Private Declare Sub FreeImage_Unload _
Lib "FreeImage.dll" Alias _
"_FreeImage_Unload@4" (ByVal dib As Long)
Private Declare Function FreeImage_MakeThumbnail _
Lib "FreeImage.dll" _
Alias "_FreeImage_MakeThumbnail@12" ( _
ByVal dib As Long, _
ByVal max_pixel_size As Long, _
Optional ByVal convert As Boolean = True) As Long
Private Declare Function FreeImage_SaveInt _
Lib "FreeImage.dll" Alias _
"_FreeImage_Save@16" (ByVal fif As Long, _
ByVal dib As Long, ByVal FileName As String, _
Optional ByVal flags As Long = _
FISO_SAVE_DEFAULT) As Long


' tworzy z pliku źródłowego sSrcFilePath miniaturę pliku (thumbs) o maksymalnej wysokości (szerokości)= lMaxSizePix i zapisuje na dysk (sDstFilePath) jako plik tego samego typu co plik wejściowy, przy powodzeniu zwraca 1, przy błędzie 0
Private Function zbMakeThumbs(sSrcFilePath As String, _
sDstFilePath As String, _
lMaxSizePix As Long) As Long
Dim lRet As Long
Dim dib As Long
Dim lFileType As Long

    If Len(Dir(sSrcFilePath)) = 0 Then
        MsgBox "Brak źródłowego pliku graficznego !"
        Exit Function
    End If

    If Len(Dir(sDstFilePath)) > 0 Then
        MsgBox "Docelowy plik graficzny już istnieje !"
        Exit Function
    End If

    lFileType = FreeImage_GetFileType(sSrcFilePath)
    If lFileType = FIF_UNKNOWN Then
        MsgBox "Nieznany typ pliku graficznego !"
        Exit Function
    End If

    dib = FreeImage_Load(lFileType, sSrcFilePath, FILO_LOAD_DEFAULT)
    If dib = 0 Then
        MsgBox "Błąd odczytu pliku graficznego !"
        Exit Function
    End If

    dib = FreeImage_MakeThumbnail(dib, lMaxSizePix)
    lRet = FreeImage_SaveInt(lFileType, dib, sDstFilePath)
    Call FreeImage_Unload(dib)

    If lRet = 0 Then
        MsgBox "Błąd zapisu pliku graficznego !"
        Exit Function
    End If

    zbMakeThumbs = 1

End Function


' przykładowe wywołanie:
Private Sub btnTest_Click()

    Call zbMakeThumbs("C:\MojPlik.jpg", "C:\MojPlik_small.jpg", 64)

End Sub

 ΔΔΔ 

 

5.2 FreeImage.dll - Jak zrobić konwerter plików graficznych ?


    Bardziej rozbudowany przykład, umożliwiający wybór wielu plików graficznych (w obrębie jednego folderu) i  ich konwersję na inny typ pliku znajduje się na:
   Przykład:  • bmp34a_02  •  912 KB  •  status: FREE  Pobrano    razy   


Private Const FISO_SAVE_DEFAULT = 0
Private Const FILO_LOAD_DEFAULT = 0

Private Declare Function FreeImage_GetFileType _
Lib "FreeImage.dll" _
Alias "_FreeImage_GetFileType@8" ( _
ByVal FileName As String, _
Optional ByVal Size As Long = 0) As Long
Private Declare Function FreeImage_Load _
Lib "FreeImage.dll" _
Alias "_FreeImage_Load@12" ( _
ByVal fif As Long, _
ByVal FileName As String, _
Optional ByVal flags As Long = _
FILO_LOAD_DEFAULT) As Long
Private Declare Sub FreeImage_Unload _
Lib "FreeImage.dll" Alias _
"_FreeImage_Unload@4" (ByVal dib As Long)
Private Declare Function FreeImage_SaveInt _
Lib "FreeImage.dll" Alias _
"_FreeImage_Save@16" (ByVal fif As Long, _
ByVal dib As Long, ByVal FileName As String, _
Optional ByVal flags As Long = _
FISO_SAVE_DEFAULT) As Long

' niektóre z popularniejszych obsługiwanych typów plików graficznych
Private Const FIF_UNKNOWN = -1
Private Const FIF_BMP = 0
Private Const FIF_JPEG = 2
Private Const FIF_PNG = 13
Private Const FIF_TARGA = 17
Private Const FIF_TIFF = 18



' konwertuje graficzny plik źródłowy sSrcFilePath na format docelowy lDstFileType i zapisuje na dysk jako sDstFilePath, przy powodzeniu zwraca 1, przy błędzie 0
Private Function zbConvertFile(sSrcFilePath As String, _
sDstFilePath As String, _
lDstFileType As Long) As Long
Dim lRet As Long
Dim dib As Long
Dim lSrcFileType As Long

    If Len(Dir(sSrcFilePath)) = 0 Then
        MsgBox "Brak źródłowego pliku graficznego !"
        Exit Function
    End If

    If Len(Dir(sDstFilePath)) > 0 Then
        MsgBox "Docelowy plik graficzny już istnieje !"
        Exit Function
    End If

    lSrcFileType = FreeImage_GetFileType(sSrcFilePath)
    If FreeImage_GetFileType(sSrcFilePath) = FIF_UNKNOWN Then
        MsgBox "Nieznany typ pliku graficznego !"
        Exit Function
    End If

    dib = FreeImage_Load(lSrcFileType, sSrcFilePath, FILO_LOAD_DEFAULT)
    If dib = 0 Then
        MsgBox "Błąd odczytu pliku graficznego !"
        Exit Function
    End If

    lRet = FreeImage_SaveInt(lDstFileType, dib, sDstFilePath)
    Call FreeImage_Unload(dib)

    If lRet = 0 Then
        MsgBox "Błąd zapisu pliku graficznego !"
        Exit Function
    End If

    zbConvertFile = 1

End Function


' przykładowe wywołanie:
Private Sub btnTest_Click()

    Call zbConvertFile("C:\zb_DSCN5708.jpg", _
"C:\zb_DSCN5708.bmp", FIF_BMP)

End Sub

 ΔΔΔ 

 

5.3 FreeImage.dll - Jak załadować różne typy plików graficznych i jak reskalować formant Image wraz ze zmianą wielkości formularza ?

    W części dotyczącej reskalowania, jest to kontynuacja przykładu "4.5 ..... oraz jak reskalować formant Image wraz ze zmianą rozmiaru formularza ?" tym razem zrealizowany przy pomocy biblioteki FreeImage.dll


   Przykład:  • bmp34a_03  •  2 677 KB  •  status: FREE  Pobrano    razy   


 ΔΔΔ 

 

5.4 FreeImage.dll - Jak uatrakcyjnić pokaz obrazków w kontrolce Image ?

    Jest to kontynuacja przykładu "Jak uatrakcyjnić pokaz obrazków w kontrolce Image ?" zrealizowanego przy pomocy biblioteki FreeImage.dll


   Przykład:  • bmp34a_04  •  1 153 KB  •  status: FREE  Pobrano    razy   


Jak przykład działa:

Etap I. zbFI_CreateDC (sSrcFile As String, _
lSlideType As Long, _
lSleep As Long) As Long
  1. FreeImage_Load (...) - załadowany zostaje plik graficzny.
  2. FreeImage_ConvertTo24Bits (...) - załadowany plik jest konwertowany do bitmapy o 24-bitowej głębi kolorów.
  3. Image FreeImage_Rescale (...) - zmiejszenie rozmiaru obrazu do wielkości ekranowej formantu Image. Od tej pory wszystkie operacje przeprowadzane są tylko na tej bitmapie. Ma to na celu przyspieszenie wykonywania i prezentowania operacji graficznych na pliku wejściowym.
  4. myCreateDIBSection (...) - tworzymy dwie bitmapy: źródłową (src.hBmp) i docelową (dst.hBmp).
  5. FreeImage_PaintDC (...) - malujemy na bitmapie źródłowej pomniejszoną bitmapę.
Etap II. zbFI_PaintDC (lSlideType As Long, lSleep As Long) As Long
  1. Za pomocą funkcji API BitBlt (...) przekopiowujemy w petli For ... Next odpowiednie fragmenty (zależne od licznika pętli) z bitmapy źródłowej na bitmapę docelową i sukcesywnie aktualizujemy formant Image.
  2. dla wartości lSlideType = 7 efektem jest stopniowe rozjaśnianie obrazu. Jest ono realizowane za pomocą funkcji FreeImage_AdjustBrightnessInt (...)
  3. Przykład zawiera 7 różnych sposobów wyświetlania obrazu w formancie Image.

 ΔΔΔ 

 

5.5 FreeImage.dll - Jak zmienić jasność, kontrast i współczynnik gamma obrazu ?


Jasność, kontrast, współczynnik gamma bitmapy

   Przykład:  • bmp34a_05  •  1 050 KB  •  status: FREE  Pobrano    razy   


 ΔΔΔ