Bild gezoomt anzeigen



  • Hi,

    Ich such eine einfache schnelle Lösung (in der Ausführungszeit) wie ich ein Bitmap als Fullscreen-Bild auf dem Bildschirm anzeigen lassen.

    Das Bitmap bekomme ich schon "fertig" von einer API-Kamera geliefert. In dem beiliegenden Beispiel Code wird einfach ein Form erzeugt. Von dem Form ein Graphics-Objekt abgefragt und dann das Bitmap in das Graphics-Objekt gezeichnent.
    Leider ist diese Lösung zu langsam, die Kamera liefert 50B/s.
    Das was wahrscheinlich längsten dauert ist, das ich das Bild um den Faktor 4 vergröße.

    Gruß Masterof



  • Hast du keine Möglichkeit die Bilder in einem anderen Format zu bekommen? z.B. einfach ne schöne DIB?

    Masterof schrieb:

    Das was wahrscheinlich längsten dauert ist, das ich das Bild um den Faktor 4 vergröße.

    Wo & wie skalierst du?



  • 50 Bilder pro Sekunde ist übel in Winforms.
    GDI+ ist auch einfach mal langsam. Wieviele FPS bringt dir die Picturebox?

    Wo Du vielleicht was rausholen kannst ist die Skalierung. Graphics.DrawImageUnscaled ist deutlich schneller als Graphics.DrawImage. Die Vergrößerung kannst Du "per Hand" berechnen und das Resultat an DrawImageUnscaled senden. Welche Art Vergrößerung willst Du? Das lässt sich übrigens sehr gut parallelisieren.



  • Hi,

    @hustbaer
    Die API bietet mir entweder ein Bitmap oder ein Byte-Array in dem auch das Bild enthalten ist. Die Skalierung erfolgt über die Funktion DrawImage.

    @space
    Ich habe es noch nicht genau nach gemessen es sind aber ca 15 bis 20 Bilder/s.
    Wen GDI+-Schnittstelle so langsam ist, wie kann ich statt dessen schneller Zeichen? Was meinst du mit welche Art der Vergrößerung ich benötige?

    Ich werd jetzt mal versuch ob ich mit der "Hand" schneller skaliere kann.



  • Dann nimm das Byte-Array und verwende DrawDibDraw.
    Das ist sauschnell.



  • Hi Hustbaer,

    Die Funktion DrawDibDraw ist eine Funktion in C++. Ich verwende aber C# mit dem .NET-Framework 4.0 oder habe ich gerade einen Weg übersehen wie ich die Funktion in C# erhalte und nutzen kann.

    Gruß Masterof



  • Du kannst die Funktion über PInvoke aufrufen.
    Wenn du mit PInvoke keine Erfahrung hast, ist DrawDibDraw aber sicher ein bisschen viel auf einmal.

    Ist die API public?
    Wenn ja, kannst du mal dein aktuelles Programm irgendwo hochladen (also die Solution, nicht die .exe).

    Dann könnte ich mir mal ansehen ob ich das mit DrawDibDraw hinbekomme.



  • Guten Morgen hustbaer,

    Die API ist Public und heißt vrmusbcam von Vrmagic.
    Ich werd es erst mal den Weg gehen, das ich selbst die Routine schreibe zum Zoom. Wenn das nicht klappt werd ich dein Angebot gerne annehmen.

    Gruß Masterof


Anmelden zum Antworten