Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bild aus einem C++ Buffer erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • BlackScorp
    hat ein Thema erstellt [Erledigt] Bild aus einem C++ Buffer erstellen.

    [Erledigt] Bild aus einem C++ Buffer erstellen

    Hallo leute,

    ich habe eine kleine frage. Es geht um folgendes. Ich habe in C++ eine Kamera angesteuert. Diese Kamera liefert mir ein Buffer mit Graustufen . diesen Buffer lade ich auf mein Server über FTP hoch als txt datei. Der buffer sieht in der TXT Datei so aus:

    Code:
    hlmnnnnpmnolnoonpqppqrrsqsrprrrorsrpqoqpqpqqqttstuvvutwuvwxvwxyxxvxv{wyxyyxyz{z{|}~}€€‚‚‚‚„…
    habe es so versucht umzusetzen

    PHP-Code:
    <?php
    header
    ('Content-Type: image/bmp');
    $data file_get_contents  ('test2.txt');

    echo 
    $data;
    als meldung kam dann folgendes:

    Die Grafik "test.php" kann nicht angezeigt werden, weil sie Fehler enthält.

    wenn ich den header im php bestimmen kann, wie kann ich dann den inhalt , der zu dem header passt einstellen? file_get_contents hat ja nicht funktioniert

  • ChrisB
    antwortet
    Zitat von BlackScorp Beitrag anzeigen
    naja das einzige was ja zu diesem Bild fehlt ist der BMP header. man könnte sich den buffer so vorstellen als ob das ein bild ohne header wäre. und ich dachte mir ich könnte über
    header('Content-Type: image/bmp');
    header informationen setzen
    Hier wirfst du zwei vollkommen unterschiedliche Dinge in einen Topf.

    Einmal hat das Bild selber einen "Header" - der enthält Daten über die Eigenschaften des Bildes.
    Das andere ist ein HTTP-Header, der bei der Auslieferung einer Ressource über HTTP eine Rolle spielt - der ist ausschliesslich dazu da, dem Client mitzuteilen, als was er die nachfolgenden (Binär-)Daten interpretieren soll.

    Dass das beides zwei grundverschiedene Dinge sind, sollte absolut logisch sein.

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    So einfach kanns sein

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    ah mein fehler ich habe in C++ vergessen vorher eine Init funktion aus der DLL aufzurufen dadurch wurde ein header generiert und das bild auch als datei format gespeichert.. oh man.. thema is erledigt

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Am Header führt aber kein Weg vorbei! Ohne den werden die "Nutzdaten" nutzlos - woher soll eine Anwendung z.B. auch entscheiden, ob nun ein Pixel durch einen, zwei oder vier Byte dargestellt wird?

    In der Theorie sähe das in etwa so aus:
    Mit imagecreatetruecolor eine Bildresource erzeugen. Da mit Graustufen gearbeitet wird, nehme ich eine Palette mit 256 Einträgen an (8 bit Farbtiefe), diese muss ebenfalls erzeugt (imagecolorallocate). Zu guter Letzt muss man noch die Informationen "umlegen" - direkte Bilddaten aus dem String (dort dürfte jedes Byte für eine konkrete Graustufe stehen) müssen in einen Palettenindex umgerechnet werden.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Kannst Du denn über Deine C++ Routine nicht die Bilddaten komplett in einen Stream laden und diesen speichern.
    Dann müßten doch auch die Bildinformationen vorhanden sein?

    Soweit ich das verstanden habe, liest DU doch die Bilddaten selbst aus der Kamera aus, oder?

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    ne leider hats nicht funktioniert
    PHP-Code:
    $data file_get_contents('test2.seq');
    $data base64_encode($data);

    $im imagecreatefromstring($data);
    if (
    $im !== false) {
        
    header('Content-Type: image/bmp');
        
    imagepng($im);
        
    imagedestroy($im);
    }
    else {
        echo 
    'An error occurred.';

    als meldung kommt:

    Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in test.php on line 5
    An error occurred.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Habs ehrlich gesagt auch noch nicht probiert, aber vielleicht hilft ja imagecreatefromstring() weiter?
    Einfach damit ein Bild erstellen und das an den Browser senden?

    Wenn ich jetzt mal davon ausgehe, daß der Buffer durch auslesen der Bildinformationen in C++ entstanden ist?!

    EDIT
    Ne, weitere Attribute kannst Du so nicht setzen.
    Die versucht der Browser sich ja anhand des Content-Types aus der Datei zu holen.

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    naja das einzige was ja zu diesem Bild fehlt ist der BMP header. man könnte sich den buffer so vorstellen als ob das ein bild ohne header wäre. und ich dachte mir ich könnte über
    header('Content-Type: image/bmp');
    header informationen setzen, wie zb Schwarzweis bild, breite/höhe usw..

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Du musst schon ein "echtes" Grafikformat benutzen - einfach nur den Textstring als Bild interpretieren zu lassen funktioniert nicht. Alle Bildformate (eigentlich alle strukturiert abgelegten Daten) führen Verwaltungsinformationen mit, so auch Bilder: Breite und Höhe, Anzahl der Bits pro Pixel oder auch eine Palette.

    Einen Kommentar schreiben:

Lädt...
X