PNG in GUI einblenden

10/25/2012 08:30 DerCyberOnkel#1
hallo erstmal
ich möchte gerne ein png einblenden lassen.
habe das ganze schonmal ohne gui mit ein gif gemacht und das geht.
möchte es aber als png da der hintergrund durchsichtig sein soll.

gif:
Code:
$hSplash = GUICreate("AutoIt - Splash", 159, 68,-1,-1,0x80000000 ) ; $WS_POPUP
GUICtrlCreatePic(@ProgramFilesDir & "\AutoIt3\Examples\GUI\logo4.gif",0,0,159,68)
WinSetTrans($hSplash,"",0)
GUISetState()
For $i = 0 To 255 Step 5
    WinSetTrans($hSplash,"",$i)
    Sleep($i/4)
Next
Sleep(1000)
For $i = 255 To 0 Step -5
    WinSetTrans($hSplash,"",$i)
    Sleep(10)
Next
GUIDelete($hSplash)
png:
Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

$hGUI999 = GUICreate("Show PNG", 500, 500)
GUISetState()

_drawpng($hGUI999, "Bild.png",50 ,50)

; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _drawpng($pnggui,$pngpic, $pngx, $pngy)
    Local $hImage999, $hGraphic999, $hImage999

    ; Load PNG image
    _GDIPlus_StartUp()
    $hImage999   = _GDIPlus_ImageLoadFromFile($pngpic)
    $hGraphic999 = _GDIPlus_GraphicsCreateFromHWND($pnggui)

    ; Draw PNG image
    _WinAPI_RedrawWindow($pnggui, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic999, $hImage999, $pngx, $pngy)
    _WinAPI_RedrawWindow($pnggui, 0, 0, $RDW_VALIDATE)
    ; Clean up resources
    _GDIPlus_GraphicsDispose($hGraphic999)
    _GDIPlus_ImageDispose($hImage999)
    _GDIPlus_ShutDown()
EndFunc

MsgBox (0, "lol", "looool",0,0)
das bild soll kommen und wieder verschwinden und dan soll die msg box kommen, stat der msg box soll halt das programm geladen werden, aber das ist erst mal egal.

würde mich freuen wenn einer helfen kann. danke :handsdown:
10/25/2012 12:06 Achat#2
[Only registered and activated users can see links. Click Here To Register...]

Quote:
Um ein transparentes Bild zu erzeugen, ist es erforderlich, dass das GUI-Fenster mit dem erweiterten Stil WS_EX_LAYERED erzeugt wird. Das oberste linke Pixel wird hierbei als "transparente Farbe" benutzt. Werden mehrere Bilder erzeugt, bestimmt das letzte Bild die "transparente Farbe". Siehe Beispiel 2.
MfG

PS: Code bitte in [code]HIER REIN[/code] schreiben. Danke
10/25/2012 12:58 DerCyberOnkel#3
Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos

Example2()

Func Example2()
    Local $msg

    $gui = GUICreate("Test transparentes Bild", 550, 550)
    $pic = GUICreate("", 68, 71, 10, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    GUICtrlCreatePic("Bild.png", 0, 0, 0, 0)

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $gui)

    HotKeySet("{ESC}", "main")
    HotKeySet("{LEFT}", "left")
    HotKeySet("{RIGHT}", "right")
    HotKeySet("{DOWN}", "down")
    HotKeySet("{UP}", "up")
    $picPos = WinGetPos($pic)
    $guiPos = WinGetPos($gui)

    Do
        $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE
EndFunc   ;==>Example2

Func main()
    $guiPos = WinGetPos($gui)
    WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc   ;==>main

Func left()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc   ;==>left

Func right()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc   ;==>right

Func down()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc   ;==>down

Func up()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc   ;==>up
wie im beispiel, aber das bild wird mir nicht angezeigt.
es ist im richtigen ordner, (au3 und png auf desktop)
bild habe ich auch überprüft.

egal ob png oder gif, geht beides nicht -.-
10/26/2012 13:05 Lawliet#4
Quote:
filename Dateiname des zu ladenden Bildes. Es werden die Typen BMP, JPG, nicht animierte GIF unterstützt.
Gif kann aber auch Transparents ;)