CodeContracts: требуется бездоказательно: (image.PixelFormat & PixelFormat.Indexed) == 0
Что означает следующее предупреждение в Code Contracts для 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)
В качестве отступления: у SO есть несколько вопросов о том, насколько зрелы кодовые контракты и будете ли вы их использовать, и будут ли они по-прежнему существовать, но они с 2009 по 2011 год. Сейчас 2013... Что вы думаете???
заранее спасибо
1 ответ
Проблема в том, что Graphics.FromImage()
нельзя использовать с индексированным растровым изображением и соответствующей сборкой контракта (System.Drawing.Contracts.dll
) содержит предварительное условие для обеспечения этого. Статическая проверка не может найти что-либо в вашем коде, чтобы доказать, что требование выполнено, поэтому выдает это предупреждение.
Вы должны убедиться, что this._otherBitmap
не создается с PixelFormat.Indexed
формат. Если вы абсолютно уверены, что это не так, вы можете добавить эту строку над вызовом Graphics.FromImage()
:
Contract.Assume((this._otherBitmap.PixelFormat & PixelFormat.Indexed) == 0);
... но так как предупреждение говорит вам о фактическом требовании FromImage()
метод, он будет утверждать или выдавать исключение, если вы не правы.