[gelöst] TiffIO Plugin vs libqtiff.so - libtiff

Alles rund um die Programmierung mit Qt
Antworten
Perry3D
Beiträge: 3
Registriert: 1. September 2008 13:41

[gelöst] TiffIO Plugin vs libqtiff.so - libtiff

Beitrag von Perry3D »

Guten Tag.

Ich versuche nun schon ein Weile ein 8 Bit per Pixel Tiff aus einem QImage zu schreiben.
Dazu habe ich folgendermaßen ein QImage angelegt.

Code: Alles auswählen

image=new QImage( *(new QSize(width,height)), QImage::Format_Indexed8);
for(int i=0;i<256;i++)
	colorTable[i] = qRgb(i,i,i);
image->setColorTable(colorTable);
Da das Standard Plugin von QT (libqtiff.so) meines Wissens nur 32-Bit Bilder schreibt (oder?), habe ich es mit TiffIO probiert.

Code: Alles auswählen

QImageWriter writer;
writer.setFormat("TIFF");
writer.setFileName(newSaveAs.absoluteFilePath());
writer.setText("parameters", "lzw bps=8");
if (writer.write(image)) cout << "TIFF File written" << endl;
Nur wie mache ich der Applikation nun bekannt, TiffIO und nicht libqtiff.so zu benutzen? Ich habe das Plugin auch schon anhand einer Instanz von QPluginLoader manuell geladen. Hat aber auch nichts gebracht.

Oder noch besser: Wie kann libqtiff.so 8 Bit Bilder schreiben.



Gruß Perry
Zuletzt geändert von Perry3D am 19. November 2008 00:34, insgesamt 2-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Qt ohne tiff-support kompilieren bzw. das Qt-tiff Plugin löschen.

/edit:

Code: Alles auswählen

image=new QImage( *(new QSize(width,height)), QImage::Format_Indexed8); 
[/new]
Warum erzeugst Du hier ohne Not ein memleak mit new QSize() ?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Perry3D
Beiträge: 3
Registriert: 1. September 2008 13:41

Beitrag von Perry3D »

Vielen Dank für die Antwort.

Auf die Idee bin ich auch schon gekommen. Aber ich habe auf eine elegantere Lösung gehofft.

Zu dem Memleak: Ist wohl beim Rumprobieren entstanden. Das war keine Absicht.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was anderes fällt mir leider nicht ein - ich weiss nicht wer gewinnt wenn zwei Plugins das Gleiche bereitstellen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Perry3D
Beiträge: 3
Registriert: 1. September 2008 13:41

Beitrag von Perry3D »

Ok, ich hab es jetzt ganz anders gemacht. Vielleicht interessiert sich jemand für die Lösung.
Ich habe einfach die libtiff benutzt. Hat auch hervoragend mit dem QImage zusammengearbeitet.

Code: Alles auswählen

#include <tiffio.h>
...
void writeTIFF(const QString& filename,QImage* image)
{
	TIFF* tif = TIFFOpen(filename.toAscii().data(), "w");
	TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW)
	TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, image->width());
	TIFFSetField(tif, TIFFTAG_IMAGELENGTH, image->height());
	TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
	TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
	TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, 3);
	TIFFSetField(tif, TIFFTAG_XRESOLUTION, 10000/DataHandler::micronWidth);
	TIFFSetField(tif, TIFFTAG_YRESOLUTION, 10000/DataHandler::micronHeight);

	TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, 1); // für 1: weiss = kleinster Wert(0)
	for (int row = 0; row < image->height(); ++row)
	{
		TIFFWriteScanline(tif, image->scanLine(row), row, 0);
	}
	TIFFClose(tif);

}
Noch ein "LIBS += -ltiff" in der .pro Datei und fertig.
Manche Tags sind wahrscheinlich optional.

Gruß Perry
Antworten