流到图像并返回



我将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 (rackspace需要FileStream)。

你基本上想要这样的东西,不是吗?

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

这看起来很简单。您必须读取整个图像内容才能处理它,并且必须将结果写回来。

filestream是一般的。net处理文件的方式,所以对于一般用途,你的方法是可以的。

我唯一不明白的是为什么你再次返回FileStream -它是通过参数传递的相同对象。

如果您正在处理大量映像并且只修改部分数据,内存映射文件可以提高性能。

相关内容

  • 没有找到相关文章

最新更新