位图锁定位和克隆

时间:2010-04-15 14:33:03

标签: c# .net

熟悉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?

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

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

1 个答案:

答案 0 :(得分:4)

我认为Bitmap.Clone()没有制作深层副本,而且数据是共享的。

修改:按照下面给出的建议,在var b之后移动克隆行,并按照以下方式移动:var clone = new Bitmap(b);。它现在有效。