Przezroczyste obrazki w Windows Mobile

Wczoraj udało się dodać przezroczystość do Labeli. Teraz fajnie by było, gdyby jeszcze obrazy w PictureBox’ach zachowywały przezroczystość zapisaną np. w plikach PNG. Oczywiście standardowo Visual Studio olewa całkowicie wszystko co jest związane z przezroczystością. Trzeba stworzyć swoją nową, ulepszoną wersję PictureBox’a. MSND Library ma nawet wpis na ten temat pt. „How to: Draw Images with Transparency„. Przykładowy kod można użyć do stworzonej wczoraj klasy TransparentLabel.

I tak, dodajemy do niej tylko obraz który ma się wyświetlać:

public Bitmap myimage { get; set; }

a następnie zmieniamy lekko OnPaint:

Czytaj dalej „Przezroczyste obrazki w Windows Mobile”

Transparent wcale nie znaczy przezroczysty

Wg Microsoftu „transparent” nie znaczy wcale „przezroczysty”. Ci którzy wymyślili .Net Compact Framework (czyli tę okrojoną wersję dla PDA i komórek) uważali, że przezroczystość oznacza ustawienie takiego samego koloru tła jaki ma element nadrzędny. No i pewnie w 90% prostych formularzy i kontrolek się to sprawdza.

Ale nie trzeba się zbytnio wysilić, aby zobaczyć, że przy tworzeniu pierwszej bardziej zaawansowanej graficznie aplikacji na Windows Mobile, takie rozumowanie będzie błędne. Niech np. tłem aplikacji będzie jakiś obrazek, albo dla ułatwienia jakiś mały gradient. Oto co na wyjdzie:

Windows Mobile Emulator - przezroczyte tło w Labelach
Windows Mobile Emulator - przezroczyte tło w Labelach

Aplikacji wygląda tragicznie, bo każdy Label, PictureBox itp. ma tło jednostajne, a nie przezroczyste. Ustawienia BackgroundColor na Web / Transparent nic nie da. Trzeba napisać od początku nowego Label’a, Form’a i PictureBox’a.

Pomóc mogą dwie strony:

  1. http://blogs.commentor.dk/post/Transparent-Controls-in-NETCF.aspx
  2. http://www.codeplex.com/alphamobilecontrols

Na obrazie powyżej „transparentLabel1” jest właśnie takim przerobionym Labelem (wg pierwszego linka). Jak można się domyśleć, teraz trzeba przerobić PictureBox, aby te strzałki po prawej i lewej ekrnu też wykorzystywały przezroczystość. Ale to jutro… Dzisiaj już nie mogę patrzeć na to całe MS Visual Studio…