(TPicture) rysowanie z pominięciem tła

0

Witam,
mam problem z szybkością rysowania obrazków, "pomijając" tło - dla przykładu weźmy piłkę na czarnym (rgb 0,0,0) tle. Do tej pory wymyśliłem dwie drogi - albo piksel po pikselu sprawdzam, czy jest on (piksel) czarny, i jeśli nie, to "nanoszę" go na klatkę, albo pobieram kolor piksela z klatki i nanoszę go na tło obrazka z piłką, potem rysuję całość za pomocą Draw() na klatce. (Draw() działa błyskawicznie i rozwiązuje problem szybkości, ale nie mogę przecież zostawić tego tła :)).

Jest jakaś funkcja, biblioteka albo metoda pomocna w tym temacie?

Dla obrazu wrzucam przykładową funkcję.

Z góry dzięki za pomoc.

#define __TRANSPARENT_COLOR clBlack

void __fastcall BlendDrow(     int target_width,
                                        int target_height,
                                        int left,
                                        int top,
                                        TPicture * back,
                                        TPicture * target)

{
        for (int i=0;i<target_width;++i)
        {
                for (int j=0;j<target_height;++j)
                {
                if (target->Bitmap->Canvas->Pixels[i][j]!=__TRANSPARENT_COLOR)
                        {
                        back->Bitmap->Canvas->Pixels[i+left][j+top]=target->Bitmap->Canvas->Pixels[i][j];
                        }
                }
        }
return;
}
0
Graphics::TBitmap *BMP = new Graphics::TBitmap();
BMP->TransparentMode = tmFixed; // Ustawiasz kolor jaki wybierasz sam lub domyślnie bez tego brany jest kolor z pierwszego dolnego lewego pixela (chyba - dokładniej w helpie poszukaj)
BMP->TransparentColor =  (TColor) RGB(0,0,0); //clBlack;
BMP->Transparent = true;
BMP->Canvas->Draw(....);

(....)

BMP->Free();

Może to ci pomoże w uzyskaniu zawsze przeźroczystości :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1