2009-03-06 14 views
5

Jeśli dodasz obraz PNG do kontrolki ImageList i użyjesz tej listy ImageList z ListView lub TreeView w aplikacji Windows Forms (.Net 2.), ikony wyświetlone w ListView mają niebieskie "halo" wokół nich.Obejście problemu błędu przejrzystości ImageList?

Np

alt text http://deeperdesign.wordpress.com/files/2009/03/blue-halo.png

Czy ktoś wie, jak obejść ten pozwala na dodawanie 32-bitowe PNG z kanałem alfa do ImageList i zachować przezroczyste piksele i uniknąć efektu halo/błąd?

Dzięki.

Odpowiedz

10

Nie sądzę, że to błąd. Powinieneś ustawić głębię kolorów ImageList na 32-bitową i musisz używać stylów wizualnych.

Jeśli aplikacja ma włączone style wizualne, WinForm używa wersji 6.0 wspólnych elementów sterujących systemu Windows, która obsługuje przezroczystość alfa. W przeciwnym razie użyje poprzedniej wersji, która nie obsługuje przezroczystości alfa, i niepoprawnie renderuje obrazy ARGB z niebieskim halo.

Jeśli potrzebujesz obejścia, możesz spróbować utworzyć nowe bitmapy o tym samym rozmiarze, wypełniając je funkcją BackColor ListView, tworząc obiekt graficzny na mapie bitowej i rysując obraz ARGB na mapie bitowej. Następnie możesz wstawić te wstępnie odświeżone bitmapy do ImageList. Jeśli to zrobisz, wybór będzie wyglądał śmiesznie na ikonie w ListView.

Kolejnym obejściem będzie bezpośredni dostęp do danych bitmapowych (przy użyciu funkcji LockBits()) i ręczne połączenie wszystkich półprzezroczystych pikseli, co spowoduje, że obrazy będą prawidłowo renderowane i wyglądać tak, jak powinny, gdy są wybrane .

Powiązane problemy