Как открыть многоформатное изображение формата изображения TIFF в .NET 2.0? - PullRequest
13 голосов
/ 31 декабря 2008
Image.FromFile(@"path\filename.tif")

или

Image.FromStream(memoryStream)

оба создают объекты изображения только с одним кадром, даже если источником является многокадровый файл TIFF. Как загрузить файл изображения, в котором сохраняются эти кадры? TIFF сохраняются с использованием методов Image.SaveAdd кадр за кадром. Они работают в других средствах просмотра, но методы .NET Image не будут загружать эти кадры, только первый.

Значит ли это, что нет способа вернуть многокадровый TIFF из метода, в котором я передаю коллекцию растровых изображений для использования в качестве кадров?

Ответы [ 3 ]

25 голосов
/ 31 декабря 2008

Вот что я использую:

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;
}
2 голосов
/ 28 декабря 2016

Мне удалось обработать многокадровый TIFF, используя метод ниже.

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(); 

Я не пробовал решение в .net 2.0, но MSDN показывает, что члены класса существуют. Это исправило мою проблему в .net 4.5.2.

0 голосов
/ 02 декабря 2016

bitmap.Dispose ();

После цикла For вам нужно избавиться от растрового изображения. В противном случае вы получаете сообщение об ошибке «файл использует другой процесс» при попытке использовать тот же файл в другом процессе.

...