Wie zeichnet man ein einzelnes Pixel?



  • Hallo,

    wie zeichnet man ein einzelnes Pixel?

    Wenn ich DrawLine mit identischem Start- und Endpunkt verwende, dann wird gar nichts gezeichnet:

    g->DrawLine(pen,x,y,x,y);
    

    Wenn ich die eine Koordinate um 1 vergrössere, dann werden offensichtlich schon zwei Pixel gezeichnet:

    g->DrawLine(pen,x,y,x,y+1);
    

    Auch hinsichtlich Geschwindigkeit kann das nicht die optimale Lösung sein, wenn jedesmal unnötig viele Parameter übergeben werden müssen.
    Ich suche eine schnelle Lösung um ein ganzes Bild pixelweise zu zeichnen.

    Gruss
    Michael



  • g->DrawRectangle(pen,x,y,1,1);
    

    zeichnet einen einzelnen Pixel, ist jedoch nicht gerade performant.
    Besser ist es eine Bitmap zu erzeugen und diese dann komplett zu zeichnen.
    Statt der SetPixel(x, y)-Methode gibt es jedoch bessere und schnellere Methoden, s. z.B. http://www.mycsharp.de/wbb2/thread.php?threadid=29667 bzw. http://www.mycsharp.de/wbb2/thread.php?threadid=59354



  • Hallo,

    Th69 schrieb:

    g->DrawRectangle(pen,x,y,1,1);
    

    zeichnet einen einzelnen Pixel, ist jedoch nicht gerade performant.

    Nein, mit DrawRectangle gibt's das gleiche Problem wie mit DrawLine. Wenn ich (pen,x,y,1,1) übergebe, dann werden gleich 4 Pixel gezeichnet, und wenn ich (pen,x,y,0,0) übergebe, dann wird gar nichts gezeichnet.

    Th69 schrieb:

    Besser ist es eine Bitmap zu erzeugen und diese dann komplett zu zeichnen.

    Guter Hinweis, das werde ich jetzt ausprobieren.

    Gruss
    Michael



  • Hallo,

    ich habe das jetzt mit Bitmap ausprobiert, und das funktioniert deutlich schneller als bisher:

    Bitmap^ image1;
        image1 = gcnew Bitmap(1000,1000);
    
        for (n = 0; n < 600000; n++){
            ...
    	    image1->SetPixel(x,y,color);
        }
        pictureBox1->Image = image1;
    

    Frage: Kann man das auch so machen, dass man live sehen kann wie das Bild langsam aufgebaut wird?

    Gruss
    Michael

    P.S. Sehe ich das richtig, wenn ich in ein Graphics Objekt zeichne dann gibt's kein SetPixel(), und wenn ich in ein Bitmap zeichne dann gibt's kein DrawLine()? Was mache ich wenn ich beide Funktionen brauche?



  • Kannst du dafür nicht der PictureBox die Bitmap zuweisen, bevor du reinschreibst? Ich glaube, dass es damals so ging...



  • Hallo,

    /rant/ schrieb:

    Kannst du dafür nicht der PictureBox die Bitmap zuweisen, bevor du reinschreibst?

    Wie macht man das?

    Gruss
    Michael


Log in to reply