Hallo Leute,
habe nach langer Zeit mal wieder angefangen wieder zu scripten und komme an einer Stelle nicht weiter. Und zwar habe ich ein Bild, das beispielsweise 500x500 Pixel groß ist. Mit _GDIPlus_GraphicsDrawImageRect zeichne ich das auf die GUI in der Größe 1x1 Pixel, damit ich die Durchschnittsfarbe des ganzen Bildes habe. Aber irgendwie bekomme ich mit _GDIPlus_GetPixel nur die Farbe vom Format 500x500 Pixel.
Also ich zeichne erst das Bild mit 1x1 Pixel, ermittel die Farbe davon, lösche es um anschließend die Hintergrundfarbe mit der Farbe zu füllen und zeichne letzendlich das Bild in Vollbild (1:1). Klappt leider nicht
Hier das Script (Siehe Zeile 75-79):
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.8.1
Author: Burak Keskin
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]#include <class\AutoItObject.au3>
#include <class\iTunes.au3>
#include <class\mainGUI.au3>
#include <class\random.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Array.au3>
_AutoItObject_Startup()
_GDIPlus_Startup()
Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit];Objects
Local $mainGUI = _new_mainGUI()
Local $iTunes = _new_iTunes()
Local $random = _new_Random()
;Vars
Local $iWidth = @DesktopWidth
Local $iHeight = @DesktopHeight
Local $aOldSong[3]
Local $hGraphic, $hImage, $iColor = 0xFF000000
Local $sTempFile = @TempDir & '\' & $random.genTmpName()
$iTunes.start()
[/autoit] [autoit][/autoit] [autoit]#region mainGUI
$mainGUI.create()
$mainGUI.setEvent($GUI_EVENT_CLOSE, '_exit')
$mainGUI.setEvent($GUI_EVENT_PRIMARYDOWN, '_clickedLeftDown')
$mainGUI.setEvent($GUI_EVENT_SECONDARYDOWN, '_clickedRightDown')
$mainGUI.setState(@SW_SHOW)
#endregion mainGUI
_setCurrentInfo()
AdlibRegister('_setCurrentInfo', 300)
While 1
Sleep(50)
WEnd
Func _setCurrentInfo()
Local $aSongInfo = $iTunes.curGetInfo()
If Not IsArray($aSongInfo) Or $aSongInfo[1] = '' Or _
$aOldSong[0] == $aSongInfo[0] Or $aOldSong[1] == $aSongInfo[1] Or $aOldSong[2] == $aSongInfo[2] Then Return 0
_GDIPlus_ImageDispose($hImage)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]FileDelete($sTempFile)
[/autoit] [autoit][/autoit] [autoit]$iTunes.curCoverGet($sTempFile)
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND(HWnd($mainGUI.getGUIHandle))
_GDIPlus_GraphicsClear($hGraphic, $iColor)
$hImage = _GDIPlus_ImageLoadFromFile($sTempFile)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, 0, 0, 2, 2) ;???????
$iColor = _GDIPlus_GetPixel($hImage, 5, 5)
_GDIPlus_GraphicsClear($hGraphic, $iColor)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, ($iWidth - $iHeight) / 2, 0, $iHeight, $iHeight)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$aOldSong[0] = $aSongInfo[0] ;Album
$aOldSong[1] = $aSongInfo[1] ;Artist
$aOldSong[2] = $aSongInfo[2] ;Name
EndFunc
Func _clickedLeftDown()
$iTunes.next()
EndFunc
Func _clickedRightDown()
$iTunes.prev()
EndFunc
Func _exit()
Exit
EndFunc
Func _GDIPlus_GetPixel($hBitmap, $X, $Y)
Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $X, "int", $Y, "dword*", 0)
If @error Then Return SetError(1, 0, 0)
Return SetError($result[0], 1, $result[4])
EndFunc ;==>_GDIPlus_GetPixel
Ich denke mal, das lässt sich ganz simpel lösen, komme aber nicht drauf. :pinch:
Beste Grüße
DeepRed92
Edit: Ups, Anhang vergessen.
Edit2: Ach ja,in Zeile 75, 76 stimmen wie Werte nicht überein. Funktioniert trotz Anpassung auch nicht.