Transparensverlust bei "_GDIPlus_BitmapCloneArea"???

  • Ich muss euch leider schon wieder belästigen.
    Da ich gerade an dem Teddy-Script schreibe, hab ich da noch ein Problem.
    Ich lade das Bild mit

    [autoit]

    _ResourceLoadImage(@scriptdir & "\gfx.dat","Teddy")

    [/autoit]


    dies funktioniert auch super.
    Danach starte ich diese Funktion:

    [autoit]

    dim $bitmap[13][$data[12][4]+$data[0][4]+$data[1][4]+$data[2][4]+$data[3][4]+$data[4][4]+$data[5][4]+$data[6][4]+$data[7][4]+$data[8][4]+$data[9][4]+$data[10][4]+$data[11][4]+$data[12][4]+1]
    For $l = 0 To 12 Step 1
    $spr = $data[$l][2]/$data[$l][4] ;Länge eines Sprites
    For $i = 0 To $data[$l][4] Step 1
    $bitmap[$l][$i] = _GDIPlus_BitmapCloneArea($sprite, $data[$l][0]+$spr*$i, $data[$l][1], $spr, $data[$l][3])
    next
    Next

    [/autoit]


    Diese Funktion ließt aus dieser Liste:

    Spoiler anzeigen
    [autoit]

    ; 0 = die
    $data[0][0] = 157 ;x
    $data[0][1] = 0 ;y
    $data[0][2] = 204 ;l
    $data[0][3] = 52 ;h
    $data[0][4] = 4 ;n

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

    ; 1 = rechts unten
    $data[1][0] = 52 ;x
    $data[1][1] = 0 ;y
    $data[1][2] = 52 ;l
    $data[1][3] = 52 ;h
    $data[1][4] = 1 ;n

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

    ; 2 = links unten
    $data[2][0] = 0 ;x
    $data[2][1] = 0 ;y
    $data[2][2] = 52 ;l
    $data[2][3] = 52 ;h
    $data[2][4] = 1 ;n

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

    ; 3 = oben (Rechtsausrichtung)
    $data[3][0] = 52 ;x
    $data[3][1] = 0 ;y
    $data[3][2] = 52 ;l
    $data[3][3] = 52 ;h
    $data[3][4] = 1 ;n

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

    ; 4 = oben (Linksausrichtung)
    $data[4][0] = 0 ;x
    $data[4][1] = 0 ;y
    $data[4][2] = 52 ;l
    $data[4][3] = 52 ;h
    $data[4][4] = 1 ;n

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

    ; 5 = rechts oben
    $data[5][0] = 52 ;x
    $data[5][1] = 0 ;y
    $data[5][2] = 52 ;l
    $data[5][3] = 52 ;h
    $data[5][4] = 1 ;n

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

    ; 6 = links oben
    $data[6][0] = 0 ;x
    $data[6][1] = 0 ;y
    $data[6][2] = 52 ;l
    $data[6][3] = 52 ;h
    $data[6][4] = 1 ;n

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

    ; 7 = rechts
    $data[7][0] = 0 ;x
    $data[7][1] = 102 ;y
    $data[7][2] = 416 ;l
    $data[7][3] = 52 ;h
    $data[7][4] = 8 ;n

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

    ; 8 = links
    $data[8][0] = 0 ;x
    $data[8][1] = 50 ;y
    $data[8][2] = 416 ;l
    $data[8][3] = 52 ;h
    $data[8][4] = 8 ;n

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

    ; 9 = unten (Rechtsausrichtung)
    $data[9][0] = 52 ;x
    $data[9][1] = 0 ;y
    $data[9][2] = 52 ;l
    $data[9][3] = 52 ;h
    $data[9][4] = 1 ;n

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

    ; 10 = unten (Linksausrichtung)
    $data[10][0] = 0 ;x
    $data[10][1] = 0 ;y
    $data[10][2] = 52 ;l
    $data[10][3] = 52 ;h
    $data[10][4] = 1 ;n

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

    ; 11 = keine Bewegung (Linksausrichtung)
    $data[11][0] = 0 ;x
    $data[11][1] = 154 ;y
    $data[11][2] = 260 ;l
    $data[11][3] = 52 ;h
    $data[11][4] = 5 ;n

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

    ; 12 = keine Bewegung (Rechtsausrichtung)
    $data[12][0] = 0 ;x
    $data[12][1] = 206 ;y
    $data[12][2] = 260 ;l
    $data[12][3] = 52 ;h
    $data[12][4] = 5 ;n

    [/autoit]


    Die Sprite-Positionen, mit der sie dann das Bild in Einzelbilder unter der Varbiable " $bitmap[$l][$i]" abspeichert.
    Dies funktioniert auch super.
    Problem:
    Das Gesamtbild ist an manchen Stellen transparent. Die Sprites(Einzelbilder) jedoch nicht, die Stellen werden entweder schwarz oder grün angezeigt.
    An der "_ResourceLoadImage(@scriptdir & "\gfx.dat","Teddy")"-Funkion liegt es nicht. Die läd die Bilder richtig.
    Entweder bei:

    • dem Abspeichern der Bilder(mit Gimp)
    • dem Zerlegen des Bildes mit " _GDIPlus_BitmapCloneArea"

    entsteht dieser Fehler.
    Nun meine Frage: Kann man das umgehen.
    Das zu ladene Bild, Script und die GFX.dat hängen an.

  • Hallo,
    habe einige Zeilen umgestellt und mir mit

    [autoit]

    For $i = 0 To $data[$l][4] Step 1
    $bitmap[$l][$i] = _GDIPlus_BitmapCloneArea($sprite, $data[$l][0]+$spr*$i, $data[$l][1], $spr, $data[$l][3])
    SetBitmap($GUI1, $bitmap[$l][$i], $trans*2.55)
    ConsoleWrite(' $l = ' & $l & ' ' & $i & @crlf) ;### Debug Console
    sleep (3000)
    next

    [/autoit]

    setbitmap() die Sprites angesehen. Keines davon hatte die von dir angesprochene Transparenz.....

  • Ich glaube, die Standardeinstellung für BitmapCloneArea nimmt kene Transparenz mit. Gib doch mal $GDIP_PXF32ARGB als $iFormat an ;)