m0rbac | Pour le TIF, j'utilise la libTIFF (http://libtiff.maptools.org) qui est relativement simple à utiliser. Voici en gros comment faire pour créer une image à 256 niveaux de gris et une image bitmap 2 couleurs [désolé, c'est tout ce que j'ai sous la main, mais pour une image couleur, ça ne doit pas être bien différent ]
Ecriture du TIF 256 couleurs:
Code :
- // rem: l'image en mémoire est stockée dans la variable "data"
- TIFF *img = TIFFOpen(fname, "w" );
- TIFFSetField(img, TIFFTAG_IMAGEWIDTH, img_width);
- TIFFSetField(img, TIFFTAG_IMAGELENGTH, img_height);
- TIFFSetField(img, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
- TIFFSetField(img, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
- TIFFSetField(img, TIFFTAG_IMAGEDESCRIPTION, "ici une petite description" );
- TIFFSetField(img, TIFFTAG_ROWSPERSTRIP, 1);
- TIFFSetField(img, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
- TIFFSetField(img, TIFFTAG_BITSPERSAMPLE, 8);
- TIFFSetField(img, TIFFTAG_SAMPLESPERPIXEL, 1);
- TIFFSetField(img, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
- TIFFSetField(img, TIFFTAG_XRESOLUTION, x_resolution);
- TIFFSetField(img, TIFFTAG_YRESOLUTION, y_resolution);
- TIFFSetField(img, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
- // Ecriture à proporement parler
- // rem: je fais une inversion verticale ici
- for (unsigned long y = 0; y < img_height; ++y)
- TIFFWriteScanline(img, data+y*img_width, img_height-y-1, 0);
- TIFFClose(img);
|
Ecriture d'un TIF 2 couleurs:
Code :
- // rem: l'image en mémoire est stockée dans la variable "data"
- unsigned long x, y, z, i, j;
- unsigned char val;
- // buffer utilisé pour l'encodage des bits
- unsigned char *buffer =
- (unsigned char*) malloc(img_width*sizeof(unsigned char));
- TIFF *img = TIFFOpen(fname, "w" );
- TIFFSetField(img, TIFFTAG_IMAGEWIDTH, img_width);
- TIFFSetField(img, TIFFTAG_IMAGELENGTH, img_height);
- TIFFSetField(img, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
- TIFFSetField(img, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
- TIFFSetField(img, TIFFTAG_IMAGEDESCRIPTION, "ici une petite description" );
- TIFFSetField(img, TIFFTAG_ROWSPERSTRIP, 1);
- TIFFSetField(img, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
- TIFFSetField(img, TIFFTAG_BITSPERSAMPLE, 1);
- TIFFSetField(img, TIFFTAG_SAMPLESPERPIXEL, 1);
- TIFFSetField(img, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
- TIFFSetField(img, TIFFTAG_XRESOLUTION, x_resolution);
- TIFFSetField(img, TIFFTAG_YRESOLUTION, y_resolution);
- TIFFSetField(img, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
- for (y = 0; y < img_height; ++y) {
- memset(buffer, 0, img_width*sizeof(unsigned char));
- z = i = 0;
- val = 0;
- j = y*img_width;
- for (x = 0; x < img_width; ++x) {
- if (!(x%8) && x) { buffer[z++] = val; val = 0; i = 0; }
- val |= ((data[j+x]?0:1)<<(7-i++));
- }
- buffer[z++] = val;
- TIFFWriteScanline(img, buffer, img_height-y-1, 0);
- }
- free(buffer);
- TIFFClose(img);
|
Voilà, j'espère que tu vas t'en sortir avec ça Message édité par m0rbac le 09-07-2004 à 13:20:38
|