Поток к изображению и обратно - PullRequest
4 голосов
/ 25 сентября 2011

Я беру Stream, преобразовываю его в Image, обрабатываю это изображение, затем возвращаю FileStream.

Это проблема с производительностью? Если нет, то каков оптимизированный способ преобразования и возврата потока?

public FileStream ResizeImage(int h, int w, Stream stream)
{
       var img = Image.FromStream(stream);

       /* ..Processing.. */

       //converting back to stream? is this right?
       img.Save(stream, ImageFormat.Png);

       return stream;
} 

Ситуация, в которой это выполняется: пользователь загружает изображение на мой сайт (контроллер выдает мне поток, я изменяю его размер, а затем отправляю этот поток в стойку (Rackspace занимает FileStream).

Ответы [ 2 ]

9 голосов
/ 25 сентября 2011

Вы в принципе хотите что-то подобное, не так ли:

public void Resize(Stream input, Stream output, int width, int height)
{
    using (var image = Image.FromStream(input))
    using (var bmp = new Bitmap(width, height))
    using (var gr = Graphics.FromImage(bmp))
    {
        gr.CompositingQuality = CompositingQuality.HighSpeed;
        gr.SmoothingMode = SmoothingMode.HighSpeed;
        gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
        gr.DrawImage(image, new Rectangle(0, 0, width, height));
        bmp.Save(output, ImageFormat.Png);
    }
}

, который будет использоваться следующим образом:

using (var input = File.OpenRead("input.jpg"))
using (var output = File.Create("output.png"))
{
    Resize(input, output, 640, 480);
}
0 голосов
/ 25 сентября 2011

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

FileStreams - это обычный способ обработки файлов в .NET, поэтому для обычных целей ваш подход приемлем.

Единственное, чего я не понимаю, - это почему вы снова возвращаете FileStream - это тот же объект, который был передан параметром.

Если вы делаете много изображений и изменяете толькочасти данных, отображенные в память файлы могут повысить производительность.Однако это более продвинутая концепция.

...