Jump to content

Recommended Posts

Posted (edited)

This script creates a list of images and their description, you can also rotate images and save them in the right quality.

I would like to update the image in the Listview, when it is rotated by Gui2.
I tried to find a good solution, but without success. Could someone help me, thanks.:)

#include <APIResConstants.au3>
#include <GuiTab.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GDIPlus.au3>

 Global $hGUI2 = 1111,$hGUI1, $hButton3 ,$hButton1,$hButton2,$hButton3,$flip,$image2

_imagelist()

Func _imagelist()

    Global $inimg = @ScriptDir&"\img.ini"

    Global $idListview, $hImage

    Local $aArray2 = _FileListToArrayRec(@ScriptDir, "*.jpg", $FLTAR_FILES, 1, $FLTAR_SORT,$FLTAR_FULLPATH)
    $fileArray4 = UBound($aArray2) -1
    If $fileArray4 > 0 Then
    $hGUI1 = GUICreate("Image Album List "&$fileArray4, 800, 600)
    $idListview = GUICtrlCreateListView("", 2, 2, 800, 600, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($idListview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER))

    ; block resizing of columns
    ControlDisable($hGUI1, "", HWnd(_GUICtrlListView_GetHeader($idListview)))

    GUISetState()
    ; Load images
    $hImage = _GUIImageList_Create(64, 64,5,3)
    _GUICtrlListView_SetImageList($idListview, $hImage)
    ; Add columns
    _GUICtrlListView_AddColumn($idListview, "Image", 64)
    _GUICtrlListView_AddColumn($idListview, "Path", 350)
    _GUICtrlListView_AddColumn($idListview, "Caption",365)
    ;_GUICtrlListView_HideColumn($idListview, 1)
    _GDIPlus_Startup()
    Local $GDIpBmpLarge,$GDIpBmpResized,$GDIbmp

    For $y = 1 To $fileArray4
        $ini = IniWrite($inimg,$aArray2[$y],"caption",$aArray2[$y]) ;<<< run only the first time, then put a comment
        $GDIpBmpLarge = _GDIPlus_ImageLoadFromFile($aArray2[$y]) ;GDI+ image!
        $GDIpBmpResized = _GDIPlus_ImageResize($GDIpBmpLarge, 64,64) ;GDI+ imagez
        $GDIbmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($GDIpBmpResized) ;GDI image!
        $img = _GUIImageList_Add($hImage, $GDIbmp)
        _GUICtrlListView_SetImageList($idListview, $hImage, 1)

        ;Add items
        _GUICtrlListView_AddItem($idListview, "", $img) ;load image inside listview
        _GUICtrlListView_AddSubItem($idListview, $y-1,$aArray2[$y],1)
        _GUICtrlListView_AddSubItem($idListview, $y-1,IniRead($inimg,$aArray2[$y],"caption",""),2) ;load caption inside listview
        ;Clean
        _GDIPlus_BitmapDispose($GDIpBmpLarge) ;release GDI+ image!
        _GDIPlus_BitmapDispose($GDIpBmpResized);release GDI+ image!
        _WinAPI_DeleteObject($GDIbmp);release Obj!
    Next

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

     While 1
         $aMsg = GUIGetMsg(1)
         Switch $aMsg[1]
             Case $hGUI1
                 Switch $aMsg[0]
                     Case $GUI_EVENT_CLOSE
                         ExitLoop
                         GUIDelete($hGUI1)
                 EndSwitch
             Case $hGUI2
                 Switch $aMsg[0]
                     Case $GUI_EVENT_CLOSE
                         GUIDelete($hGUI2)
                         GUICtrlSetState ($idListview,$GUI_ENABLE)
                     Case $hButton1
                         $flip = 1
                         rotate($image2,$flip)
                     Case $hButton2
                         $flip = 4
                         rotate($image2,$flip)
                     Case $hButton3
                         $flip = 6
                         rotate($image2,$flip)
                 EndSwitch
         EndSwitch
     WEnd

    ;cleanup resources
    _GDIPlus_Shutdown()
    Else
        MsgBox("","","Images folder are empty")
    EndIf
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $hWndListView = $idListview
    If Not IsHWnd($idListview) Then $hWndListView = GUICtrlGetHandle($idListview)

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                    $path = IniRead("cfg.ini","PAGE","sourcedir","")
                     Local $iItemText = _GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),2)
                     Local $sValue = InputBox("Edit Image", "Enter your description.", ""," M100",400,150)
                     Local $iIndex = _GUICtrlListView_GetSelectedIndices($idListview)
                     _GUICtrlListView_SetItemText($idListview,$iIndex,$sValue,2)
                      If $sValue <> "" Then
                         IniWrite($inimg,_GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),1),"caption",$sValue)
                      Else
                          _GUICtrlListView_SetItemText($idListview,$iIndex,$iItemText,3)
                      EndIf

                Case $LVN_COLUMNCLICK ; A column was clicked
                    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)

                    _GUICtrlListView_SortItems($idListview, _GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),1))

                Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                    $image2 = _GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),1)
                    Global $colrbt = 0xFF0CAA, $colortxbt = 0xFFFFFF
                    $hGUI2 = GUICreate($image2, 800, 650, -1, -1);create a test gui to display the image
                    $hButton1 = GUICtrlCreateButton("Rotate", 10, 610, 120, 30)
                    GUICtrlSetBkColor(-1, $colrbt)
                    GUICtrlSetColor(-1,$colortxbt)
                    $hButton2 = GUICtrlCreateButton("Flip Horizontally", 140, 610, 120, 30)
                    GUICtrlSetBkColor(-1, $colrbt)
                    GUICtrlSetColor(-1,$colortxbt)
                    $hButton3 = GUICtrlCreateButton("Flip Vertically", 270, 610, 120, 30)
                    GUICtrlSetBkColor(-1, $colrbt)
                    GUICtrlSetColor(-1,$colortxbt)
                    GUISetState(@SW_SHOW)
                    rotate($image2,0)
                    GUICtrlSetState ($idListview,$GUI_DISABLE)

                    Return 0 ; allow the default processing
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func rotate($image2,$flip)
    _GDIPlus_Startup()
    Local $hImagex, $tData, $tParams
    $hImagex = _GDIPlus_ImageLoadFromFile($image2)
    $imgX = _GDIPlus_ImageGetWidth($hImagex)
    $imgY = _GDIPlus_ImageGetHeight($hImagex)
    $himage_Clone = _GDIPlus_BitmapCloneArea($hImagex, 0, 0, $imgX, $imgY,$GDIP_PXF24RGB)
    _GDIPlus_ImageDispose($hImagex)
    _GDIPlus_ImageRotateFlip($himage_Clone,$flip)
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI2) ;create a graphics object from a window handle
    $hImage_new2 = _GDIPlus_ImageResize($himage_Clone, 800,600)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hImage_new2, 0, 0) ;display rotated image

    ;Change image quality
    $clsid = _GDIPlus_EncodersGetCLSID("JPG");type
    $tParams = _GDIPlus_ParamInit(1)
    $tData = DllStructCreate("int Quality")
    DllStructSetData($tData, "Quality", 100) ;quality 0-100
    $pData = DllStructGetPtr($tData)
    _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
    $pParams = DllStructGetPtr($tParams)

    ;Save the new resized image.
    _GDIPlus_ImageSaveToFileEx($himage_Clone, $image2, $clsid, $pParams)

    ;clean
    _GDIPlus_ImageDispose($himage_Clone)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hImage_new2)
    _GDIPlus_Shutdown()
