Преобразование BitmapSource в изображение с сохранением всех кадров - PullRequest
1 голос
/ 26 января 2012

У меня есть метод, который должен создать экземпляр System.Drawing.Image.Рассмотрим следующие предварительные условия:

  • Я получаю BitmapSource в качестве параметра метода
  • Ниже вы найдете код, который выполняет преобразование из BitmapSource в изображение.* Преобразование:
    public Image ConvertBitmapSourceToImage(BitmapSource input)
    {
        MemoryStream transportStream = new MemoryStream();
        BitmapEncoder enc = new BmpBitmapEncoder();
        enc.Frames.Add(BitmapFrame.Create(input));
        enc.Save(transportStream);
        transportStream.Seek(0, SeekOrigin.Begin);
        return Image.FromStream(transportStream);
    }
    

    Теперь представьте, что BitmapSource был создан из многостраничного файла TIF.Что мне нужно сделать, это сделать любую n-ю страницу доступной в коде.Класс BitmapSource не поддерживает это, так что вы знаете, как получить любой, кроме первого кадра из моего ввода?Или BitmapSource читает весь Tif как один кадр, теряя информацию об кадре?

    Если бы это было возможно, я мог бы добавить еще один параметр в подпись моего метода, например:

    public Image ConvertBitmapSourceToImage(BitmapSource input, int frame)
    {
       ///[..]
    }
    

    Любые идеи?

    Заранее спасибо!

1 Ответ

0 голосов
/ 29 января 2012

Как вы уже сказали, BitmapSource не поддерживает несколько кадров.Возможно, можно было бы вмешаться в момент декодирования TIFF и преобразовать изображение из каждого кадра:

TiffBitmapDecoder decoder = new TiffBitmapDecoder(...) // use stream or uri here
System.Drawing.Image[] images = new System.Drawing.Image[decoder.Frames.Count];

for (int i = 0; i < decoder.Frames.Count; i++)
{
    // use your converter function here
    images[i] = ConvertBitmapSourceToImage(decoder.Frames[i]));
}

Я не тестировал приведенный выше код, извините за любые недостатки.1004 *

...