[gelöst] Laden von TGA Dateien

Alles rund um die Programmierung mit Qt
Antworten
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

[gelöst] Laden von TGA Dateien

Beitrag von ChMaster »

Servus zusammen,

ich habe im Internet schon geschaut und eine spährliche Ausgabe
bekommen. Gefunden habe ich unter SourceForge.net libtga, entweder
stellt mir diese Bibliothek kein RawData zu Verfügung oder ich habe
diese Funktion übersehen. Darum habe ich mal eine bescheidene Frage.

Gibt es die Möglichkeit mit Qt 4.3.x TGA Dateien zu lesen?
Wenn nicht, welche Möglichkeiten habe ich dann?
Zuletzt geändert von ChMaster am 6. Juli 2007 16:29, insgesamt 1-mal geändert.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

Servus Zusammen,

hat keiner von Euch Erfahrung im Umgang mit TGA Dateien?
Ich breuchte da wirklich hilfe, da ich durch weiteres suchen
nichts gefunden habe.

Ps.: Anscheinend ist das entwickeln mit TGA Dateien unter Qt4
nicht so weit verbreitet. :)
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich finde den Wikipedia-Artikel über dieses Dateiformat recht interessant (Vor allem den letzten Absatz...) Ansonsten gibt es eine C++-Library (paintlib) die unter anderem TGA-Datei handhaben können soll. Vielleicht kannst du diese miteinbinden...
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

Hallo upsala,

danke für deine Antwort. Den Wikipedia-Artikel habe ich schon gelesen und er ist wirklich interessant.
Nur das ich dort Paint.Net sehe was in C# geschrieben wurde. Dieses kann ich zwar mit Qt43 nutzen,
aber das kommt für mich nicht in Frage, da ich Plattformunabhängig programmieren will.

Die Bibliothek paintlib werde ich mir mal genauer anschauen. Danke für deinen Tipp.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

Danke, anscheinend ist es das was ich suchte.
Werde mir diese Bibliothek mal etwas genauer
anschauen.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

servus,

paintlib war nicht das richtige. Habe mal etwas genauer im Internet geschaut und etwas
ordentliches gefunden. Die Bibliothek nennt sich FreeImage, diese Bibliothek ist auch
unter Windows verfügbar.

Bin gerade dabei diese Bibliothek einzubinden, wenn ich es geschaft habe werde ich evtl.
ein kleines Tutorial erstellen wie man TGA Dateien läd und darstellt. (Mal schauen) ;)
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

servus,

so habe es geschaft mit FreeImage3 TGA Dateien zu laden.

Hier mal der CodeSnippe: Originalsource FreeImageQt, leider in Qt3 gehalten.
Der hier aufgeführte CodeSnippe ist für Qt4.

Code: Alles auswählen

#include <FreeImage.h>

.......

QImage MyClass::LoadTgaFile( const QString &name ) {
	
	if( name.isEmpty() || name.isNull() )
		return QImage();

	FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename( QString( name ).toAscii().data() );
	FIBITMAP *bitmap;

	if( fif == FIF_TARGA )
		bitmap = FreeImage_Load( fif, QString( name ).toAscii().data(), 0 );
	else
		return QImage();
		
	QImage img;

	if( bitmap ) {
		if( FreeImage_GetBPP( bitmap ) == 32 )
			bitmap = FreeImage_ConvertTo24Bits( bitmap );

		int _width = FreeImage_GetWidth( bitmap );
		int _height = FreeImage_GetHeight( bitmap );

		if( FreeImage_IsTransparent( bitmap ) ) {
			QImage image( _width, _height, QImage::Format_ARGB32 );
			img = image;
		} else {
			QImage image( _width, _height, QImage::Format_RGB32 );
			img = image;
		}

		img.setDotsPerMeterX( (FreeImage_GetDotsPerMeterX != NULL) ? FreeImage_GetDotsPerMeterX( bitmap ) : 0 );
		img.setDotsPerMeterY( (FreeImage_GetDotsPerMeterY != NULL) ? FreeImage_GetDotsPerMeterY( bitmap ) : 0 );

		for( unsigned a = 0; a < FreeImage_GetHeight( bitmap ); a++ ) {
									
			if( FreeImage_GetBPP( bitmap ) == 24 ) {
				FreeImage_ConvertLine24To32( img.scanLine( FreeImage_GetHeight( bitmap ) - 1 - a ), FreeImage_GetScanLine( bitmap, a ), FreeImage_GetWidth( bitmap ) );

			} else {
				memcpy( img.scanLine( FreeImage_GetHeight( bitmap ) - 1 - a ), FreeImage_GetScanLine( bitmap, a ), FreeImage_GetWidth( bitmap ) );
			}
		}
	}
	
	FreeImage_Unload( bitmap );
	return img;
}
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
Antworten