EndFunc

 

Edited by rootx
Posted (edited)

Use 

_GUIImageList_Replace

function to replace the image in the image list. The image must be in GDI format!

Btw, I don't know why this function is not in the help file although it is in GuiImageList.au3...

; #NO_DOC_FUNCTION# =============================================================================================================
; Name...........: _GUIImageList_Replace
; Description ...: Replaces an image with an icon or cursor
; Syntax.........: _GUIImageList_ReplaceIcon ( $hWnd, $iIndex, $hIcon )
; Parameters ....: $hWnd        - Handle to the control
;                  $iIndex      - Index of the image to replace.
;                  $hImage      - Handle to the bitmap that contains the image
;                  $hMask       - A handle to the bitmap that contains the mask.
;                  +If no mask is used with the image list, this parameter is ignored
; Return values .: Success      - True
;                  Failure      - False
; Author ........: Gary Frost (gafrost)
; Modified.......:
; Remarks .......: The _GUIImageList_Replace function copies the bitmap to an internal data structure.
;                  Be sure to use the _WinAPI_DeleteObject function to delete $hImage and $hMask after the function returns.
; Related .......:
; Link ..........:
; Example .......:
; ===============================================================================================================================
Func _GUIImageList_Replace($hWnd, $iIndex, $hImage, $hMask = 0)
    Local $aResult = DllCall("comctl32.dll", "bool", "ImageList_Replace", "handle", $hWnd, "int", $iIndex, "handle", $hImage, "handle", $hMask)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] <> 0
