2012-04-29 16 views
6

Używam ImageList dla TreeView i ListView. Najpierw ustawiłem jakość obrazu na 32-bitową, a następnie dodałem obrazy, które są półprzezroczyste. Jakość wygląda dobrze, ale po kilku minutach pisania, kompilowania i uruchamiania aplikacji jakość wygląda źle.ImageList: obrazy 32-bitowe tracą jakość

patrz obrazek: enter image description here

Używane właściwości

ColorDepth: Depth32Bit 
ImageSize: 16; 16 
TransparentColor: Transparent 

Są czarne piksele za pikseli, które były półprzezroczyste, ale nie w pełni przejrzyste.

Ponowne dodanie wszystkich obrazów przywraca pierwotną jakość, ale po kilku minutach wygląda tak, jak po prawej stronie ekranu.

+0

Która wersja Visual Studio? Założę się, że działa dobrze, jeśli załadujesz listę obrazów w czasie wykonywania. Prawdopodobnie błąd w kodzie VS, który przechowuje/ładuje stan listy obrazów w wyznaczonym czasie. –

+0

To jest VS2010 Ultimate. Po raz pierwszy pomyślałem o ładowaniu ich w czasie wykonywania, ale to nie jest tak, jak powinno. Jakieś inne pomysły? – bytecode77

+0

Ładowanie w środowisku wykonawczym z zasobu jest dokładnie tym, co bym zrobił. Następnie mogę wybrać rozmiar pasujący do skalowania czcionki. –

Odpowiedz

8

Wygląda na to, że dane kanału alfa są tracone, gdy obrazy są przechowywane jako ImageStream (domyślne zachowanie projektanta VS). Jeśli chcesz przestać używać Designera do ustawiania obrazów w ImageList, możesz użyć półprzezroczystych obrazów do ColorDepth.Depth32Bit. Jest to bardzo niewygodne, ale działa.

Możesz więc umieścić swoje zdjęcia w pliku Resources.resx i dodać je w odpowiednim miejscu w kodzie. Na przykład w konstruktorze ciebie UserControl/Form po wywołaniu InitializeComponent() według kodu tak:

_imageList.Images.Add(Resources.Image32); 
    _imageList.Images.SetKeyName(0, "Image32"); 
    _myButton.Image = 0; 

(Ta informacja jest dostępna w komentarzach do odpowiedzi zaznaczono odpowiedź Dodałem to jako odpowiedź więc byłoby trudniej przegapić inną dostępną opcję)

Powiązane problemy