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:

protected override void OnPaint(PaintEventArgs e)
{
   if (!base.HasBackground)
   {
      if (off_screen == null)
      {
         off_screen = new Bitmap(ClientSize.Width, ClientSize.Height);
      }
      using (Graphics g = Graphics.FromImage(off_screen))
      {
         using (SolidBrush brush = new SolidBrush(Parent.BackColor))
         {
            g.Clear(BackColor);
            g.FillRectangle(brush, ClientRectangle);
         }
      }
   }
   else
   {
      using (SolidBrush brush = new SolidBrush(ForeColor))
      {
         ImageAttributes attr = new ImageAttributes();
         attr.SetColorKey(Color.Transparent, Color.Transparent);

         Rectangle dstRect = new Rectangle(0, 0, myimage.Width, myimage.Height);
         e.Graphics.DrawImage(myimage, dstRect, 0, 0, myimage.Width, myimage.Height,
            GraphicsUnit.Pixel, attr);
      }
   }
}

Na koniec wystarczy wywalić wszystko, co było potrzebne w Labelu, a nie jest potrzebne tutaj i zmienić nazwę klasy na TransparentPanel.

Zostaw odpowiedź

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.