EndFunc   ;==>_GUIImageList_Replace

 

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted (edited)

 

Thx UEZ, it should work... but obviously I'm doing something wrong :o

please look here ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test

 

#include <APIResConstants.au3>
#include <GuiTab.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GDIPlus.au3>

 Global $hGUI2 = 1111,$hGUI1, $hButton3 ,$hButton1,$hButton2,$hButton3,$flip,$image2

_imagelist()

Func _imagelist()

    Global $inimg = @ScriptDir&"\img.ini"

    Global $idListview, $hImage

    Local $aArray2 = _FileListToArrayRec("C:\Users\rootx10\Desktop\x", "*.jpg", $FLTAR_FILES, 1, $FLTAR_SORT,$FLTAR_FULLPATH)
    $fileArray4 = UBound($aArray2) -1
    If $fileArray4 > 0 Then
    $hGUI1 = GUICreate("Image Album List "&$fileArray4, 800, 600)
    $idListview = GUICtrlCreateListView("", 2, 2, 800, 600, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($idListview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER))

    ; block resizing of columns
    ControlDisable($hGUI1, "", HWnd(_GUICtrlListView_GetHeader($idListview)))

    GUISetState()
    ; Load images
    $hImage = _GUIImageList_Create(64, 64,5,3)
    _GUICtrlListView_SetImageList($idListview, $hImage)
    ; Add columns
    _GUICtrlListView_AddColumn($idListview, "Image", 64)
    _GUICtrlListView_AddColumn($idListview, "Path", 350)
    _GUICtrlListView_AddColumn($idListview, "Caption",365)
    ;_GUICtrlListView_HideColumn($idListview, 1)
    _GDIPlus_Startup()
    Local $GDIpBmpLarge,$GDIpBmpResized,$GDIbmp

    For $y = 1 To $fileArray4
        $ini = IniWrite($inimg,$aArray2[$y],"caption",$aArray2[$y]) ;<<< run only the first time, then put a comment
        $GDIpBmpLarge = _GDIPlus_ImageLoadFromFile($aArray2[$y]) ;GDI+ image!
        $GDIpBmpResized = _GDIPlus_ImageResize($GDIpBmpLarge, 64,64) ;GDI+ imagez
        $GDIbmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($GDIpBmpResized) ;GDI image!
        $img = _GUIImageList_Add($hImage, $GDIbmp)
        _GUICtrlListView_SetImageList($idListview, $hImage, 1)

        ;Add items
        _GUICtrlListView_AddItem($idListview, "", $img) ;load image inside listview
        _GUICtrlListView_AddSubItem($idListview, $y-1,$aArray2[$y],1)
        _GUICtrlListView_AddSubItem($idListview, $y-1,IniRead($inimg,$aArray2[$y],"caption",""),2) ;load caption inside listview
        ;Clean
        _GDIPlus_BitmapDispose($GDIpBmpLarge) ;release GDI+ image!
        _GDIPlus_BitmapDispose($GDIpBmpResized);release GDI+ image!
        _WinAPI_DeleteObject($GDIbmp);release Obj!
    Next

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

     While 1
         $aMsg = GUIGetMsg(1)
         Switch $aMsg[1]
             Case $hGUI1
                 Switch $aMsg[0]
                     Case $GUI_EVENT_CLOSE
                         ExitLoop
                         GUIDelete($hGUI1)
                 EndSwitch
             Case $hGUI2
                 Switch $aMsg[0]
                     Case $GUI_EVENT_CLOSE
                         GUIDelete($hGUI2)
                         GUICtrlSetState ($idListview,$GUI_ENABLE)
                     Case $hButton1
                         $flip = 1
                         rotate($image2,$flip)
                     Case $hButton2
                         $flip = 4
                         rotate($image2,$flip)
                     Case $hButton3
                         $flip = 6
                         rotate($image2,$flip)
                 EndSwitch
         EndSwitch
     WEnd

    ;cleanup resources
    _GDIPlus_Shutdown()
    Else
        MsgBox("","","Images folder are empty")
    EndIf
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $hWndListView = $idListview
    If Not IsHWnd($idListview) Then $hWndListView = GUICtrlGetHandle($idListview)

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                    $path = IniRead("cfg.ini","PAGE","sourcedir","")
                     Local $iItemText = _GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),2)
                     Local $sValue = InputBox("Edit Image", "Enter your description.", ""," M100",400,150)
                     Local $iIndex = _GUICtrlListView_GetSelectedIndices($idListview)
                     _GUICtrlListView_SetItemText($idListview,$iIndex,$sValue,2)
                      If $sValue <> "" Then
                         IniWrite($inimg,_GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),1),"caption",$sValue)
                      Else
                          _GUICtrlListView_SetItemText($idListview,$iIndex,$iItemText,3)
                      EndIf

                Case $LVN_COLUMNCLICK ; A column was clicked
                    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)

                    _GUICtrlListView_SortItems($idListview, _GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),1))

                Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                    $image2 = _GUICtrlListView_GetItemText($idListview, DllStructGetData($tInfo, "Index"),1)
                    Global $colrbt = 0xFF0CAA, $colortxbt = 0xFFFFFF
                    $hGUI2 = GUICreate($image2, 800, 650, -1, -1);create a test gui to display the image
                    $hButton1 = GUICtrlCreateButton("Rotate", 10, 610, 120, 30)
                    GUICtrlSetBkColor(-1, $colrbt)
                    GUICtrlSetColor(-1,$colortxbt)
                    $hButton2 = GUICtrlCreateButton("Flip Horizontally", 140, 610, 120, 30)
                    GUICtrlSetBkColor(-1, $colrbt)
                    GUICtrlSetColor(-1,$colortxbt)
                    $hButton3 = GUICtrlCreateButton("Flip Vertically", 270, 610, 120, 30)
                    GUICtrlSetBkColor(-1, $colrbt)
                    GUICtrlSetColor(-1,$colortxbt)
                    GUISetState(@SW_SHOW)
                    rotate($image2,0)
                    GUICtrlSetState ($idListview,$GUI_DISABLE)
                    Return 0 ; allow the default processing
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func rotate($image2,$flip)
    _GDIPlus_Startup()
    Local $hImagex, $tData, $tParams
    $hImagex = _GDIPlus_ImageLoadFromFile($image2)
    $imgX = _GDIPlus_ImageGetWidth($hImagex)
    $imgY = _GDIPlus_ImageGetHeight($hImagex)
    $himage_Clone = _GDIPlus_BitmapCloneArea($hImagex, 0, 0, $imgX, $imgY,$GDIP_PXF24RGB)
    _GDIPlus_ImageDispose($hImagex)
    _GDIPlus_ImageRotateFlip($himage_Clone,$flip)
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI2) ;create a graphics object from a window handle
    $hImage_new2 = _GDIPlus_ImageResize($himage_Clone, 800,600)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hImage_new2, 0, 0) ;display rotated image

    $tParams = _GDIPlus_ParamInit(1)
    $tData = DllStructCreate("int Quality")
    DllStructSetData($tData, "Quality", 100) ;quality 0-100
    $pData = DllStructGetPtr($tData)
    _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)

    ;Save the new resized image.
    _GDIPlus_ImageSaveToFileEx($himage_Clone, $image2, $clsid, $pParams)

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> test
    Local $iIndex2 = _GUICtrlListView_GetSelectedIndices($idListview)
    $GDIbmpx = _GDIPlus_BitmapCreateHBITMAPFromBitmap($GDIpBmpResizedx) ;GDI image!
    _GUIImageList_ReplaceIcon($idListview, $iIndex2,$GDIbmpx)


    ;clean
    _GDIPlus_ImageDispose($himage_Clone)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hImage_new2)
    _GDIPlus_Shutdown()
EndFunc

 

 

Edited by rootx
Posted

Try these lines and it should work:

Local $iIndex2 = _GUICtrlListView_GetSelectedIndices($idListview)
    $GDIpBmpResizedx = _GDIPlus_ImageResize($hImage_new2, 64, 64) ;GDI+ imagez
    $GDIbmpx = _GDIPlus_BitmapCreateHBITMAPFromBitmap($GDIpBmpResizedx) ;GDI image!
    _GUIImageList_Replace($hImage, $iIndex2, $GDIbmpx)

 

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

  • 1 year later...
Posted
Local $iIndex2 = _GUICtrlListView_GetSelectedIndices($idListview)
    $GDIpBmpResizedx = _GDIPlus_ImageResize($hImage_new2, 64, 64) ;GDI+ imagez
    $GDIbmpx = _GDIPlus_BitmapCreateHBITMAPFromBitmap($GDIpBmpResizedx) ;GDI image!
    _GUIImageList_Replace($hImage, $iIndex2, $GDIbmpx)

try above

Best Collection wallpapers  at  HD Wallpapers. categories of Natural, Vehicle,Paintings and ect wallpapers and images Pictures.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...