metapixel anpassen



  • Hallo,

    folgendes Problem:
    Bekannter moechte Mosaiks erstellen, allerdings mit Webzeugs (html Dateien die auf die einzelnen Bilder zeigen damit diese dann mit js groesser werden etc.).
    Metapixel ist ideal dafuer, man muesste es nur ein wenig anpassen und da bin ich gerade dran. Hab leider schon lange lange nichts mehr mit c gemacht und bin gerade heftig am verzweifeln. Es gibt nicht eine Zeile Kommentar im Source von Metapixel und die Dokumentation von libpng ist - schoengesprochen - unter aller Sau.

    In Zeile 891 von metapixel.c (was uebrigens hier zu finden ist http://www.complang.tuwien.ac.at/schani/metapixel/) ist der Code der zeilenweise die ganzen kleinen Bilder in das große Endbild kopiert. Also dachte ich mir pack ich mir einfach das memcpy und schreib je Aufruf ein png.

    Dazu gibt es auch tolle Funktionen in der rwpng.h

    void* open_png_file_writing (const char *filename, int width, int height, int pixel_stride, int row_stride);
    void png_write_lines (void *data, unsigned char *lines, int num_lines);
    void png_free_writer_data (void *data);
    

    Wie bereits erwaehnt, nicht eine Zeile Kommentar 😋
    Ich verwende die Funktionen nun wie folgt:

    char *filename = "test.png";
    void *wdata = open_png_file_writing(filename, 500, 500, 3, 3);         
    png_write_lines(wdata, data, 1);
    png_free_writer_data( wdata);
    

    Allerdings bekomme ich ein SIGABRT in png_free_writer_data(), und zwar in dem Funktionsaufruf

    png_write_end(data->png_ptr, data->info_ptr);
    

    Falls zufaelligerweise jemand schonmal damit arbeiten musste, ich bin fuer jede Hilfe dankbar!

    Die Ausgabe in der Konsole:

    ........................
    libpng error: No IDATs written into file
    metapixel: rwpng.c:198: png_free_writer_data: Assertion `0' failed.

    hab es jetzt mit den normalen libpng aufrufen probiert, die in den 3 o.g. Funktionen ebenfalls verwendet werden, genau das gleiche Problem. Immer beim Abschluss des Bildes.



  • Nach kurzem Blick in den Quellcode scheint mir dieser durchaus nicht sooo schlecht zu sein, sieht nach einem C89 + Unix-Erweiterungen aus, als Kommandozeilentool. Schlecht auch deswegen nicht, da sogar assert benutzt wird. Außerdem ist die ganze Sache GPL, das solltest du ebenfalls berücksichtigen!
    Schau dir die Assertion doch mal an (sei froh, dass der Autor die eingebaut hat), debugge evtl. bis dort, vielleicht liegt es ja auch an deinen übergebenen Daten "data".



  • Ich glaube du hast mich falsch verstanden.
    Der Code ist natuerlich gut geschrieben.
    Die asserts sind nett, bringen mir aber nichts.

    Was aber unter aller Sau ist, dass nicht eine einzige Zeile Kommentar gegeben wurde. Im Studium waere das eine 5.0. Und was hat jetzt die Lizenz mit dem Code und meinem Problem zu tun?? Klar bin ich dankbar dass jemand seine Arbeit online stellt, ich finds trotzdem eine katastrophale Arbeit wenn man nicht kommentiert.

    Aber ok... hat ja nichts mit dem Problem an sich zu tun.

    Natuerlich liegt es an den Daten in "data", aber ich weis nicht wieso. Ich hatte eigentlich nicht vor libpng zu studieren um ein paar png image Daten schreiben zu koennen. Deswegen die Frage ob jemand hier damit schon Erfahrung sammeln durfte und vll auf das gleiche Problem gestossen ist.


Anmelden zum Antworten