Bild "sauber" in eine Gui einfügen

  • Hey Leute,
    wie kann ich ein Bild "sauber" in eine GUI einfügen?
    Also zum Beispiel einen Haken. Diesen zeichne ich vorher in Paint vor. Mit z.B. weißem Hintergrund. Wenn ich dieses Bild nun einfüge, wird der ganze weiße Hintergrund ja auch mit in die GUI eingefügt. Kann man das irgendwie einstellen, dass da dann nur ein schwarzer Haken ist, und nicht der Hintergrund des Bildes zu sehen ist? Also, dass AutoIT sozusagen die Hintergrundfarbe ignoriert...

    Danke
    LG
    Manlius

  • Du musst das Bild das einfügen willst selbst mit transparentem Hintergrund erstellen oder alternativ das weiße im Bild mit der selben Farbe füllen die deine GUI hat.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hi,

    du könntest auch mit GIMP (Hier klicken) folgendes machen:

    erstelle eine neue datei mit der Breite und Höhe die dein Bild später haben soll, nebenbei öffnest du, mit "Datei öffnen", das Bild mit dem Haken und skalierst es auf die Größe und Breite, die die Datei hat, die du vorher erstellt hast.

    Nun kopierst du das skalierte Bild mittel Copy&Paste in die zuerst erstellte Datei.
    Es entsteht eine schwebende Ebene, diese verschiebst du mit dem Verschiebe-Werkzeug an die "richtige" Position. Das Fenster mit dem vorherigen Bild welches du Anfangs geöffnet hast, kannst du schließen.

    Nun klickst du mit einem Rechtsklick, im Ebenen-"Manager" (oder wie der heißt, öffnest du mit STRG+L), auf die schwebende Ebene und wählst "neue Ebene". Nun kannst, du, wenn dein Haken einfärbig ist, mit dem Zauberstab-Werkzeug auf deinen Haken klicken.

    Es sollte theoretisch eine Auswahl um deinen Haken erscheinen, sollte dies nicht der Fall sein, dann musst du das Pfade-Werkzeug oder das freie-Auswahl-Werkzeug nehmen und per Hand eine Auswahl um deinen Haken ziehen.

    Danach wieder mit Rechtsklick auf die neue Ebene und "Ebenenmaske hinzufügen". Es taucht ein neues Fenster auf, bei dem du "Schwarz (volle Tranzparenz)" auswählst. Dann "Hinzufügen".

    Dein Haken sollte nun verschwunden sein, die Auswahl allerdings noch zu sehen sein.
    Nun wählst du den Pinsel, mit der Farbe Weiß aus, die Farbe musst du zuerst auswählen, mit dieseml fährst du wie wild, mit gedrückter linker Maustaste, durch die Auswahl. Dein Haken sollte nun wieder langsam langsam auftauchen. Wenn der gesamte Haken wieder zu sehen ist, dann Rechtsklick auf einen Teil des Bildes auf das Menü "Auswahl", dann auf "nichts auswählen".
    Nun auf die Ebene einen Rechtsklick, dann auf "Ebenenmaske anwenden".
    Im Ebenen-Manager nun ein Linksklick auf das Augensymbol, des Hintergrunds. Der Hintergrund sollte nun aus vielen hellen und dunklen grauen Rechtecken bestehen und dein Haken irgendwo dazwischen, sozusagen.

    Zu guter Letzt das Bild als ".png" abspeichern und mittels "_GDIPlus"-Befehlen in AutoIt darstellen.

    Viel Erfolg.

    Im Prinzip genau das was chip gesagt hat:

    Zitat

    Du musst das Bild das du einfügen willst selbst mit transparentem Hintergrund erstellen

    Kannst dir zusätzlich noch dieses Video anschauen: Klick mich

    LG
    Ealendil

    PS: oder aber du schickst mir das Bild und ich mach das mal schnell.

    autoit.de/wcf/attachment/7811/

  • Ealendil: Leicht umständliche Methode ;) Einfacher geht es so:
    -Bild laden
    -Menü: Ebene -> Transparenz -> Alphakanal hinzufügen
    -Mit dem Zauberstab oder sonst wie den Haken auswählen
    -Menü: Auswahl -> invertieren
    -Menü: Bearbeiten -> löschen
    -Nun sollte alle transparent sein bis auf den Haken (also Hintergrund viele graue Quadrate)
    -Menü: Auswahl -> Nichts auswählen
    -als PNG speichern :D

  • Hab jetzt ein neues Problem:
    Sobald ich die GUI z.B. auf die Leiste mache und sie dann wieder maximiere, sind die Haken in der GUI verschwunden.
    HIer mein Script:

    Spoiler anzeigen
    [autoit]

    #include <Guiconstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPLus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate ("IE",500,200,-1,-1)
    GUICtrlCreateLabel ("Inetexplorer geöffnet",20,20,-1,-1)
    GUICtrlCreateLabel ("Seite aufgerufen",20,50,-1,-1)
    GUICtrlCreateLabel ("......",20,80,-1,-1)
    GUICtrlCreateLabel (".....",20,110,-1,-1)
    GUICtrlCreateLabel (".......",20,140,-1,-1)
    $button = GUICtrlCreateButton ("Start",150,170,50,-1)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState ()

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $msg = GUIGetMsg ()
    If $msg = $button Then
    _GDIPlus_Startup ()
    $haken = _GDIPlus_BitmapCreateFromFile (@ScriptDir&"\Haken02.png")
    $graphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    Sleep (100)
    _GDIPlus_GraphicsDrawImage ($graphic,$haken,150,1)
    Sleep (100)
    _GDIPlus_GraphicsDrawImage ($graphic,$haken,170,32)
    Sleep (100)
    _GDIPlus_GraphicsDrawImage ($graphic,$haken,150,64)
    Sleep (100)
    _GDIPlus_GraphicsDrawImage ($graphic,$haken,150,93)
    Sleep (100)
    _GDIPlus_GraphicsDrawImage ($graphic,$haken,150,123)
    Sleep (100)
    $Progress1 = GUICtrlCreateProgress(220, 5, 230, 25)
    GUICtrlSetData($Progress1, 0)
    $Label1 = GUICtrlCreateLabel("Bitte warten...", 220, 37, 200, 20)
    GUICtrlSetData($Label1, "Bitte warten...")
    $button = GUICtrlCreateButton("Ende", 220, 55, -1, -1)
    $check = GUICtrlCreateCheckbox ("Tooltip",420,55,-1,-1)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Until $msg = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_ImageDispose ($haken)
    _GDIPlus_Shutdown ()

    [/autoit]
  • Hallo manilus,

    du musst die Grafik(en) immer wieder auffrischen. Hier ein Beispiel aus der Hilfe:

    [autoit]

    ;----- Beispiel 3 wie das ganze auf mit PNG funktioniert (von Zedna)
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $hGUI, $hImage, $hGraphic, $hImage1

    [/autoit][autoit][/autoit][autoit]

    ; GUI erstellen
    $hGUI = GUICreate("PNG zeigen", 250, 250)

    [/autoit][autoit][/autoit][autoit]

    ; PNG Bild laden
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile("..\GUI\Torus.png")
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

    [/autoit][autoit][/autoit][autoit]

    GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit][autoit][/autoit][autoit]

    ; Ressourcen aufräumen
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    [/autoit][autoit][/autoit][autoit]

    ; PNG Bild zeichnen
    Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_PAINT

    [/autoit]

    mfg (Auto)Bert