相关疑难解决方法(0)

深度克隆对象

我想做的事情如下:

MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)

然后更改未在原始对象中反映的新对象.

我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.

如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?

.net c# clone

2135
推荐指数
34
解决办法
77万
查看次数

如何创建Bitmap深层副本

我在我的应用程序中处理Bitmaps,出于某些目的,我需要创建Bitmap的深层副本.有一种优雅的方式怎么做?

我试过了

Bitmap deepCopy = original.Clone();
Run Code Online (Sandbox Code Playgroud)

,显然这不会创建一个深层副本,而是浅层副本.我的下一个尝试是创建一个新的位图

Bitmap deepCopy = new Bitmap(original);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个构造函数是Bitmap(Image),而不是Bitmap(Bitmap),而Bitmap(Image)会将我漂亮的8bppIndexed Pixelformat转换为另一个.

另一种尝试是使用MemoryStream

public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
    Bitmap result;
    using (MemoryStream stream = new MemoryStream())
    {
        source.Save(stream, ImageFormat.Bmp);
        stream.Seek(0, SeekOrigin.Begin);
        result = new Bitmap(stream);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

好吧,这也不起作用,因为必须在Bitmap的整个生命周期内打开MemoryStream.

所以,我总结了所有的后端,我真的很想看到一个很好的优雅方式来创建一个Bitmap深层副本.感谢那 :)

c# bitmap deep-copy

20
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

bitmap ×1

clone ×1

deep-copy ×1