Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将图像保存为流?_C# - Fatal编程技术网

C# 如何将图像保存为流?

C# 如何将图像保存为流?,c#,C#,我正在尝试创建一个屏幕截图,并将其从C#发送到我存储它的PHP 我创建了如下屏幕截图: Bitmap screenshot = TakeScreenshot(); 现在我试着: 但是,我使用了未分配的局部变量“myStream” 我做错了什么 功能: private Bitmap TakeScreenshot() { //Create a new bitmap. var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bound

我正在尝试创建一个屏幕截图,并将其从C#发送到我存储它的PHP

我创建了如下屏幕截图:

Bitmap screenshot = TakeScreenshot();
现在我试着:

但是,我使用了未分配的局部变量“myStream”

我做错了什么


功能:

private Bitmap TakeScreenshot()
{
    //Create a new bitmap.
    var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                   Screen.PrimaryScreen.Bounds.Height,
                                   System.Drawing.Imaging.PixelFormat.Format32bppArgb);

    // Create a graphics object from the bitmap.
    using (var gfxScreenshot = Graphics.FromImage(bmpScreenshot))
    {    
        // Take the screenshot from the upper left corner to the right bottom corner.
        gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                                Screen.PrimaryScreen.Bounds.Y,
                                0,
                                0,
                                Screen.PrimaryScreen.Bounds.Size,
                                CopyPixelOperation.SourceCopy);    
    }

    return bmpScreenshot;
}

你说的
Stream
是指
FileStream
MemoryStream
,什么?不管是什么情况,只要将变量初始化为所需的适当类型的流即可

例如:

using(var myStream = new MemoryStream())
{....}

您必须在使用流之前初始化它

using (MemoryStream myStream = new MemoryStream()) {
    screenshot.Save(myStream, System.Drawing.Imaging.ImageFormat.Gif);
}

使用
关闭并处置流的
要点。@BradleyUffner-尽管保持一致性很好,但您不必处置
MemoryStream
实例,但没有需要释放的非托管资源。如果查看
MemoryStream
中的
Dispose
实现,实际上什么都不会发生。
using (MemoryStream myStream = new MemoryStream()) {
    screenshot.Save(myStream, System.Drawing.Imaging.ImageFormat.Gif);
}