48 votes

Convertir des bitmaps en une image TIFF multipage dans .NET 2.0

Comment puis-je convertir un tableau de bitmaps en une toute nouvelle image au format TIFF, en ajoutant tous les bitmaps en tant que trames dans cette nouvelle image tiff?

en utilisant .NET 2.0.

85voto

Otávio Décio Points 44200

Commencez avec la première image bitmap en la plaçant dans un objet Image

Bitmap bitmap = (Bitmap)Image.FromFile(file);

Enregistrer l'image dans la mémoire comme tiff

MemoryStream byteStream = new MemoryStream();
bitmap.Save(byteStream, ImageFormat.Tiff);

Mettre Tiff en une autre Image de l'objet

Image tiff = Image.FromStream(byteStream)

Préparer des encodeurs:

ImageCodecInfo encoderInfo = GetEncoderInfo("image/tiff");

EncoderParameters encoderParams = new EncoderParameters(2);
EncoderParameter parameter = new EncoderParameter(
    Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
encoderParams.Param[0] = parameter;
parameter = new EncoderParameter(Encoder.SaveFlag, 
    (long)EncoderValue.MultiFrame);
encoderParams.Param[1] = parameter;

Enregistrer le fichier:

tiff.Save(sOutFilePath, encoderInfo, encoderParams);

Pour les pages suivantes, préparer des encodeurs:

EncoderParameters EncoderParams = new EncoderParameters(2);
EncoderParameter SaveEncodeParam = new EncoderParameter(
     Encoder.SaveFlag, 
     (long)EncoderValue.FrameDimensionPage);
EncoderParameter CompressionEncodeParam = new EncoderParameter(
     Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
tiff.SaveAdd(/* next image as tiff - do the same as above with memory */, EncoderParams);

Enfin vider le fichier:

EncoderParameter SaveEncodeParam = new EncoderParameter(
     Encoder.SaveFlag, (long)EncoderValue.Flush);
EncoderParams = new EncoderParameters(1);
EncoderParams.Param[0] = SaveEncodeParam;
tiff.SaveAdd(EncoderParams);

Qui devrait vous obtenir a commencé.

23voto

G0tPwned Points 862

Tombé sur ce post après un peu de recherche sur Google. J'ai essayé le code qui était dans le post de a'b'c'd e f'g h', mais cela ne fonctionne pas pour moi. Peut-être, je n'en faisais pas quelque chose correctement.

En tout cas, j'ai trouvé un autre post que les images enregistrées à multi-page tiff. Voici le lien vers le post: http://www.bobpowell.net/addframes.htm

Aussi, voici le code qui a fonctionné pour moi. Il doit être identique à celui de la poste.

Encoder encoder = Encoder.SaveFlag;
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff";
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

// Save the first frame of the multi page tiff
Bitmap firstImage = (Bitmap) _scannedPages[0].RawContent;
firstImage.Save(fileName, encoderInfo, encoderParameters);

encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);

// Add the remining images to the tiff
for (int i = 1; i < _scannedPages.Count; i++)
{
   Bitmap img = (Bitmap) _scannedPages[i].RawContent;
   firstImage.SaveAdd(img, encoderParameters);
}

// Close out the file
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);

3voto

Sparr Points 5796

N'étant pas fan des antécédents de Microsoft en matière de gestion et de création de fichiers de formats standardisés, je suggère d'utiliser ImageMagick, disponible sous forme de bibliothèque .Net sous forme de MagickNet (attention, http://midimick.com/magicknet/ a actuellement un popup de spyware, j'ai alerté le propriétaire du site).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X