Transparenz bei TImage



  • Hallo Leute

    Ich kopiere aus einer TImageList ein bestimmtes Bild in ein TImage
    Unter dem TImage liegt ein TPanel.

    Image = new TImage( this );
        Image->Parent = this;
        Image->Align = alLeft;
        Image->Width = 25;
        Image->Transparent = true;
    
        Graphics::TBitmap *bmp = new Graphics::TBitmap();
        FormMain->ImageList3->GetBitmap( 1, bmp );
        Image->Picture->Assign( bmp );
    //    Image->Picture->Bitmap->TransparentColor = bmp->Canvas->Pixels[0][0];
    //    Image->Picture->Bitmap->TransparentMode = tmFixed;
    
        delete bmp;
    

    Das Bild ist im Hintergrund "clSilver"-gefärbt. Bei Hinzufügen des Bildes zur TImageList erkennt diese auch korrekt die Hintergrundfarbe, was man daran erkennt, dass der Hintergrund des Bildes in der TImageList weiß dargestellt wird und nicht "clSilver".

    Leider ist der Hintergrund des Bildes zur Laufzeit immer weiß! Egal welche Farbe das darunterliegende Panel annimmt.

    Da ich vermutet habe, dass die Transparenzinformationen beim Kopiervorgang verloren gehen habe ich diese manuell beim Bitmap-Property gesetzt ( siehe auskommentierter Code ), aber auch das hat keine Besserung gebracht.

    Hat jemand noch eine Idee?



  • Image->Picture->Bitmap->TransparentColor = Image->Picture->Bitmap->Canvas->Pixels[0][0]

    sollte besser gehen

    Gruss
    Frank



  • Hat leider keine Verbesserung gebracht. Vielleicht liegt ja auch der Fehler irgendwo in meiner Kopieroperation...



  • Welche Farbe hat denn das Pixel in der linken unteren Ecke? Ich meine, dass das zur Bestimmung der Transparenzfarbe benutzt wird.



  • In jeder Ecke des Bildes haben die Pixel den Wert "clSilver".
    Die TImageList hat das auch schon richtig erkannt... Nur nach der Kopieroperation ins TImage scheint es irgendwie nicht mehr zu funzen.



  • Habe das Problem behoben.

    Ich habe beim Hinzufügen des Bildes zur TImageList NICHT clSilver als Transparenzfarbe angegeben, sondern eine andere Farbe ( in dem Fall clBlack ), so dass der Hintergrund des Bildes in der TImageList sichtbar ist ( clSilver ).

    Jetzt funktioniert scheinbar das manuelle Setzen der Transparenzfarbe nach der Kopieroperation.

    Image->Picture->Bitmap->TransparentColor = Image->Picture->Bitmap->Canvas->Pixels[0][0];
    Image->Picture->Bitmap->TransparentMode = tmFixed;
    

Log in to reply