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() метод, он будет утверждать или выдавать исключение, если вы не правы.

Другие вопросы по тегам