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

  • [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
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik


  • #2
    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.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      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..
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

      Kommentar


      • #4
        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.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          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.
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

          Kommentar


          • #6
            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?
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              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.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                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
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                Kommentar


                • #9
                  So einfach kanns sein
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    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.

                    Kommentar

                    Lädt...
                    X