CodeContracts:需要未经证实:(image.PixelFormat& PixelFormat.Indexed)== 0

时间:2013-05-23 13:04:48

标签: c#-4.0 code-contracts requires

Net 4.0代码合同中的以下警告是什么意思以及如何修复它?

CodeContracts: requires unproven: (image.PixelFormat & PixelFormat.Indexed) == 0

我正在做:var bmp = new Bitmap(pSize.Width, pSize.Height, System.Drawing.Imaging.PixelFormat.Indexed)var g = Graphics.FromImage(this._otherBitmap)

顺便说一下:关于how mature code contracts is,如果你will use them if they still exist,有一些关于SO的问题,但它们是2009年到2011年。2013年现在......你怎么看? ???

提前致谢

1 个答案:

答案 0 :(得分:1)

问题是Graphics.FromImage()不能与索引位图一起使用,并且相应的合同程序集(System.Drawing.Contracts.dll)包含强制执行该操作的前提条件。静态检查程序无法在代码中找到任何内容来证明满足要求,因此它会向您发出警告。

您必须确保this._otherBitmap未使用PixelFormat.Indexed格式创建。如果您完全确定不是,则可以在Graphics.FromImage()的调用上方添加此行:

Contract.Assume((this._otherBitmap.PixelFormat & PixelFormat.Indexed) == 0);

...但是由于警告告诉你FromImage()方法的实际要求,如果你错了,它会断言或抛出异常。