据我所知,有两种复制位图的方法。

Bitmap.Clone()

Bitmap A = new Bitmap("somefile.png");
Bitmap B = (Bitmap)A.Clone();

新位图()
Bitmap A = new Bitmap("somefile.png");
Bitmap B = new Bitmap(A);

这些方法有何不同?我对内存和线程方面的差异特别感兴趣。

最佳答案

这是“深”和“浅”副本之间的共同区别,也是几乎不推荐使用的 IClonable 接口(interface)的一个问题。 Clone() 方法创建一个新的 Bitmap 对象,但像素数据与原始位图对象共享。 Bitmap(Image) 构造函数还创建了一个新的 Bitmap 对象,但该对象拥有自己的像素数据副本。

很多关于 Clone() 的问题在 SO 上,程序员希望它避免位图的典型问题,即加载它的文件上的锁定。它没有。一个可能的实际用法是避免库方法在传递的位图上不恰本地调用 Dispose() 的麻烦。

利用像素格式转换或裁剪选项,重载可能很有用。

关于c# - Bitmap.Clone() 和 new Bitmap(Bitmap) 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12709360/

10-16 10:03