2009-07-27 7 views
3

Ich möchte ein Bild über andere zeichnen, ohne seinen Hintergrund zu zeichnen. Das Bild, das ich zeichnen möchte, ist ein Stern. Ich möchte einige Sterne über ein Kartenbild legen..NET CF 2.0: Zeichnen Sie ein PNG über ein Bild mit Hintergrundtransparenz

Das Problem ist, dass das Bild des Sterns ein weißes backgroud hat und wenn ich über die Karte zeichne, erscheint der weiße Hintergrund.

Meine Methode um den Stern zu zeichnen ist wie folgt:

Graphics graphics = Graphics.FromImage(map); 
Image customIcon = Image.FromFile("../../star.png"); 
graphics.DrawImage(customIcon, x, y); 

Ich habe versucht, mit transparenten backgroud Bilder (PNG und GIF-Format), und es ist immer etwas rund um den Stern zu ziehen. Wie kann ich einen Stern ohne seinen Hintergrund zeichnen?

Das Programm ist für Windows Mobile 5.0 und höher, mit Compact Framework 2.0 SP2 und C#.

ich mit diesem Code versucht:

Graphics g = Graphics.FromImage(mapa); 
Image iconoPOI = (System.Drawing.Image)Recursos.imagenPOI; 
Point iconoOffset = new Point(iconoPOI.Width, iconoPOI.Height); 

System.Drawing.Rectangle rectangulo; 
ImageAttributes transparencia = new ImageAttributes(); 
transparencia.SetColorKey(Color.White, Color.White); 

rectangulo = new System.Drawing.Rectangle(x, y, iconoPOI.Width, iconoPOI.Height); 
g.DrawImage(iconoPOI, rectangulo, x, y, iconoPOI.Width, iconoPOI.Height, GraphicsUnit.Pixel, transparencia); 

Aber ich habe nichts auf der Karte sehen.

X und Y ist de Koordinaten, wo ich die iconoPOI zeichnen will, die es ein PNG imagen mit einem weißen Hintergrund ist.

Vielen Dank!

+0

Auch ist es möglich, dass der Hintergrund Ihres Sternbildes nicht rein weiß ist, was den Transparenzeffekt durcheinander bringen würde. – MusiGenesis

Antwort

0

Normalerweise ist diese Aufgabe ziemlich kompliziert (Sie müssen die windows API BitBlt Funktion antippen und ein schwarz-weißes Maskenbild und andere Sachen erstellen), aber hier ist ein einfacher Weg es zu tun.

Angenommen, Sie haben ein Bitmap für Ihr Hintergrundbild (bmpMap) und eine für Ihr Sternbild (bmpStar), und Sie müssen den Stern auf (xoffset, yoffset) zu zeichnen, diese Methode tun, was Sie brauchen:

SetPixel und GetPixel sind unglaublich langsam (die bevorzugte Methode ist die Verwendung der LockBits-Methode der Bitmap - hier sind Fragen zu SO, die erklären, wie man es benutzt), aber das wird Ihnen den Anfang machen.

Verwandte Themen