Hier ein kleines Tool zum Anzeigen eines Histogrammes von Bildern.
autoit.de/wcf/attachment/18782/
Spoiler anzeigen
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_Res_Field=CompanyName|UEZ Software Development
#AutoIt3Wrapper_Res_Field=ProductName|GDI+ Show Histogram
#AutoIt3Wrapper_Res_Field=ProductVersion|%AutoItVer%
#AutoIt3Wrapper_Res_Fileversion=0.9.7.0
#AutoIt3Wrapper_Res_Field=Build|2013-02-05
#AutoIt3Wrapper_Res_LegalCopyright=UEZ Software Development
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_Field=URL|http://www.autoitscript.com/forum/index.php?showtopic=147777
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/om /sv /sf /cs=0 /cn=0
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_UPX_Parameters=--best --lzma
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
Opt("MustDeclareVars", 1)
Opt("MouseCoordMode", 2)
_GDIPlus11_Startup()
If @error Then Exit MsgBox(0x40010, "Error", "GDI+ Show Histogram can run on operating systems Vista or newer only!")
Global Const $hFullScreen = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]")
Global Const $aFullScreen = WinGetPos($hFullScreen)
Global Enum $HistogramFormatARGB, $HistogramFormatPARGB, $HistogramFormatRGB, $HistogramFormatGray, _ ;http://msdn.microsoft.com/en-us/library/…9(v=vs.85).aspx
$HistogramFormatB, $HistogramFormatG, $HistogramFormatR, $HistogramFormatA
Global Enum $DitherTypeNone = 0, $DitherTypeSolid, $DitherTypeOrdered4x4, $DitherTypeOrdered8x8, $DitherTypeOrdered16x16, $DitherTypeOrdered91x91, _
$DitherTypeSpiral4x4, $DitherTypeSpiral8x8, $DitherTypeDualSpiral4x4, $DitherTypeDualSpiral8x8, $DitherTypeErrorDiffusion
Global Enum $PaletteTypeCustom = 0, $PaletteTypeOptimal, $PaletteTypeFixedBW, $PaletteTypeFixedHalftone8, $PaletteTypeFixedHalftone27, $PaletteTypeFixedHalftone64, _
$PaletteTypeFixedHalftone125, $PaletteTypeFixedHalftone216, $PaletteTypeFixedHalftone252, $PaletteTypeFixedHalftone256
;http://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspx
Global Const $ImageFlagsNone = 0
Global Const $ImageFlagsScalable = 0x0001
Global Const $ImageFlagsHasAlpha = 0x0002
Global Const $ImageFlagsHasTranslucent = 0x0004
Global Const $ImageFlagsPartiallyScalable = 0x0008
Global Const $ImageFlagsColorSpaceRGB = 0x0010
Global Const $ImageFlagsColorSpaceCMYK = 0x0020
Global Const $ImageFlagsColorSpaceGRAY = 0x0040
Global Const $ImageFlagsColorSpaceYCBCR = 0x0080
Global Const $ImageFlagsColorSpaceYCCK = 0x0100
Global Const $ImageFlagsHasRealDPI = 0x1000
Global Const $ImageFlagsHasRealPixelSize = 0x2000
Global Const $ImageFlagsReadOnly = 0x00010000
Global Const $ImageFlagsCaching = 0x00020000
Global $tStructChannel0 = DllStructCreate("uint channel0[256]")
Global $pStructChannel0 = DllStructGetPtr($tStructChannel0)
Global $tStructChannel1 = DllStructCreate("uint channel1[256]")
Global $pStructChannel1 = DllStructGetPtr($tStructChannel1)
Global $tStructChannel2 = DllStructCreate("uint channel2[256]")
Global $pStructChannel2 = DllStructGetPtr($tStructChannel2)
Global $tStructChannel3 = DllStructCreate("uint channel3[256]")
Global $pStructChannel3 = DllStructGetPtr($tStructChannel3)
Global $s, $sFile, $hImage, $bImgLoaded = False, $aLuminosity[257], $aCRGB[257]
Global Const $STM_SETIMAGE = 0x0172, $iLineJoinBevel = 1, $frY = 0.299, $fgY = 0.587, $fbY = 0.114
Global Const $hGUI = GUICreate("GDI+ Show Histogram v0.97 beta by UEZ build 2013-02-05", 468, 310, -1, -1, Default, Default)
Global Const $sLabel_Titel_Txt = "GDI+ Show Histogram"
Global Const $iPosX_Label = 20, $iPosY_Label = 12
Global Const $iLabel_Titel_Shadow = GUICtrlCreateLabel($sLabel_Titel_Txt, $iPosX_Label, $iPosY_Label, 429, 57)
GUICtrlSetFont(-1, 30, 400, 0, "Comic Sans MS", 4)
GUICtrlSetColor(-1, 0xC0C0D8)
Global Const $iLabel_Titel = GUICtrlCreateLabel($sLabel_Titel_Txt, $iPosX_Label - 4, $iPosY_Label - 4, 429, 57)
GUICtrlSetFont(-1, 30, 400, 0, "Comic Sans MS", 4)
GUICtrlSetColor(-1, 0x0000C0)
GUICtrlSetBkColor(-1, -2)
Global Const $iPic_Histogram = GUICtrlCreatePic("", 20, 90, 255, 127, -1, $WS_EX_STATICEDGE)
GUICtrlSetCursor(-1, 14)
Global Const $iPic_ColorGradient = GUICtrlCreatePic("", 20, 220, 255, 24, -1, $WS_EX_STATICEDGE)
Global Const $iGroup = GUICtrlCreateGroup("Channel", 290, 84, 160, 164)
Global Const $iRadio_L = GUICtrlCreateRadio("Luminosit&y (gray)", 300, 100, 110, 20)
GUICtrlSetTip(-1, $frY & "*R, " & $fgY & "*G, " & $fbY & "*B")
GUICtrlSetState($iRadio_L, $GUI_CHECKED)
Global Const $iRadio_C = GUICtrlCreateRadio("&cRGB", 300, 130, 60, 20)
GUICtrlSetTip(-1, "Combined average of RGB values")
Global Const $iRadio_R = GUICtrlCreateRadio("&Red", 300, 160, 60, 20)
Global Const $iRadio_G = GUICtrlCreateRadio("&Green", 300, 190, 60, 20)
Global Const $iRadio_B = GUICtrlCreateRadio("&Blue", 300, 220, 60, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global Const $iButton_Save = GUICtrlCreateButton("&Save", 209, 265, 70, 30)
GUICtrlSetTip(-1, "Click button to save all histogram images")
GUICtrlSetState(-1, $GUI_DISABLE)
Global Const $iButton_Load = GUICtrlCreateButton("&Load", 290, 265, 70, 30)
GUICtrlSetTip(-1, "Click button to load an image")
Global Const $iButton_Exit = GUICtrlCreateButton("E&xit", 390, 265, 60, 30)
Global $sLabelCredit_Txt = "coded by UEZ'13"
Global $aLabelCredit_Pos[StringLen($sLabelCredit_Txt)][4], $u, $iFS = 6.5, $iY = 280
For $u = 0 To UBound($aLabelCredit_Pos) - 1
$aLabelCredit_Pos[$u][0] = StringMid($sLabelCredit_Txt, $u + 1, 1)
$aLabelCredit_Pos[$u][1] = 20 + $u * ($iFS - 0.25)
$aLabelCredit_Pos[$u][2] = $iY
$aLabelCredit_Pos[$u][3] = GUICtrlCreateLabel($aLabelCredit_Pos[$u][0], $aLabelCredit_Pos[$u][1], $aLabelCredit_Pos[$u][2], $iFS, $iFS * 1.8)
GUICtrlSetFont(-1, $iFS, 400, 0, "Comic Sans MS", 2)
GUICtrlSetColor(-1, 0x006000)
Next
Global $aLabelCredit_AnimPos[300]
For $u = 0 To UBound($aLabelCredit_AnimPos) - 1
$aLabelCredit_AnimPos[$u] = $iY
Next
Global Const $fLimes = 2.2, $fStep = 0.1
Global $iPT = 0, $z = Int((UBound($aLabelCredit_AnimPos) - ($fLimes * $fStep * 100)) / 2)
For $u = 0 To $fLimes Step $fStep
$aLabelCredit_AnimPos[$z] = $iY + Sin($iPT * 4) * 10
$z += 1
$iPT += 0.075
Next
Global $ihGui_PreviewSize = 200, $iBGColor = 0xF0F0F0
Global $hGui_Preview = GUICreate("", $ihGui_PreviewSize, $ihGui_PreviewSize + 58, -1, -1, $WS_POPUP + $WS_BORDER, $WS_EX_TOPMOST, $hGUI)
Global $iPic_Preview = GUICtrlCreatePic("", 0, 0, $ihGui_PreviewSize, $ihGui_PreviewSize)
Global $idLabel_Info = GUICtrlCreateLabel("", 0, $ihGui_PreviewSize, $ihGui_PreviewSize * 2, 58)
GUICtrlSetFont(-1, 8.5, 400, 0, "Arial", 5)
GUICtrlSetColor(-1, $iBGColor)
GUICtrlSetBkColor(-1, 0x333333)
Global $hHBmp_L = _GDIPlus_CreateColorGradient("L", 256, 24)
Global $hHBmp_C = _GDIPlus_CreateColorGradient("C", 256, 24)
Global $hHBmp_R = _GDIPlus_CreateColorGradient("R", 256, 24)
Global $hHBmp_G = _GDIPlus_CreateColorGradient("G", 256, 24)
Global $hHBmp_B = _GDIPlus_CreateColorGradient("B", 256, 24)
Global $aRes = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", 256, "int", 127, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
Global Const $hHBmp_HL = $aRes[6]
Global Const $hCtxt_HL = _GDIPlus_ImageGetGraphicsContext($hHBmp_HL)
Global Const $hHBmp_HC = _GDIPlus_BitmapCloneArea($hHBmp_HL, 0, 0, 256, 127, 0x0026200A)
Global Const $hCtxt_HC = _GDIPlus_ImageGetGraphicsContext($hHBmp_HC)
Global Const $hHBmp_HR = _GDIPlus_BitmapCloneArea($hHBmp_HL, 0, 0, 256, 127, 0x0026200A)
Global Const $hCtxt_HR = _GDIPlus_ImageGetGraphicsContext($hHBmp_HR)
Global Const $hHBmp_HG = _GDIPlus_BitmapCloneArea($hHBmp_HL, 0, 0, 256, 127, 0x0026200A)
Global Const $hCtxt_HG = _GDIPlus_ImageGetGraphicsContext($hHBmp_HG)
Global Const $hHBmp_HB = _GDIPlus_BitmapCloneArea($hHBmp_HL, 0, 0, 256, 127, 0x0026200A)
Global Const $hCtxt_HB = _GDIPlus_ImageGetGraphicsContext($hHBmp_HB)
_GDIPlus_GraphicsClear($hCtxt_HL, 0xFFFFFFFF)
_hBmpToPicControl($iPic_ColorGradient, $hHBmp_L)
[/autoit] [autoit][/autoit] [autoit]Global $hB_H = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hHBmp_HL)
_hBmpToPicControl($iPic_Histogram, $hB_H, 1)
GUISetState(@SW_HIDE, $hGui_Preview)
GUISetState(@SW_SHOW, $hGUI)
ControlFocus($hGUI, "", $iButton_Load)
Global $hPen_H = _GDIPlus_PenCreate()
[/autoit] [autoit][/autoit] [autoit]$s = "L"
Global $iDummyL = GUICtrlCreateDummy(), $iDummyC = GUICtrlCreateDummy(), $iDummyR = GUICtrlCreateDummy(), $iDummyG = GUICtrlCreateDummy(), $iDummyB = GUICtrlCreateDummy()
Global $iHistogramFormat, $hHBmp_Preview, $aPosCtrl, $aPosWin, $aMouseInfo, $aPos_hWnd, $imp, $iVal, $iMpos_oldx, $iMpos_oldy, $sType, $iPaletteType, $iPixelFormat, $fAverage_L, $fAverage_cRGB, $o = 0
Global $bShow = False, $bHide = False, $bIsAlpha = False, $bIsGray = False
Global Const $iEntries = 1024
Global Const $tagCOLORPALETTE = "uint Flags;" & _ ; Palette flags
"uint Count;" & _ ; Number of color entries
"uint ARGB[" & $iEntries & "];" ; Palette color
$iPaletteType = $PaletteTypeFixedHalftone8
$iPixelFormat = $GDIP_PXF08INDEXED
Global $tPalette = DllStructCreate($tagCOLORPALETTE)
DllStructSetData($tPalette, "Flags", $iPaletteType)
DllStructSetData($tPalette, "Count", $iEntries)
Global $pPalette = DllStructGetPtr($tPalette)
DllCall($ghGDIPDll, "int", "GdipInitializePalette", "struct*", $pPalette, "long", $iPaletteType, "int", 0, "bool", True, "handle", 0)
AdlibRegister("AnimateLabel", 60)
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $iButton_Exit
AdlibUnRegister("AnimateLabel")
GUIDelete($hGui_Preview)
GUIDelete($hGUI)
_WinAPI_DeleteObject($hHBmp_L)
_WinAPI_DeleteObject($hHBmp_C)
_WinAPI_DeleteObject($hHBmp_L)
_WinAPI_DeleteObject($hHBmp_R)
_WinAPI_DeleteObject($hHBmp_G)
_WinAPI_DeleteObject($hHBmp_B)
If $hHBmp_Preview Then _WinAPI_DeleteObject($hHBmp_Preview)
_GDIPlus_PenDispose($hPen_H)
_GDIPlus_GraphicsDispose($hCtxt_HL)
_GDIPlus_GraphicsDispose($hCtxt_HC)
_GDIPlus_GraphicsDispose($hCtxt_HR)
_GDIPlus_GraphicsDispose($hCtxt_HG)
_GDIPlus_GraphicsDispose($hCtxt_HB)
_GDIPlus_BitmapDispose($hHBmp_HL)
_GDIPlus_BitmapDispose($hHBmp_HC)
_GDIPlus_BitmapDispose($hHBmp_HR)
_GDIPlus_BitmapDispose($hHBmp_HG)
_GDIPlus_BitmapDispose($hHBmp_HB)
_GDIPlus_Shutdown()
$tStructChannel0 = 0
$tStructChannel1 = 0
$tStructChannel2 = 0
$tStructChannel3 = 0
Exit
Case $iRadio_L, $iDummyL
If $s <> "L" Then
_hBmpToPicControl($iPic_ColorGradient, $hHBmp_L)
If $bImgLoaded Then
$hB_H = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hHBmp_HL)
_hBmpToPicControl($iPic_Histogram, $hB_H, 1)
EndIf
$s = "L"
EndIf
Case $iRadio_C, $iDummyC
If $s <> "C" Then
_hBmpToPicControl($iPic_ColorGradient, $hHBmp_C)
If $bImgLoaded Then
$hB_H = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hHBmp_HC)
_hBmpToPicControl($iPic_Histogram, $hB_H, 1)
EndIf
$s = "C"
EndIf
Case $iRadio_R, $iDummyR
If $s <> "R" Then
_hBmpToPicControl($iPic_ColorGradient, $hHBmp_R)
If $bImgLoaded Then
$hB_H = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hHBmp_HR)
_hBmpToPicControl($iPic_Histogram, $hB_H, 1)
EndIf
$s = "R"
EndIf
Case $iRadio_G, $iDummyG
If $s <> "G" Then
_hBmpToPicControl($iPic_ColorGradient, $hHBmp_G)
If $bImgLoaded Then
$hB_H = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hHBmp_HG)
_hBmpToPicControl($iPic_Histogram, $hB_H, 1)
EndIf
$s = "G"
EndIf
Case $iRadio_B, $iDummyB
If $s <> "B" Then
_hBmpToPicControl($iPic_ColorGradient, $hHBmp_B)
If $bImgLoaded Then
$hB_H = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hHBmp_HB)
_hBmpToPicControl($iPic_Histogram, $hB_H, 1)
EndIf
$s = "B"
EndIf
Case $iButton_Load
$sFile = FileOpenDialog("Select an image", "", "Images (*.jpg;*.png;*.bmp;*.gif)", 3)
If @error Then ContinueCase
If $bImgLoaded Then _GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
If @error Then
MsgBox(0x40010, "Error", "Unable to load image", 30)
ContinueCase
EndIf
GUICtrlSetState($iButton_Save, $GUI_ENABLE)
$aRes = DllCall($ghGDIPDll, "int", "GdipGetImageFlags", "handle", $hImage, "uint*", 0)
If BitAND($aRes[2], $ImageFlagsHasAlpha) Then
$bIsAlpha = True
Else
$bIsAlpha = False
EndIf
If BitAND($aRes[2], $ImageFlagsColorSpaceGRAY) Then
$bIsGray = True
Else
$bIsGray = False
EndIf
$hHBmp_Preview = _GetImage($sFile, $ihGui_PreviewSize, $iBGColor)
_hBmpToPicControl($iPic_Preview, $hHBmp_Preview, 1)
If Not $bIsAlpha Then
$pStructChannel3 = 0
$iHistogramFormat = $HistogramFormatRGB
Else
$pStructChannel3 = DllStructGetPtr($tStructChannel3)
$iHistogramFormat = $HistogramFormatARGB
EndIf
_GDIPlus_BitmapGetHistogram($hImage, $iHistogramFormat, _GDIPlus_BitmapGetHistogramSize($iHistogramFormat), $pStructChannel0, $pStructChannel1, $pStructChannel2, $pStructChannel3)
_GDIPlus_CreateHistogram()
$bImgLoaded = True
If BitAND(GUICtrlRead($iRadio_L), $GUI_CHECKED) Then
$s = ""
GUICtrlSendToDummy($iDummyL)
ElseIf BitAND(GUICtrlRead($iRadio_C), $GUI_CHECKED) Then
$s = ""
GUICtrlSendToDummy($iDummyC)
ElseIf BitAND(GUICtrlRead($iRadio_R), $GUI_CHECKED) Then
$s = ""
GUICtrlSendToDummy($iDummyR)
ElseIf BitAND(GUICtrlRead($iRadio_G), $GUI_CHECKED) Then
$s = ""
GUICtrlSendToDummy($iDummyG)
Else
$s = ""
GUICtrlSendToDummy($iDummyB)
EndIf
Case $iButton_Save
If $sFile = "" Then ContinueLoop
$sType = "png"
DllCall($ghGDIPDll, "int", "GdipBitmapConvertFormat", "handle", $hHBmp_HL, "long", $iPixelFormat, "long", $DitherTypeSolid, "long", $iPaletteType, "struct*", $pPalette, "float", 0.0)
DllCall($ghGDIPDll, "int", "GdipBitmapConvertFormat", "handle", $hHBmp_HC, "long", $iPixelFormat, "long", $DitherTypeSolid, "long", $iPaletteType, "struct*", $pPalette, "float", 0.0)
DllCall($ghGDIPDll, "int", "GdipBitmapConvertFormat", "handle", $hHBmp_HR, "long", $iPixelFormat, "long", $DitherTypeSolid, "long", $iPaletteType, "struct*", $pPalette, "float", 0.0)
DllCall($ghGDIPDll, "int", "GdipBitmapConvertFormat", "handle", $hHBmp_HG, "long", $iPixelFormat, "long", $DitherTypeSolid, "long", $iPaletteType, "struct*", $pPalette, "float", 0.0)
DllCall($ghGDIPDll, "int", "GdipBitmapConvertFormat", "handle", $hHBmp_HB, "long", $iPixelFormat, "long", $DitherTypeSolid, "long", $iPaletteType, "struct*", $pPalette, "float", 0.0)
$o += _GDIPlus_ImageSaveToFile($hHBmp_HL, StringRegExpReplace($sFile, "(.*)\..*", "$1") & "_Luminosity." & $sType)
$o += _GDIPlus_ImageSaveToFile($hHBmp_HC, StringRegExpReplace($sFile, "(.*)\..*", "$1") & "_cRGB." & $sType)
$o += _GDIPlus_ImageSaveToFile($hHBmp_HR, StringRegExpReplace($sFile, "(.*)\..*", "$1") & "_Red." & $sType)
$o += _GDIPlus_ImageSaveToFile($hHBmp_HG, StringRegExpReplace($sFile, "(.*)\..*", "$1") & "_Green." & $sType)
$o += _GDIPlus_ImageSaveToFile($hHBmp_HB, StringRegExpReplace($sFile, "(.*)\..*", "$1") & "_Blue." & $sType)
If $o = 5 Then
MsgBox(64 + 262144, "Information", "Images properly saved to " & StringRegExpReplace($sFile, "(.*)\\.*", "$1"), 30, $hGUI)
Else
MsgBox(16 + 262144, "Error", "One or more images could not saved to " & StringRegExpReplace($sFile, "(.*)\\.*", "$1") & ".", 30, $hGUI)
EndIf
EndSwitch
If WinActive($hGUI) Then
$aMouseInfo = GUIGetCursorInfo($hGUI)
Switch $aMouseInfo[4]
Case $iPic_Histogram
If $bImgLoaded Then
$aPos_hWnd = WinGetPos($hGUI)
$imp = Max(1, Min(256, -19 + $aMouseInfo[0]))
Switch $s
Case "L"
$iVal = $aLuminosity[$imp]
Case "C"
$iVal = $aCRGB[$imp]
Case "R"
$iVal = DllStructGetData($tStructChannel0, "channel0", $imp)
Case "G"
$iVal = DllStructGetData($tStructChannel1, "channel1", $imp)
Case "B"
$iVal = DllStructGetData($tStructChannel2, "channel2", $imp)
EndSwitch
If $iMpos_oldx <> $aMouseInfo[0] Or $iMpos_oldy <> $aMouseInfo[1] Then
ToolTip("Index: " & $imp & ", Value: " & Round($iVal, 0) & ", Average: " & Round($fAverage_L, 2), $aPos_hWnd[0] + $aMouseInfo[0] - 60, $aMouseInfo[1] + $aPos_hWnd[1] - 20)
$iMpos_oldx = $aMouseInfo[0]
$iMpos_oldy = $aMouseInfo[1]
EndIf
ShowPreview($iPic_Histogram)
$bShow = True
$bHide = False
EndIf
Case Else
If Not $bHide Then
GUISetState(@SW_HIDE, $hGui_Preview)
$bHide = True
ToolTip("")
EndIf
$bShow = False
EndSwitch
EndIf
WEnd
Func AnimateLabel()
Local Static $v = Int((UBound($aLabelCredit_AnimPos) - ($fLimes * $fStep * 100)) / 2)
Local $u
For $u = 0 To UBound($aLabelCredit_Pos) - 1
GUICtrlSetPos($aLabelCredit_Pos[$u][3], $aLabelCredit_Pos[$u][1], $aLabelCredit_AnimPos[$v - $u])
Next
If $v - $u < 0 Then $v = UBound($aLabelCredit_AnimPos) - 1
$v -= 1
EndFunc ;==>AnimateLabel
Func Min($a, $b)
If $a < $b Then Return $a
Return $b
EndFunc ;==>Min
Func Max($a, $b)
If $a > $b Then Return $a
Return $b
EndFunc ;==>Max
Func ShowPreview($iCtrl)
$aPosWin = WinGetPos($hGUI)
$aPosCtrl = ControlGetPos($hGUI, "", $iCtrl)
Local $iNewX, $iNewX1 = $aPosWin[0] - $ihGui_PreviewSize + 10, $iNewX2 = $aPosWin[0] + $aPosWin[2] - 10
$iNewX = $iNewX1
If $iNewX1 < $aFullScreen[0] Then
$iNewX = $iNewX2
EndIf
WinMove($hGui_Preview, "", $iNewX, $aPosWin[1] + 50)
GUISetState(@SW_SHOWNOACTIVATE, $hGui_Preview)
EndFunc ;==>ShowPreview
Func _GetImage($sFile, $iWH, $iBkClr = 0xFFFFFF)
Local $hBmp1, $hBitmap, $hGraphic, $hImage, $iW, $iH, $aGS, $hBmp2, $aFTS
$aFTS = FileGetTime($sFile)
If @error Then Return SetError(1, 0, 0)
$hBmp1 = _WinAPI_CreateBitmap($iWH, $iWH, 1, 32)
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp1)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_WinAPI_DeleteObject($hBmp1)
_GDIPlus_GraphicsClear($hGraphic, BitOR(0xFF000000, $iBkClr))
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
GUICtrlSetData($idLabel_Info, StringRegExpReplace($sFile, ".*\\(.*)", "$1") & @LF & Round(FileGetSize($sFile) / 1024, 0) & " kb (" & $iW & " x " & $iH & ")" & @LF & $aFTS[0] & "/" & $aFTS[1] & "/" & $aFTS[2] & " " & $aFTS[3] & ":" & $aFTS[4] & ":" & $aFTS[5] & @LF & "Alpha: " & $bIsAlpha & ", Gray: " & $bIsGray)
$aGS = _GetScale($iW, $iH, $iWH)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, $aGS[0], $aGS[1], $aGS[2], $aGS[3])
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphic)
$hBmp2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
_GDIPlus_BitmapDispose($hBitmap)
Return $hBmp2
EndFunc ;==>_GetImage
Func _GetScale($iW, $iH, $iWH)
Local $aRet[4]
If $iW <= $iWH And $iH <= $iWH Then
$aRet[2] = $iW
$aRet[3] = $iH
$aRet[0] = ($iWH - $aRet[2]) / 2
$aRet[1] = ($iWH - $aRet[3]) / 2
ElseIf $iW > $iH Then
$aRet[2] = $iWH
$aRet[3] = $iH / ($iW / $iWH)
$aRet[0] = 0
$aRet[1] = ($iWH - $aRet[3]) / 2
ElseIf $iW < $iH Then
$aRet[2] = $iW / ($iH / $iWH)
$aRet[3] = $iWH
$aRet[0] = ($iWH - $aRet[2]) / 2
$aRet[1] = 0
ElseIf $iW = $iH Then
$aRet[2] = $iWH
$aRet[3] = $iWH
$aRet[0] = 0
$aRet[1] = 0
EndIf
Return $aRet
EndFunc ;==>_GetScale
Func _hBmpToPicControl($iCID, ByRef $hBmp, $iFlag = 0)
Local $hOldBmp
$hOldBmp = GUICtrlSendMsg($iCID, $STM_SETIMAGE, $IMAGE_BITMAP, $hBmp)
If $hOldBmp Then _WinAPI_DeleteObject($hOldBmp)
If $iFlag Then _WinAPI_DeleteObject($hBmp)
EndFunc ;==>_hBmpToPicControl
Func _GDIPlus_CreateHistogram($sRounding = "Ceiling")
Local $iMaxL, $iMaxC, $iMaxR, $iMaxG, $iMaxB, $a, $r, $g, $b, $yR, $yG, $yB
For $i = 1 + $bIsAlpha To 256
If $bIsAlpha Then
;~ ConsoleWrite("Alpha: " & DllStructGetData($tStructChannel0, "channel0", $i) & @CRLF)
$r = DllStructGetData($tStructChannel1, "channel1", $i)
$yR = $r * $frY
If DllStructGetData($tStructChannel1 , "channel1", $i) > $iMaxR Then $iMaxR = $r
$g = DllStructGetData($tStructChannel2, "channel2", $i)
$yG = $g * $fgY
If DllStructGetData($tStructChannel2 , "channel2", $i) > $iMaxG Then $iMaxG = $g
$b = DllStructGetData($tStructChannel3, "channel3", $i)
$yB = $b * $fbY
If DllStructGetData($tStructChannel3 , "channel3", $i) > $iMaxB Then $iMaxB = $b
$fAverage_cRGB += $r + $g + $b
$fAverage_L += $yR + $yG + $yB
Else
$r = DllStructGetData($tStructChannel0, "channel0", $i)
$yR = $r * $frY
If DllStructGetData($tStructChannel0 , "channel0", $i) > $iMaxR Then $iMaxR = $r
$g = DllStructGetData($tStructChannel1, "channel1", $i)
$yG = $g * $fgY
If DllStructGetData($tStructChannel1 , "channel1", $i) > $iMaxG Then $iMaxG = $g
$b = DllStructGetData($tStructChannel2, "channel2", $i)
$yB = $b * $fbY
If DllStructGetData($tStructChannel2 , "channel2", $i) > $iMaxB Then $iMaxB = $b
EndIf
$fAverage_cRGB += $r + $g + $b
$fAverage_L += $yR + $yG + $yB
$aLuminosity[$i] = $yR + $yG + $yB
If $aLuminosity[$i] > $iMaxL Then $iMaxL = $aLuminosity[$i]
$aCRGB[$i] = ($r + $g + $b) / 3
If $aCRGB[$i] > $iMaxC Then $iMaxC = $aCRGB[$i]
Next
$fAverage_cRGB /= 256 * 3
$fAverage_L /= 256
_GDIPlus_GraphicsClear($hCtxt_HL, 0xFFFFFFFF)
_GDIPlus_GraphicsClear($hCtxt_HC, 0xFFFFFFFF)
_GDIPlus_GraphicsClear($hCtxt_HR, 0xFFFFFFFF)
_GDIPlus_GraphicsClear($hCtxt_HG, 0xFFFFFFFF)
_GDIPlus_GraphicsClear($hCtxt_HB, 0xFFFFFFFF)
Local $iDL = 1, $iDC = 1, $iDR = 1, $iDG = 1, $iDB = 1
Local $sRoundings = "Round,Ceiling,Floor,"
If Not StringInStr($sRoundings, $sRounding) Then $sRounding = "Ceiling"
If $iMaxL > 128 Then
;~ $iDL = Ceiling($iMaxL / 128)
$iDL = Execute($sRounding & "(" & $iMaxL / 128 & ")")
Else
$iDL = 1 / (128 / $iMaxL)
EndIf
If $iMaxC > 128 Then
;~ $iDC = Ceiling($iMaxC / 128)
$iDC = Execute($sRounding & "(" & $iMaxC / 128 & ")")
Else
$iDC = 1 / (128 / $iMaxC)
EndIf
If $iMaxR > 128 Then
;~ $iDR = Ceiling($iMaxR / 128)
$iDR = Execute($sRounding & "(" & $iMaxR / 128 & ")")
Else
$iDR = 1 / (128 / $iMaxR)
EndIf
If $iMaxG > 128 Then
;~ $iDG = Ceiling($iMaxG / 128)
$iDG = Execute($sRounding & "(" & $iMaxG / 128 & ")")
Else
$iDG = 1 / (128 / $iMaxG)
EndIf
If $iMaxB > 128 Then
;~ $iDB = Ceiling($iMaxB / 128)
$iDB = Execute($sRounding & "(" & $iMaxB / 128 & ")")
Else
$iDB = 1 / (128 / $iMaxB)
EndIf
For $i = 1 To 256
_GDIPlus_PenSetColor($hPen_H, 0xFF000000)
_GDIPlus_GraphicsDrawLine($hCtxt_HL, $i - 1, 127, $i - 1, 127 - (Int($aLuminosity[$i] / $iDL)), $hPen_H)
_GDIPlus_PenSetColor($hPen_H, 0xFF000000)
_GDIPlus_GraphicsDrawLine($hCtxt_HC, $i - 1, 127, $i - 1, 127 - (Int($aCRGB[$i] / $iDC)), $hPen_H)
_GDIPlus_PenSetColor($hPen_H, 0xFFB00000)
If $bIsAlpha Then
_GDIPlus_GraphicsDrawLine($hCtxt_HR, $i - 1, 127, $i - 1, 127 - (Int(DllStructGetData($tStructChannel1, "channel1", $i) / $iDR)), $hPen_H)
_GDIPlus_PenSetColor($hPen_H, 0xFF00B000)
_GDIPlus_GraphicsDrawLine($hCtxt_HG, $i - 1, 127, $i - 1, 127 - (Int(DllStructGetData($tStructChannel2, "channel2", $i) / $iDG)), $hPen_H)
_GDIPlus_PenSetColor($hPen_H, 0xFF0000B0)
_GDIPlus_GraphicsDrawLine($hCtxt_HB, $i - 1, 127, $i - 1, 127 - (Int(DllStructGetData($tStructChannel3, "channel3", $i) / $iDB)), $hPen_H)
Else
_GDIPlus_GraphicsDrawLine($hCtxt_HR, $i - 1, 127, $i - 1, 127 - (Int(DllStructGetData($tStructChannel0, "channel0", $i) / $iDR)), $hPen_H)
_GDIPlus_PenSetColor($hPen_H, 0xFF00B000)
_GDIPlus_GraphicsDrawLine($hCtxt_HG, $i - 1, 127, $i - 1, 127 - (Int(DllStructGetData($tStructChannel1, "channel1", $i) / $iDG)), $hPen_H)
_GDIPlus_PenSetColor($hPen_H, 0xFF0000B0)
_GDIPlus_GraphicsDrawLine($hCtxt_HB, $i - 1, 127, $i - 1, 127 - (Int(DllStructGetData($tStructChannel2, "channel2", $i) / $iDB)), $hPen_H)
EndIf
Next
EndFunc ;==>_GDIPlus_CreateHistogram
[/autoit] [autoit][/autoit] [autoit]Func _GDIPlus_CreateColorGradient($sColorChannel, $iW, $iH, $bHBitmap = True)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iW, "int", $iH, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
Local $hCtxt = _GDIPlus_ImageGetGraphicsContext($aResult[6])
;~ _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2)
Local $hPen = _GDIPlus_PenCreate()
DllCall($ghGDIPDll, "uint", "GdipSetPenLineJoin", "handle", $hPen, "int", $iLineJoinBevel)
Local $i, $c
For $i = 0 To $iW
$c = Hex($i, 2)
Switch $sColorChannel
Case "L"
_GDIPlus_PenSetColor($hPen, "0xFF" & $c & $c & $c)
Case "C"
_GDIPlus_PenSetColor($hPen, "0xFF" & $c & $c & $c)
Case "R"
_GDIPlus_PenSetColor($hPen, "0xFF" & $c & "0000")
Case "G"
_GDIPlus_PenSetColor($hPen, "0xFF00" & $c & "00")
Case "B"
_GDIPlus_PenSetColor($hPen, "0xFF0000" & $c)
EndSwitch
_GDIPlus_GraphicsDrawLine($hCtxt, $i, 0, $i, $iH, $hPen)
Next
_GDIPlus_GraphicsDispose($hCtxt)
_GDIPlus_PenDispose($hPen)
If $bHBitmap Then
Local $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($aResult[6])
_GDIPlus_BitmapDispose($aResult[6])
Return $hHBmp
EndIf
Return $aResult[6]
EndFunc ;==>_GDIPlus_CreateColorGradient
;http://msdn.microsoft.com/en-us/library/…7(v=vs.85).aspx
Func _GDIPlus_BitmapGetHistogram($hBitmap, $iFormat, $iGetHistogramSize, $pStructChannel0, $pStructChannel1, $pStructChannel2, $pStructChannel3 = 0)
Local $aRes = DllCall($ghGDIPDll, "bool", "GdipBitmapGetHistogram", "handle", $hBitmap, "uint", $iFormat, "uint", $iGetHistogramSize, "struct*", $pStructChannel0, "struct*", $pStructChannel1, "struct*", $pStructChannel2, "struct*", $pStructChannel3)
If @error Then Return SetError(1, @error, 0)
Return 1
EndFunc ;==>_GDIPlus_BitmapGetHistogram
;http://msdn.microsoft.com/en-us/library/…8(v=vs.85).aspx
Func _GDIPlus_BitmapGetHistogramSize($iFormat)
Local $aRes = DllCall($ghGDIPDll, "int", "GdipBitmapGetHistogramSize", "uint", $iFormat, "dword*", 0)
If @error Then Return SetError(1, @error, 0)
Return $aRes[2]
EndFunc ;==>_GDIPlus_BitmapGetHistogramSize
Func _GDIPlus11_Startup() ;code by Authenticity - modified by UEZ
Local $pInput, $tInput, $pToken, $tToken, $aResult, $os
$giGDIPRef += 1
If $giGDIPRef > 1 Then Return True
Switch @OSVersion
Case "WIN_VISTA", "WIN_2008"
$ghGDIPDll = DllOpen(@WindowsDir & "\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.6000.16386_none_8df21b8362744ace\gdiplus.dll")
Case "WIN_2008R2", "WIN_7", "WIN_8"
$ghGDIPDll = DllOpen(@SystemDir & "\gdiplus.dll")
Case Else
Return SetError(1)
EndSwitch
;~ _WinAPI_Check("_GDIPlus_Startup (GDIPlus.dll not found)", @error, False)
$tInput = DllStructCreate($tagGDIPSTARTUPINPUT)
$pInput = DllStructGetPtr($tInput)
$tToken = DllStructCreate("int Data")
$pToken = DllStructGetPtr($tToken)
DllStructSetData($tInput, "Version", 1)
$aResult = DllCall($ghGDIPDll, "int", "GdiplusStartup", "ptr", $pToken, "ptr", $pInput, "ptr", 0)
If @error Then Return SetError(@error, @extended, False)
$giGDIPToken = DllStructGetData($tToken, "Data")
Return $aResult[0] = 0
EndFunc ;==>_GDIPlus11_Startup
Keine Ahnung für was man sowas gebrauchen kann...
Läuft ab Vista und aufwärts, da GDI+ v1.1 benötigt wird.
Gruß,
UEZ