Как я могу клонировать тип FileStream? - PullRequest
3 голосов
/ 22 февраля 2010

Как я могу клонировать тип FileStream?

Проблема в том, что я использовал MagickNet.Image(inputStream), чтобы получить растягивание изображения перед его сохранением, но похоже, что он закрывает inputStream.

Итак, я могу отправить клон inputStream в функцию, чтобы функция не могла редактировать реальный объект inputStream?

Это моя функция:

public Picture GetPictureDimension(Stream inputStream, Picture picture)
{
    var img = new MagickNet.Image(inputStream);

    picture.Width = img.Columns;
    picture.Height = img.Rows;

    return picture;
}

Ответы [ 2 ]

2 голосов
/ 22 февраля 2010

Вы могли бы просто заново открыть файл? Но чтобы сохранить один Stream без его закрытия, вы можете попробовать NonClosingStreamWrapper в MiscUtil . Просто обязательно сбросьте Position, если это необходимо.

1 голос
/ 22 февраля 2010

Вы не опубликовали полный код, но я представляю, что MagickNet.Image(inputStream) получает полное изображение, и вы используете только Размер из этого, а позже вы загружаете изображение во второй раз.

Таким образом, более практичным решением было бы получить и удержать изображение в памяти только один раз. Это дает вам доступ к размеру.

Edit:

Кажется, вы этого не понимаете, но вы спрашиваете, как загрузить изображение дважды (без повторного открытия потока). Я думаю, что более эффективно загрузить его только один раз.

Изображение класса XNA, верно? Я не знаю много об этом, но вы можете попробовать что-то вроде:

public Picture GetPictureDimension(Stream inputStream, ref Picture picture)
{
    var img = new MagickNet.Image(inputStream);

    picture = new Picture(img);  // just guessing here
    //picture.Width = img.Columns;
    //picture.Height = img.Rows;

    return picture;
}
...