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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top