Bitmap lockbits y clonación

¿Puede alguien familiarizado con GDI arrojar algo de luz sobre por qué se produce la siguiente secuencia?

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? 

No se lanza si clono antes de bloquear el primer bitmap, que es el comportamiento que esperaba.

También esperaría que si le permitiera clonar una imagen bloqueada y luego le permitiera bloquear / desbloquear la clonación, el original no se vería afectado.

Creo que Bitmap.Clone() no hace una copia profunda y los datos se comparten.

Edición: Siguiendo los consejos que se dan a continuación, mueva la línea de clonación justo después de var b y hágala así: var clone = new Bitmap(b); . Ahora funciona.