Livebild zu langsam



  • HI

    Hab ein Progamm in C# geschrieben, dass mir Daten aus einer Kamera ausliest. Diese Daten lass ich mir live anzeigen. Problem ist dass es ein bisschen zu langsam ist, es ruckelt bei der Darstellung. Wie kann ich das ganze schneller machen?
    Zur verfügung hab ich C# und eventuell OpenGL.
    Hier der Code:

    unsafe private void livebild()
    {
    short i = 0;
    byte* pBase = null;
    BitmapData bitmapData = null;
    int mode = 0;
    Bitmap neupic = new Bitmap(640, 480);
    Rectangle bounds = new Rectangle(0,0,640,480);
    void *collut;
    while(i <100)	
    {
    	bitmapData = neupic.LockBits(bounds,ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
    	pBase = (byte*) bitmapData.Scan0.ToPointer();
             // Bild neupic wird generiert
    	pic1.Image = neupic;
    	neupic.UnlockBits(bitmapData);
    	pic1.Refresh();
    	bitmapData = null;
    	pBase = null;
    	colorlive = null;
    	i++;
    	}
    	}
    }
    

    Ich denke es liegt an der Anzeige dass das ganze so langsam ist. Wenn ich den Refesh()-Befehl weg lasse, seh ich zwar kein Bild aber die Routine wird vier bis fünf mal schneller durchlaufen.
    Mit OpenGL hab ichs auch schon versucht bekomme aber noch kein Bild.
    Gibts eigentlich ne Alternative zu Refresh(in C#)? oder lieber gleich OpenGL?(was ich stark vermute)

    Wenns C#-Forum doch besser geeignet wär verschiebt den Eintrag bitte dahin.

    Danke



  • Quotenmausi schrieb:

    Wenn ich den Refesh()-Befehl weg lasse, seh ich zwar kein Bild aber die Routine wird vier bis fünf mal schneller durchlaufen.

    Was, echt?!?!?! 😃 😃 😃

    Also unter Windows wüsste ich was helfen würde: DirectShow! (zu Capture gibt's natürlich Tuts und Samples im DXSDK!) 😋 👍



  • Sgt. Nukem schrieb:

    Quotenmausi schrieb:

    Wenn ich den Refesh()-Befehl weg lasse, seh ich zwar kein Bild aber die Routine wird vier bis fünf mal schneller durchlaufen.

    Was, echt?!?!?! 😃 😃 😃

    ja wirklich ganz ganz ehrlich

    Sgt. Nukem schrieb:

    Also unter Windows wüsste ich was helfen würde: DirectShow! (zu Capture gibt's natürlich Tuts und Samples im DXSDK!)

    Soll das heißen mit DirectX würds ganz einfach gehn, weil dann mach ich lieber das und nicht OpenGL. Mit DirectX kenn ich mich halt noch gar nicht aus, aber was noch nicht is kann ja noch werden.



  • Quotenmausi schrieb:

    Soll das heißen mit DirectX würds ganz einfach gehn, weil dann mach ich lieber das und nicht OpenGL.

    Come on, Ronnie!

    Bye, TGGC \-/



  • Quotenmausi schrieb:

    Sgt. Nukem schrieb:

    Also unter Windows wüsste ich was helfen würde: DirectShow! (zu Capture gibt's natürlich Tuts und Samples im DXSDK!)

    Soll das heißen mit DirectX würds ganz einfach gehn, weil dann mach ich lieber das und nicht OpenGL. Mit DirectX kenn ich mich halt noch gar nicht aus, aber was noch nicht is kann ja noch werden.

    Naja, mit "ganz einfach" hat das auch wenig zu tun... Bisserl mehr als 2 Variablen zu deklarieren isset schon! 👍
    Falls Du das DXSDK (für Input o.ä.) eh schon drauf hast, würd' ich mal den SampleBrowser starten und die AMCap oder ähnlichen Samples für DirectShow austesten: Ob's das ist was Du willst.

    Bei OpenGL ist halt nur das Problem, daß die API sowas nicht standardmäßig mitbringt, und ein All-platforms-Capture-API wahrscheinlich nicht existiert. 😞
    Warte auf OpenCL! 😉



  • Dass es ein bisschen aufwändiger ist war mir schon klar, aber was ich so gelesen hab unterstützt halt DirectX C# wesentlich besser als OpenGL das tut und da ich mit C# programmieren soll und nicht warten kann, nehm ich lieber gleich DirectX.



  • @TGGC: Wieder eine(r) mehr... 😉 🤡 👍



  • Frame conceded.

    Bye, TGGC \-/


Anmelden zum Antworten