Hi,
das ist hoffentlich meine letzte Frage zu dem Thema :).
Ich habe ein Array mit allen RGBA-Werten für ein Bild im Byte Format (z.B.: 4282989356).
Nun möchte mit diesem Array eine neue Bilddatei vom Format .tiff schreiben und verwende dafür die Bibliothek libtiff.
Ich verwende folgenden Code:
auto image = new uint32[20976 * 20976];
for (uint32 row = 0; row < height; row++)
{
TIFFWriteScanline(tif, image, row, 0);
}
Ich habe hier noch die Dokumentation für TIFFWriteScanline().
Das Programm schreibt eine neue .tif Datei, die sogar eine Dateigröße hat die ich erwarte. Allerdings sieht die Datei geöffnet leider so aus.
Ich bin mir nicht sicher ob ich mein Array einfach so übergeben kann. TIFFWriteScanline() erwartet eine Variable vom Datentyp tdata_t, was auch immer das sein soll.
Es gibt ein Tutorial, welches den Vorgang etwas anders implementiert. Im Tutorial werden ein image und buf Array deklariert, beide vom Typ char.
char *image=new char [width*height*sampleperpixel];
unsigned char *buf = NULL;
Es wird die benötigte Speicher für eine Zeile festgelegt und für buf initialisiert.
tsize_t linebytes = sampleperpixel * width;
buf =(unsigned char *)_TIFFmalloc(linebytes);
Schließlich wird wie bei mir über jede Zeile iteriert und dabei zunächst die Bilddaten in buf geschrieben und von buf in die .tif Datei.
for (uint32 row = 0; row < h; row++)
{
memcpy(buf, &image[(h-row-1)*linebytes], linebytes);
TIFFWriteScanline(out, buf, row, 0)
}
Wobei ehrlich gesagt im Tutorial image nur deklariert aber nicht initialisiert wird. Wahrscheinlich muss es noch initialisiert werden. Aber kann ich meine RGBA Daten in Byte codes in ein Char array schreiben? Und wieso werden die Daten überhaupt zuerst in den buf geschrieben? Ist das wichtig und ggf. die Erklärung wieso mein Bild so bescheiden aussieht?
Ich bin gefühlt so kurz vorm Ziel was dieses kleine Projekt angeht und würde mich über Hilfen und Tipps sehr freuen :)