Recherche dll pour traitement d'images (modification de dpi)

Recherche dll pour traitement d'images (modification de dpi) - Divers - Programmation

Marsh Posté le 08-07-2004 à 16:50:24    

Bonjour,
 
  Je recherche une dll ActiveX ou non qui permette d'effectuer des traitements d'images. Mon principal besoin est de modifier la résolution d'une image 600 ---> 300 dpi.
 
J'utilise l'activX ScanFix mais il ne permet pas de faire ce type de traitement.
 
Merci ! :hello:

Reply

Marsh Posté le 08-07-2004 à 16:50:24   

Reply

Marsh Posté le 08-07-2004 à 20:23:08    

Est-ce que tu utilises un format d'image particulier ?

Reply

Marsh Posté le 09-07-2004 à 09:14:38    

C'est du format tif...

Reply

Marsh Posté le 09-07-2004 à 13:19:45    

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  :D ]
 
Ecriture du TIF 256 couleurs:

Code :
  1. // rem: l'image en mémoire est stockée dans la variable "data"
  2. TIFF *img = TIFFOpen(fname, "w" );
  3. TIFFSetField(img, TIFFTAG_IMAGEWIDTH, img_width);
  4. TIFFSetField(img, TIFFTAG_IMAGELENGTH, img_height);
  5. TIFFSetField(img, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
  6. TIFFSetField(img, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
  7. TIFFSetField(img, TIFFTAG_IMAGEDESCRIPTION, "ici une petite description" );
  8. TIFFSetField(img, TIFFTAG_ROWSPERSTRIP, 1);
  9. TIFFSetField(img, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
  10. TIFFSetField(img, TIFFTAG_BITSPERSAMPLE, 8);
  11. TIFFSetField(img, TIFFTAG_SAMPLESPERPIXEL, 1);
  12. TIFFSetField(img, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
  13. TIFFSetField(img, TIFFTAG_XRESOLUTION, x_resolution);
  14. TIFFSetField(img, TIFFTAG_YRESOLUTION, y_resolution);
  15. TIFFSetField(img, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
  16. // Ecriture à proporement parler
  17. // rem: je fais une inversion verticale ici
  18. for (unsigned long y = 0; y < img_height; ++y)
  19.   TIFFWriteScanline(img, data+y*img_width, img_height-y-1, 0);
  20. TIFFClose(img);


 
Ecriture d'un TIF 2 couleurs:

Code :
  1. // rem: l'image en mémoire est stockée dans la variable "data"
  2. unsigned long x, y, z, i, j;
  3. unsigned char val;
  4. // buffer utilisé pour l'encodage des bits
  5. unsigned char *buffer =
  6.   (unsigned char*) malloc(img_width*sizeof(unsigned char));
  7. TIFF *img = TIFFOpen(fname, "w" );
  8. TIFFSetField(img, TIFFTAG_IMAGEWIDTH, img_width);
  9. TIFFSetField(img, TIFFTAG_IMAGELENGTH, img_height);
  10. TIFFSetField(img, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
  11. TIFFSetField(img, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
  12. TIFFSetField(img, TIFFTAG_IMAGEDESCRIPTION, "ici une petite description" );
  13. TIFFSetField(img, TIFFTAG_ROWSPERSTRIP, 1);
  14. TIFFSetField(img, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
  15. TIFFSetField(img, TIFFTAG_BITSPERSAMPLE, 1);
  16. TIFFSetField(img, TIFFTAG_SAMPLESPERPIXEL, 1);
  17. TIFFSetField(img, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
  18. TIFFSetField(img, TIFFTAG_XRESOLUTION, x_resolution);
  19. TIFFSetField(img, TIFFTAG_YRESOLUTION, y_resolution);
  20. TIFFSetField(img, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
  21. for (y = 0; y < img_height; ++y) {
  22.   memset(buffer, 0, img_width*sizeof(unsigned char));
  23.   z = i = 0;
  24.   val = 0;
  25.   j = y*img_width;
  26.   for (x = 0; x < img_width; ++x) {
  27.     if (!(x%8) && x) { buffer[z++] = val; val = 0; i = 0; }
  28.     val |= ((data[j+x]?0:1)<<(7-i++));
  29.   }
  30.   buffer[z++] = val;
  31.   TIFFWriteScanline(img, buffer, img_height-y-1, 0);
  32. }
  33. free(buffer);
  34. 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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed