Как открыть многокадровое изображение в формате TIFF imageformat в .NET 2.0?
-
03-07-2019 - |
Вопрос
Image.FromFile(@"path\filename.tif")
или
Image.FromStream(memoryStream)
оба создают объекты изображения только с одним кадром, даже если исходным кодом является многокадровый файл TIFF. Как вы загружаете файл изображения, который сохраняет эти кадры? Изменения сохраняются с использованием изображения.Методы SaveAdd покадрово.Они работают в других программах просмотра, но .Методы NET Image не будут загружать эти кадры, только первый.
Означает ли это, что нет способа вернуть многокадровый TIFF из метода, в котором я передаю коллекцию растровых изображений для использования в качестве кадров?
Решение
Вот что я использую:
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;
}
Другие советы
Я смог обработать многокадровый 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.
bitmap.Dispose();
После цикла For вам нужно удалить bitmap.В противном случае вы получаете ошибку "файл, использующий другой процесс" при попытке использовать тот же файл в другом процессе.