Sauvegarde image depuis un buffer c++ Libtiff

Messages postés
1
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
15 février 2016
-
Bonjour,

J'utilise visual c++ pour développer une application pour un scanner. Je récupère l'image scannée dans un buffer char* (sous format tif) et je veux l'enregistrer dans un fichier tif. J'utilise pour cela "Libtiff" mais ca n'a pas l'air de bien marcher.
J'ai trouvé ce code dans la documentation :


TIFF *out= TIFFOpen("new.tif", "w");
int sampleperpixel = 4; // or 3 if there is no alpha channel, you should get a understanding of alpha in class soon.
char *image=new char [width*height*sampleperpixel];

TIFFSetField (out, TIFFTAG_IMAGEWIDTH, width); // set the width of the image
TIFFSetField(out, TIFFTAG_IMAGELENGTH, height); // set the height of the image
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, sampleperpixel); // set number of channels per pixel
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8); // set the size of the channels
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); // set the origin of the image.

tsize_t linebytes = sampleperpixel * width; // length in memory of one row of pixel in the image.
unsigned char *buf = NULL; // buffer used to store the row of pixel information for writing to file
// Allocating memory to store the pixels of current row
if (TIFFScanlineSize(out)linebytes)
buf =(unsigned char *)_TIFFmalloc(linebytes);
else
buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out));

// We set the strip size of the file to be size of one row of pixels
TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(out, width*sampleperpixel));

//Now writing image to the file one strip at a time
for (uint32 row = 0; row < h; row++)
{
memcpy(buf, &image[(h-row-1)*linebytes], linebytes); // check the index here, and figure out why not using h*linebytes
if (TIFFWriteScanline(out, buf, row, 0) < 0)
break;
}
(void) TIFFClose(out);
if (buf)
_TIFFfree(buf);


On me dit qu'il y a un problème au niveau de l'allocation. Ca ne m'a pas étonné parce que j'ai eu du mal à récupérer le width et height de mon image et donc j'ai donné 200px pour chacun et donc je crois que c'est à cause de ca. En plus, la variable "h" je ne sais pas d'où je pourrais l'avoir.

Pourrais je avoir un code qui marche et qui px répondre à mes besoins. Merci d'avance.
Afficher la suite