[Delphi] Kopiowanie na canvas z przezroczystoscia [szybkie]

0

Pisze taka gierke i potrzebuje na bitmape kopiowac szybko spora ilosc mniejszych bitmap. Zauwazylem ze jesli te mniejsze bitmapy maja wylaczana przezroczystosc to to wszystko obciaza mi procesor jakies 20 razy mniej (tak na oko, w każdym razie dużo mniej). I takie pytanie czy da sie jakoś szybko kopiować bitmapy z przezroczystoscią? I ciekawi mnie czemu standardowo trwa to dużo dłużej niż bez przezroczystosci.

0

Odpowiedź jest prosta ,To że jakaś bitmapa ma kolor transparent oznacza po prostu że piksel w danym kolorze nie jest rysowany czyli jeśli sobie chcesz transparent kolor komputer sprawdza wszystkie piksele pod kątem tego czy nie równają się kolorowi przeźroczystemu i dopiero potem je ewentualnie rysuje.
Natomiast gdy nie ma transparentości komputer przerysowywuje wszystko "jak leci " bez sprawdzania czy ma dany kolor rysować czy nie. Różnica czasowa jest właśnie przez to sprawdzanie. ;-P
np.
przy bitmapie 24 bitowej każdy piksel ma aż 3 bajty do sprawdzenia czyli dla pitmapki 100X100 mamy
30000 bajtów do sprawdzenia :>

0

Ja jednak uważam że to nie tyle problem rysowania przezroczystych bitmap ale implementacji TBitmap Borland'a. Borland tak zaimplementował TBitmap by można tego wygodnie używać ale niestety dzięki temu utracono szybkość. Ja proponuje używać 32 bitowych bitmap i funkcji winapi AlphaBlend(...) do rysowania tego na innej bitmapie.

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