PNG in Byte array convertieren



  • Hallo,
    kann mir villeicht jemand sagen wie man .png Bilder in Bytes umwandeln oder "encoden" kann?
    Habe nicht die leiseste ahnung, gibts davür vill so ein Converter Programm?

    Danke im Vorraus!
    Marc++Xxx



  • Die .png-Datei besteht doch aus einer Ansammlung von bytes, wo ist das Problem?



  • Die libpng kannst du in dein Programm einbinden.

    Wenn dir dies zu aufwändig erscheint (der Aufwand hält sich aber durchaus in Grenzen), gibt es mit Sicherheit Konsolenprogramme im Netz, die per Kommandozeile gesteuert das En- oder Decodieren übernehmen.

    In welcher Form sollen die Daten denn anschließend vorliegen? Als Bitmap?



  • Also,
    ich möchte das jetzt nicht selber Convertieren, sondern, ich habe ein Programm, indem ich ein Bild als Hintergrund nehmen möchte.
    Und das will ich halt mit Bytes machen, also: Header {0x2F, 0x54, ...};

    Ich habe schon das Bild ausgesucht, ich möchte dieses Bild in Bytes haben, weiß aber nicht wie ich dieses eine Bild in Bytes schreiben kann,
    steht da ja nicht drauf 😃



  • Du willst also die PNG als statische Ressource in deinem Programm haben, und willst den Inhalt der Datei einfach als Array-Definition haben?

    Edit: Über den Linker gings es vermutlich auch anders, aber vielleicht hilft dir das ja schon weiter:

    #include <fstream>
    int main( int argc, const char* argv[] )
    {
    	using namespace std;
    	if ( argc != 2 )
    		return 1;
    	string inFileName( argv[1] );
    	string outFileName( inFileName + "Array.txt" );
    	ifstream in( inFileName.c_str() );
    	if ( !in )
    		return 2;
    	ofstream out( outFileName.c_str() );
    	if ( !out )
    		return 3;
    	int c( in.get() );
    	while ( in )
    	{
    		out << hex << "0x" << c << ", ";
    		c = in.get();
    	}
    }
    

    Das schreibt dir dann ne Textdatei mit sowas drin:

    0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3e, 0xa, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x72, 0x67, 0x63, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x2a, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x5d, 0x20, 0x29, 0xa, 0x7b, 0xa, 0x9, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x73, 0x74, 0x64, 0x3b, 0xa, 0x9, 0x69, 0x66, 0x20, 0x28, 0x20, 0x61, 0x72, 0x67, 0x63, 0x20, 0x21, 0x3d, 0x20, 0x32, 0x20, 0x29, 0xa, 0x9, 0x9, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0xa, 0x9, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x20, 0x61, 0x72, 0x67, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x29, 0x3b, 0xa, 0x9, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x20, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x2b, 0x20, 0x22, 0x41, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x78, 0x74, 0x22, 0x20, 0x29, 0x3b, 0xa, 0x9, 0x69, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x69, 0x6e, 0x28, 0x20, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x28, 0x29, 0x20, 0x29, 0x3b, 0xa, 0x9, 0x69, 0x66, 0x20, 0x28, 0x20, 0x21, 0x69, 0x6e, 0x20, 0x29, 0xa, 0x9, 0x9, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x3b, 0xa, 0x9, 0x6f, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x28, 0x29, 0x20, 0x29, 0x3b, 0xa, 0x9, 0x69, 0x66, 0x20, 0x28, 0x20, 0x21, 0x6f, 0x75, 0x74, 0x20, 0x29, 0xa, 0x9, 0x9, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x3b, 0xa, 0x9, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x28, 0x20, 0x69, 0x6e, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x29, 0x20, 0x29, 0x3b, 0xa, 0x9, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x29, 0xa, 0x9, 0x7b, 0xa, 0x9, 0x9, 0x6f, 0x75, 0x74, 0x20, 0x3c, 0x3c, 0x20, 0x68, 0x65, 0x78, 0x20, 0x3c, 0x3c, 0x20, 0x22, 0x30, 0x78, 0x22, 0x20, 0x3c, 0x3c, 0x20, 0x63, 0x20, 0x3c, 0x3c, 0x20, 0x22, 0x2c, 0x20, 0x22, 0x3b, 0xa, 0x9, 0x9, 0x63, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x67, 0x65, 0x74, 0x28, 0x29, 0x3b, 0xa, 0x9, 0x7d, 0xa, 0x7d, 0xa,
    

    Geht natürlich nicht nur mit PNGs.



  • Danke, sowas habe ich gesucht!
    Aber wie füge ich da mein Bild ein?
    Oder muss man den Pfad eingeben, wenn das Programm läuft?



  • Du solltest dir wirklich erst mal die Grundlagen der Grundlagen angucken oO. Was hast du genau vor? Willst du ein Bild als Hintergrund haben? Das geht nicht mit Standard-C++, weil das keinen Hintergrund kennt. Arbeitest du unter Windows? Dann schau dir mal Ressourcen und die GDI Befehle an, gegebenenfalls frage im WinAPI Forum nach. Ein Fenster solltest du allerdings schon erstellt haben. Ein Bild als "HexText" abzuspeichern ist der denkbar schlechteste Weg.



  • Ich arbeite eigentlich an einem D3D9 Projekt, ist kein Fenster, D3D9 eben, da
    ist das schon der beste weg, und eigentlich, hätte ich so einen fertigen converter, den ich nicht selber schreiben, bzw kopieren muss. Denn ich weiß nicht mal was ich für ein Projekt erstellen muss um das zum laufen zu bringen...



  • Marc++Xxx schrieb:

    Ich arbeite eigentlich an einem D3D9 Projekt,

    Aber weißt nicht mal wie man eine Datei läd?

    Marc++Xxx schrieb:

    ist kein Fenster, D3D9 eben,

    hä?

    Marc++Xxx schrieb:

    da ist das schon der beste weg,

    😮

    Marc++Xxx schrieb:

    und eigentlich, hätte ich so einen fertigen converter, den ich nicht selber schreiben, bzw kopieren muss.

    Äh.. was?

    Marc++Xxx schrieb:

    Denn ich weiß nicht mal was ich für ein Projekt erstellen muss um das zum laufen zu bringen...

    Jetzt hast du mich vollständig verwirrt. In Klartext: Du hast keine Ahnung von C++ und/oder der WinAPI und/oder Direct3D aber du möchtest gerne eine Anwendung damit schreiben? Da kann ich mich nur wiederholen: Erstmal die Grundlagen lernen!

    Ansonsten:
    http://www.toymaker.info/Games/html/2d_elements.html



  • Ich brauche ein Programm, nicht den Code, egal womit geschrieben, also so etwas wie ein Youtube to mp3 converter, nur eben ein png to byte array converter -.-



  • Marc++Xxx schrieb:

    Ich brauche ein Programm, nicht den Code, egal womit geschrieben, also so etwas wie ein Youtube to mp3 converter, nur eben ein png to byte array converter -.-

    XBeliebigenHexEditor öffnen. Ctrl+a, Ctrl+c, Notepad öffnen, Ctrl+v, Ctrl+s. Fertig, wozu auch immer das dann gut sein soll. 🙄


Log in to reply