Problem bei Konvertierung.



  • Ich hab bereits schonmal eine ähnliche Frage gestellt, diese aber unklar beschrieben und jetzt versuch ich es nochmal ordentlich:

    Ausgangssituation:

    Ich nehme mit einer Kamera Bilder (Graustufen) auf diese werden in meinem Framegrabber in einem Buffer geschrieben.

    Mit Hilfe der Funktion Fg_getImagePtrEx(fg,lastPicNr,0,pMem0) bekomme ich den pointer auf mein Bild

    Fg_getImagePtrEX(Fg,x,Port_A) gibt einen Zeiger auf den x-ten Bildpuffer zurück...

    Ich kann zum Beispiel mit einer anderen Funktion

    ::DrawBuffer(nId,Fg_getImagePtrEx(fg,lastPicNr,0,pMem0),lastPicNr,"");
    

    dieses Bild anzeigen lassen. Soweit funktioniert die Sache....
    (diese Methoden stammen aus dem SDK von Silicon Software, was aber eigentlich "Wurst ist")

    NUN ZUM EIGENTLICHEN PROBLEM:
    Was ich nun machen will, ist, anstatt das Bild anzuzeigen, dieses Bild weiter zu verarbeiten. Hierfür würde ich dieses Bild gern abspeichern. Zum Beispiel als BMP oder JPEG (was genau spielt keine Rolle, da bin ich relativ flexibel, hauptsache ich hab es irgendwo ausserhalb des Buffers gespeichert)

    Vielleicht kann mir dabei jemand helfen. 🙂

    PS: Resourcenschonung und "Schönheit" sind zweitrangig, also kein Problem mit Totschlägerlösungen 😛



  • Lepetitmort schrieb:

    (diese Methoden stammen aus dem SDK von Silicon Software, was aber eigentlich "Wurst ist")

    nenene, das ist das einzige was an diesem Beitrag wirklich relevant ist. DAs hat nämlich nichts mit C++ zu tun sondern mit diesem SDK. Darum würde ich auch mal dort nach Hilfe suchen.


  • Mod

    Dazu ist es nicht Wurst, woher diese Methoden kommen. Um die Daten in ein bekanntes Format zu konvertieren musst du nämlich erst einmal wissen, in welchem Format die Daten überhaupt vorliegen. Das sollte sich irgendwo in der Dokumentation der Methoden finden lassen. Wer weiß, vielleicht liegen die Daten ja schon in einem bekannten Format vor oder es gibt in der Bibliothek schon eine fertige Konvertierungsmethode.

    Du musst jedenfalls erstmal Informationen über diese Bilddaten bekommen, bevor du weitermachen kannst. Falls du tatsächlich keine Informationen finden kannst, könntest du zur Not auch versuchen, das Bildformat durch Reverse-Engineering zu bestimmen, aber es wäre vermutlich einfacher in diesem Fall zu einer besser dokumentierten Bibliothek zu wechseln.



  • Informationen dazu hatte ich hier schon gepostet
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1892278.html#1892278



  • -doppelpost-



  • Danke für die ersten Tipps!

    Braunstein schrieb:

    Informationen dazu hatte ich hier schon gepostet
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1892278.html#1892278

    Das stimmt. 😃 Glaube mir ich hab die Doku von vorne bis hinten durch.
    Es steht nur leider keine einzige Zeile darüber drin wie ich das Bild speicher.

    Wie würde ich es machen wenn ich wüsste, es wäre ein Bitmap?
    EDIT: ok dumme Frage!


  • Administrator

    Lepetitmort schrieb:

    Das stimmt. 😃 Glaube mir ich hab die Doku von vorne bis hinten durch.
    Es steht nur leider keine einzige Zeile darüber drin wie ich das Bild speicher.

    Und woher sollen wir das nun wissen? Unsere Glaskugeln wurden leider alle beschlagnahmt vom Moderatoren Regime, welches die absolute Kontrolle über das Forum haben will. Sie nutzen nun die Glaskugeln zu unserem "eigenem Schutz".

    ...

    🤡

    Grüssli


  • Administrator

    Lepetitmort schrieb:

    Wie würde ich es machen wenn ich wüsste, es wäre ein Bitmap?

    Jede Rastergraphik ist ein Bitmap. Kannst du vielleicht noch ein wenig allgemeiner bleiben? :p

    Grüssli



  • -doppelpost-


  • Mod

    Lepetitmort schrieb:

    Das stimmt. 😃 Glaube mir ich hab die Doku von vorne bis hinten durch.
    Es steht nur leider keine einzige Zeile darüber drin wie ich das Bild speicher.

    Tja.

    Das kann ich zwar nur schwer glauben, dass die das Speicherformat nicht dokumentieren, aber dann würde ich dir zum Wechsel der Bibliothek raten. Du könntest zwar durch die Analyse des Quellcodes (falls dieser vorliegt) oder durch Analyse der Daten im Speicher (falls du Masochist bist) versuchen, dir das Format selbstständig zu erschließen, aber der Wechsel der Bibliothek dürfte mit Abstand der Weg des geringsten Widerstandes sein.

    Such dir am besten etwas gut dokumentiertes 😉 .

    Angenommen du wüsstest, dass es sich um eine Bitmap handelt:
    Einfach die Daten an der gezeigten Speicherstelle auf die Platte schreiben. Gegebenenfalls den Header anpassen, falls dieser nicht an der gezeigten Stelle steht, sondern die Headerdaten anderweitig gespeichert sind (was anzunehmen ist).



  • SeppJ schrieb:

    Such dir am besten etwas gut dokumentiertes 😉

    Leider nicht möglich für genau diesen Framegrabber werd ich keine andere passende Bibliothek finden.



  • Ok ich habe mit den lieben Supportmitarbeiter von Silikon Software gesprochen und der meinte folgendes:

    der Pointer zeigt auf das Bild, das heisst das erste Byte (des Ziels) entspricht dem ersten Pixel und dementsprechend das letzte Pixel dem letzten Byte

    Jemand ne Idee was ich nun zutun habe damit ich beispielsweise das ganze speichern kann als Bitmap/GIF (oder was auch immer)



  • Lepetitmort schrieb:

    Jemand ne Idee was ich nun zutun habe damit ich beispielsweise das ganze speichern kann als Bitmap/GIF (oder was auch immer)

    Als Bitmap:
    a) rausfinden wo die headerdaten für das Bitmap stehen.
    b) Datei öffnen
    c) zuerst dei Headerdaten reinschreiben
    d) die Bitmapdaten (die, wie du ja jetzt weißt vom ersten zum letzten Byte gehen) dahinterschreiben
    e) datei zu.


  • Administrator

    Ich habe mich gerade mal ein wenig ins Manual eingelesen. Wenn ich das richtig verstanden habe, dann legst du eine Konfiguration am Anfang fest. In dieser Konfiguration speicherst du, in welchem Format die zurückgegebenen Bilder sind. Über Fg_getParameter kann man jedenfalls solche Dinge abfragen. Wie hast du also die Einstellungen gesetzt? Welches Format hast du ausgewählt?

    Und wieso hast du den Support Mitarbeiter nicht gleich gefragt, wie du es machen kannst? 😕

    Grüssli



  • @Lepetitmort

    Es stimmt, die Doku der SiSo SDK ist da mehr als dürftig.
    Programmier auch gerade damit rum wenn Du herausgefunden hast,
    wie man ein aufgenommenes Bild abspeichert, wäre es spitze von Dir, das zu posten!



  • Wenn Holzhammer Methoden für dich OK sind könntest du mit der Win32 API eine Kopie des Fenster DC erzeugen, in dem das Bild angezeigt wird und anschließend als Bitmap speichern. Was sind denn die Argumente für die DrawBuffer Funktion, da muss ja irgendwo ein Fensterhandle oder Device Context im Spiel sein.


Log in to reply