熟悉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?
如果我在锁定第一个位图之前克隆,它就不会抛出,这是我期望的行为。
我还希望如果它可以让你克隆一个锁定的图像,然后允许你锁定/解锁克隆,原来就不会受到影响。
答案 0 :(得分:4)
我认为Bitmap.Clone()
没有制作深层副本,而且数据是共享的。
修改:按照下面给出的建议,在var b
之后移动克隆行,并按照以下方式移动:var clone = new Bitmap(b);
。它现在有效。