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年现在......你怎么看? ???
提前致谢
答案 0 :(得分:1)
问题是Graphics.FromImage()
不能与索引位图一起使用,并且相应的合同程序集(System.Drawing.Contracts.dll
)包含强制执行该操作的前提条件。静态检查程序无法在代码中找到任何内容来证明满足要求,因此它会向您发出警告。
您必须确保this._otherBitmap
未使用PixelFormat.Indexed
格式创建。如果您完全确定不是,则可以在Graphics.FromImage()
的调用上方添加此行:
Contract.Assume((this._otherBitmap.PixelFormat & PixelFormat.Indexed) == 0);
...但是由于警告告诉你FromImage()
方法的实际要求,如果你错了,它会断言或抛出异常。