Ein Bild in ausführbare Datei einbinden

Alles rund um die Programmierung mit Qt
Antworten
martin
Beiträge: 10
Registriert: 25. August 2004 18:03

Ein Bild in ausführbare Datei einbinden

Beitrag von martin »

Hallo.
Wie kann ich ein Bild in ausführbare Datei einbinden so das sie nicht mehr als separate Datei vorliegen muss.
Es scheint das es am leichtesten über diesen Konstruktor in QPixmap Klasse gehen würde:

Code: Alles auswählen

QPixmap::QPixmap ( const char * xpm[] )
Woher soll ich aber die Daten für diesen Array nehmen.
GLMP kann zwar Bilder als C-Header Datei exportiren, die sind aber nicht im xpm Format.
Weiss also jemand wie Bilder in die ausführbare Datei einbindet??

Vielen Dank im Vor-aus.
Intel Pentium 3.2GHz |RAM-512MB|DSL|OS - Suse Linux Professional 9.1/Windows XP home |
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Re: Ein Bild in ausführbare Datei einbinden

Beitrag von Goos »

martin hat geschrieben: Woher soll ich aber die Daten für diesen Array nehmen.
GLMP kann zwar Bilder als C-Header Datei exportiren, die sind aber nicht im xpm Format.
Weiss also jemand wie Bilder in die ausführbare Datei einbindet??

Vielen Dank im Vor-aus.
Also ich als Windows Nutzer nehm dafuer immer den GIMP 2 und exportiere nach Pixmap. Ich muss da dann allerdings nochmal mit dem Editor ins xpm rein und das Array auf const aendern.

Goos
martin
Beiträge: 10
Registriert: 25. August 2004 18:03

Beitrag von martin »

@Goos
Danke für die Antwort.
QT benutze ich nur unter Linux, dennnoch funktioniert deine Lösung einwandfrei.

Schade nur dass xpm unkomprimiert ist, bei grösseren Bildern wechst die Größe der ausfürbaren Datei ganz schnell.
Aber für Icons und kleine Bilder ist das wohl die sauberste Lösung.
Intel Pentium 3.2GHz |RAM-512MB|DSL|OS - Suse Linux Professional 9.1/Windows XP home |
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

noch einfacher ist es QImageIO-funktionen zu benutzen, da Qt ja das XPM-format direkt unterstüzt

QImageIO io;
io.load("bild.bmp");
io.save("bild.xpm");
Amadeus
Beiträge: 3
Registriert: 4. November 2004 04:38
Kontaktdaten:

Beitrag von Amadeus »

Hi,
bischen späte Antwort, aber vielleicht hilfts dir:

1. schreib Dir ein Bin2Asc Programm (vielleicht gibts das auch im Netz, aber mit Qt ist das so schön einfach):

Code: Alles auswählen

	QString fileName = QFileDialog::getOpenFileName();
	if ( fileName.isEmpty() ) return 0;

	QFile f_in( fileName );
	f_in.open( IO_ReadOnly );
	QByteArray ba = f_in.readAll();
	f_in.close();

	QFile f_out( fileName + ".h" );
	f_out.open( IO_WriteOnly );
	QTextStream ts( &f_out );

	ts << "// File: " << fileName << "\n";
	ts << "// Size: " << ba.size() << "\n";
	ts << "static const unsigned char " << QFileInfo(fileName).baseName() << "[] = {\n";

	for (unsigned i=0; i<ba.size(); i++)
	{
		uchar c = ba.at(i);
		QString s = QString::number( c, 16 );
		s = s.rightJustify( 2, '0' );
		
		ts << "0x" << s << ",";
		if ((i+1)%16 == 0) ts << "\n";
	}

	ts << "\n};";
	f_out.close();

2. Damit konvertierst Du dann die Datei, die Du mit in deiner ausführbaren Datei drin haben willst. Da kommt dann eine hübsche Header Datei raus, die Du einfach in Dein Projekt mit einbindest. Die sieht ungefähr so aus:

Code: Alles auswählen

	// File: D:/Workout/Icons.png
	// Size: 36999
	static const unsigned char Icons[] = {
	0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
	0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xf0,0x08,0x06,0x00,0x00,0x00,0x3e,0x55,0xe9,
	.
	.
	0x73,0xc7,0x19,0x00,0xa8,0x56,0xab,0x9e,0x53,0xfe,0xd5,0x33,0x47,0xcb,0x94,0xff,
	0xff,0x01,0x00,0xa9,0x0e,0x16,0x86,0x28,0x4d,0x2c,0x8b,0x00,0x00,0x00,0x00,0x49,
	0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
	}; 

3. Jetzt musst Du nichts weiter tun, als die Bilddaten zu laden, mit:

Code: Alles auswählen

	QPixmap pm;
	pm.loadFromData( (const unsigned char*) &Icons, 36999 );

Viel Vergnügen...

PS: in der ausführbaren sind das dann natürlich Binärdaten, so das dein Bild nicht wie bei XPM als Text vorliegt!
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

schon mal das tool qtemded benutz? damit soll man bilder in eine .h datei konvertieren können. geht ganz gut. näheres erfährst du aus der qt doku.
Antworten