Comment ouvrir une image au format TIFF multi-images dans .NET 2.0?
-
03-07-2019 - |
Question
Image.FromFile(@"path\filename.tif")
ou
Image.FromStream(memoryStream)
produisent tous deux des objets image avec une seule image même si la source est un fichier TIFF multi-images. Comment charger un fichier image contenant ces images? Les fichiers tiff sont enregistrés à l'aide des méthodes Image.SaveAdd, image par image. Ils fonctionnent dans d'autres visualiseurs, mais les méthodes .NET Image ne chargent pas ces cadres, mais le premier.
Cela signifie-t-il qu'il n'y a aucun moyen de renvoyer un fichier TIFF multi-image à partir d'une méthode dans laquelle je passe une collection de bitmaps à utiliser comme images?
La solution
Voici ce que j'utilise:
private List<Image> GetAllPages(string file)
{
List<Image> images = new List<Image>();
Bitmap bitmap = (Bitmap)Image.FromFile(file);
int count = bitmap.GetFrameCount(FrameDimension.Page);
for (int idx = 0; idx < count; idx++)
{
// save each frame to a bytestream
bitmap.SelectActiveFrame(FrameDimension.Page, idx);
MemoryStream byteStream = new MemoryStream();
bitmap.Save(byteStream, ImageFormat.Tiff);
// and then create a new Image from it
images.Add(Image.FromStream(byteStream));
}
return images;
}
Autres conseils
J'ai pu gérer le format TIFF multi-images en utilisant la méthode ci-dessous.
Image multiImage = Image.FromFile(sourceFile);
multiImage.Save(destinationFile, tiff, prams);
int pageCount = multiImage.GetFrameCount(FrameDimension.Page);
for (int page = 1; page < pageCount; page++ )
{
multiImage.SelectActiveFrame(FrameDimension.Page,page);
multiImage.SaveAdd(dupImage,prams);
}
multiImage.SaveAdd(newPage, prams);
multiImage.Dispose();
Je n'ai pas essayé la solution dans .net 2.0, mais MSDN indique aux membres de la classe d'exister. Cela a résolu mon problème dans .net 4.5.2.
bitmap.Dispose ();
Après la boucle For, vous devez supprimer le bitmap. Sinon, vous obtiendrez une erreur "Fichier utilisant un autre processus". lorsque vous essayez d’utiliser le même fichier dans un autre processus.