流处理后无法克隆位图
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
我从 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