将流保存为图像

18

如何将流保存为图像并将图像存储在临时文件中?


1
“as an image” 究竟是什么意思? - Jon Skeet
这里的图像指的是要存储在临时文件位置的JPEG图像文件,而流则是System.IO.Stream。 - banupriya
5个回答

40

尝试一下

Image img = System.Drawing.Image.FromStream(myStream);

img.Save(System.IO.Path.GetTempPath() + "\\myImage.Jpeg", ImageFormat.Jpeg);

图像步骤不是必需的。我们可以直接将流写入文件。 - user333306
2
是的,但我假设banupriyavijay想在应用程序中对图像进行某些操作。否则,这将仅是一个文件复制操作,可以使用System.IO.File.Copy()完成。 - Unmesh Kondolikar
3
当我写下这行代码:Image img = System.Drawing.Image.FromStream(stream); 时,会出现"Parameter is not valid." 的错误提示。 - Chirag
如果您尝试覆盖一张图片,则此解决方案存在问题。我遇到了“GDI+ 中发生常规错误”的错误。 - Juan Zamora

7
var tempFile = Path.GetTempFileName();
using (var fs = File.Create(tempFile))
{
   source.copyTo(fs);
}

这里的源是源流。现在您的源流已保存在临时位置(由tempFile指定)。请注意,文件名扩展名将为TMP。


2
+1 是给 Path.GetTempFileName() 的,我从来不知道它的存在。 - user333306
FileStream不包含Create的定义!!此外,我用作输入的流是System.IO.Stream,我想将此IO流存储到临时文件中的图像。 - banupriya
抱歉,我的意思是使用File.Create而不是FileStream.Create。我会编辑答案。源流可以是任何流。 - VinayC

3

在下面的代码中,stream 表示你的流(图像)。

using (Stream output = new FileStream ("mycat.jpg"))
{
    byte[] buffer = new byte[32*1024];
    int read;

    while ( (read=stream.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, read);
    }
}

这段代码的版权归Jon Skeet所有,我的贡献是文件名 ;)

1

看看位图类。有一个以流为参数的构造器重载,还有一个名为保存的方法,你可以用它来将其保存为文件。


位图步骤不是必需的。我们可以直接将流写入文件。 - user333306

0
对于Windows Phone 8.1,我发现以下方法效果很好。在任何你想要的路径上创建TempStorageFile,然后像这样传入图像的流:
var fileStream = await TempStorageFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
            await RandomAccessStream.CopyAsync(imageStream, fileStream);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接