据我所知,有两种复制位图的方法。
Bitmap.Clone()
Bitmap A = new Bitmap("somefile.png"); Bitmap B = (Bitmap)A.Clone();
新的Bitmap()
Bitmap A = new Bitmap("somefile.png"); Bitmap B = new Bitmap(A);
这些方法有何不同?我对内存和线程方面的差异特别感兴趣。
这是“深”副本和“浅”副本之间的共同区别,这也是几乎不建议使用的IClonable接口的问题。Clone()方法创建一个新的Bitmap对象,但像素数据与原始位图对象共享。Bitmap(Image)构造函数还会创建一个新的Bitmap对象,但是该对象具有自己的像素数据副本。
SO上有很多关于Clone()的问题,程序员希望它避免使用位图的典型麻烦,位图是从中加载文件的锁。没有。一种可能的实际用法是避免使用库方法的麻烦,该库方法在传递的位图上不适当地调用Dispose()。
利用像素格式转换或裁剪选项的优势,重载可能会很有用。