Hintergrund eines Bild transparent machen?

  • Hallo,

    ich habe immoment folgendes Problem :

    Der Hintergrund des 2 ten Bildes ( Es ist ein Text mit Effekten, wo der Hintergrund weiß ist ) , soll transparent sein.

    Kann mir jemand sagen, wie ich es hinbekomme? Ich habe es schon versucht :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 501, 159, 192, 124)
    $Pic1 = GUICtrlCreatePic("Signatur Beispiel 2.jpg", 0, 8, 500, 150, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetBkColor(-1, -2)
    $Pic2 = GUICtrlCreatePic("Peter.jpg", 144, 16, 100, 50, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlSetBkColor(-3, -2)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
  • Ist es denn überhaupt möglich? Da ich sonst die ganzen Bilder gerade alle umsonst erstelle

  • Welche Befehle bei GDI + brauche ich , um z.b. die Farbe weiß von einem Bild transparent zu machen? Habe diesen GDI + Kramm noch nie benutzt und muss ich dort auch etwas includen oder so eine GDI+ au3 runterladen?

  • Wie schon gesagt statt dem Peter jpg entweder eine transparente gif oder png file verwenden habs dir mal von der theorie erstellt

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <WINAPI.au3>
    #include <StaticConstants.au3>

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

    $Form1 = GUICreate("Form1", 501, 159, 192, 124)
    $Pic1 = GUICtrlCreatePic("Signatur Beispiel 2.jpg", 0, 8, 500, 150, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetBkColor(-1, -2)
    $pic = GUICreate("", 100, 45, 140, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $Form1)
    GUICtrlCreatePic("Peter.gif", 0, 0, 0, 0, $WS_EX_LAYERED, BitOR($SS_NOTIFY, $WS_GROUP))
    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $Form1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Danke für die schnelle Hilfe. Nun sieht es aber noch etwas blöd aus, da ma den Rand des Textes noch sehen kann und es etwas nervt. Kann ich diesen auch noch wegbekommen?

  • Dann nimmst du dir Irfanview uind füllst die weiße fälche mit eienr seltenen Farbe aus (wenn es dnan Ränder gibt, einfach die Zahl in der Toolbox erhöhen, die Farbtoleranz) und die Farbe kannst du dann damit transparent machen, mit GDI+ und Autoit dauert das ewig, kannst du damcht aber auch nachbauen, ein paar Befehle, die du brauchen könntest (einfach draufklicken):

    [autoit]


    _GDIPlus_BitmapCreateFromFile
    _GDIPlus_ImageLoadFromFile
    _GDIPlus_ImageSaveToFile
    _GDIPlus_BitmapLockBits ;Wenn du nicht genug Erfahrung hast, nimm lieber _GDIPlus_BitmapSetPixel und -GetPixel aus der GDIP.au3, http://www.autoitscript.com/forum/topic/106021-gdip-au3/
    _GDIPlus_BitmapUnlockBits
    _GDIPlus_GraphicsCreateFromHWND
    ;sonstige Graphics-Funktionen, siehe in der Hilfe (auf Funktion geklickt) "Verwandte Funktionen"

    [/autoit]
  • Um das mit GDI+ zu machen benötigst du GDIp.au3 von hier: http://www.autoitscript.com/forum/topic/10…post__p__748870

    Bei _GDIPlus_ImageAttributesSetColorKeys stellt man den Farbbereich ein, welcher transparent sein soll (ich hab mal den Bereich von 0xFFAAAAAA bis 0xFFFFFFFF gewählt)

    Spoiler anzeigen
    [autoit]

    #include "GDIp.au3"
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode", 1)
    Opt("MouseCoordMode", 2)

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

    _GDIPlus_Startup()

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

    Global $hImage_1 = _GDIPlus_ImageLoadFromFile("signatur Beispiel 2.jpg")
    Global $hImage_2 = _GDIPlus_ImageLoadFromFile("Peter.jpg")

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

    Global $iWidth = _GDIPlus_ImageGetWidth($hImage_1) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage_1)
    Global $iHeight = _GDIPlus_ImageGetHeight($hImage_1) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage_1)

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

    Global $hGui = GUICreate("Test", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    Global $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer, 2)
    _GDIPlus_GraphicsClear($hGfxBuffer, 0xFF000000)
    GUIRegisterMsg($WM_PAINT, "WM_PAINT")
    GUISetState()

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

    _GDIPlus_GraphicsDrawImage($hGfxBuffer, $hImage_1, 0, 0)

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

    Global $hAttributes = _GDIPlus_ImageAttributesCreate()
    _GDIPlus_ImageAttributesSetColorKeys($hAttributes, 0, True, 0xFFAAAAAA, 0xFFFFFFFF)
    _GDIPlus_GraphicsDrawImageRectRectIA($hGfxBuffer, $hImage_2, 0, 0, 100, 50, 200, 20, 100, 50, $hAttributes)

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

    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)

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

    While 1
    Sleep(10)
    WEnd

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

    Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_PAINT

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

    Func _Exit()
    _GDIPlus_ImageDispose($hImage_1)
    _GDIPlus_ImageDispose($hImage_2)
    _GDIPlus_GraphicsDispose($hGfxBuffer)
    _GDIPlus_BitmapDispose($hBmpBuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]