Wie ein Multi-Frame-TIFF-Imageformat Bild in .NET 2.0 öffnen?
-
03-07-2019 - |
Frage
Image.FromFile(@"path\filename.tif")
oder
Image.FromStream(memoryStream)
produzieren beiden Bildobjekte mit nur einem Rahmen, obwohl die Quelle eine Multi-Frame-TIFF-Datei. Wie Sie eine Bilddatei Sie laden, die diesen Rahmen behält? Die tiffs den Image.SaveAdd Methoden Frame für Frame mit gespeichert. Sie arbeiten in anderen Zuschauern, aber .NET Bild Methoden werden diese Frames nicht geladen werden, wird nur die erste.
Bedeutet dies, dass es keine Möglichkeit gibt, einen Multi-Frame-TIFF aus einem Verfahren zurückzukehren, wo ich in einer Sammlung von Bitmaps am Übergang als Rahmen verwendet werden?
Lösung
Hier ist, was ich benutze:
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;
}
Andere Tipps
Ich konnte den Multi-Frame-TIFF zu handhaben, indem Sie die folgenden Verfahren.
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();
Ich habe nicht die Lösung in .net 2.0 versucht, aber MSDN zeigt die Klassenmitglieder zu existieren. Es hat mein Problem in .net 4.5.2 beheben.
Bitmap.Dispose ();
Nach dem For-Schleife müssen Sie Bitmap entsorgen. Andernfalls erhalten Sie Fehler „Datei anderen Prozess verwendet“, wenn versuchen, in anderen Verfahren dieselbe Datei zu verwenden.