流处理后无法克隆位图

Cannot Clone Bitmap after Stream Disposed

我从 DataStream 加载位图。我尝试从一个方法 return 加载的位图,然后将其用作克隆新位图的源。不幸的是,Clone() 调用导致 OutOfMemoryException。通过测试我意识到 Clone() 成功直到底层数据流被释放。

如何创建独立于从其加载的流而存在的位图?

DxScreenCapture cap = new DxScreenCapture();
var surface = cap.CaptureScreen();

Bitmap png;
Rectangle rect;
PixelFormat fmt;
using (DataStream stream = Surface.ToStream(surface, ImageFileFormat.Bmp))
{
    png = new Bitmap(stream);

    fmt = png.PixelFormat;
    rect = new Rectangle(911, 170, 32, 14);

    // Works
    Bitmap rgn1 = png.Clone(rect, fmt);
}
// Throws OutOfMemoryException
Bitmap rgn2 = png.Clone(rect, fmt);

根据 Hans 的评论,我只是从原始位图创建了一个新位图。

Bitmap copy;
using (DataStream stream = Surface.ToStream(surface, ImageFileFormat.Bmp))
{
    Bitmap orig = new Bitmap(stream);
    copy = new Bitmap(orig);
}

// Able to use copy after stream is disposed