位图锁定位和克隆

熟悉GDI的人是否可以解释为什么以下序列会抛出?

var b = new Bitmap("some file"); var bd= b.LockBits(rect , readonly, px); //correct size and pixel type var clone = (Bitmap)b.Clone(); var cd = clone.LockBits(rect , readonly , px); //okay clone.UnlockBits(cd); //okay b.UnlockBits(bd); //throws -- why? 

如果我在锁定第一个位图之前进行克隆,它就不会抛出,这是我期望的行为。

我还希望如果它可以让你克隆一个锁定的图像,然后允许你锁定/解锁克隆,原来不会受到影响。

我认为Bitmap.Clone()不会生成深层副本并且数据是共享的。

编辑:按照下面给出的建议,在var b之后移动克隆行并使其像这样: var clone = new Bitmap(b); 。 它现在有效。