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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top