Seltsames Graphics-Problem - Mouse Rectangle wird gerendert? Grafikkarte?



  • Guten Abend zusammen!

    Ich habe ein sehr seltsames Problem mit C# und der Graphics-Klasse.

    Ich habe eine pictureBox, auf die bei Mausklick ein schwarzes und ein rotes Rechteck gezeichnet wird, das Rote allerdings mit Color(200,255,0,0), sprich einem Alpha Wert von 200 (leichte transparenz). Das Ergebnis sieht so aus:

    [url=http:\\www.bluecommerce.net\error.jpg]Bild[/url]

    Link:http:\\www.bluecommerce.net\error.jpg

    Der code ist

    private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    		{
    			SolidBrush pen1 = new SolidBrush(Color.FromArgb(200,255,0,0));
    			SolidBrush pen2 = new SolidBrush(Color.Black);
    			Graphics Graph = userControl1.CreateGraphics();
    			Graph.FillRectangle(pen2,e.X - 50,e.Y - 50,100,100);
    			Graph.FillRectangle(pen1,e.X - 50,e.Y - 50,100,100);
    		}
    

    Wie ihr seht, wird das rote Rechteck genau um den Mauszeiger herum nicht gerendert - man sieht das schwarze Rechteck durch. Dies geschieht NUR, wenn ein Alpha Value gesetzt wurde AUßER 255 und 0, da geht es.

    Außerdem tritt der Fehler nur auf meinem Computer und einem ähnlichen (BEIDE Windows 2000 und Matrox G450 Millenium) auf, auf einem Windows XP Notebook mit anderer Grafikkarte (Radeon) nicht.

    Alle aktuellen Treiber und ServicePacks für GDI+, GDI, Windows 2000, Visual Studio .NET 1.0 (Service Pack 2) sind installiert.

    Jetzt ist die Frage: liegt es
    a.) an der Grafikkarte
    b.) an Windows 2000
    c.) an Visual Studio .NET
    d.) an GDI+
    c.) an mir?

    Wer hat ähnliches schonmal erlebt und kennt Abhilfe?

    Ich habe mich jetzt wirklich schon stundenlang mit suchen bei msdn, google etc. beschäftigt und keine Lösung gefunden. Der Fehler tritt auch im MouseUP, MouseDown und anderen Events auf.

    Vielen Dank im Voraus.

    Schöne Grüße
    Marcel

    Jetzt ist die Frage: liegt es am .NET Framework,



  • keine ahnung warum das passiert.

    hier kleine Abhilfe für dein Problem:

    private void userControl11_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    	Rectangle rect = new Rectangle(e.X - 50,e.Y - 50,100,100);
    	Bitmap bmp = new Bitmap(rect.Width, rect.Height);
    	SolidBrush pen1 = new SolidBrush(Color.FromArgb(200,255,0,0));
    	SolidBrush pen2 = new SolidBrush(Color.Black);
    
    	Graphics g1 = Graphics.FromImage(bmp);
    	g1.FillRectangle(pen2, 0, 0, bmp.Width, bmp.Height);
    	g1.FillRectangle(pen1, 0, 0, bmp.Width, bmp.Height);
    	g1.Dispose();
    
    	Graphics Graph = userControl11.CreateGraphics();
    	Graph.DrawImage(bmp, rect, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel);
    	Graph.Dispose();
    
    	bmp.Dispose();
    }
    

Log in to reply