Почему вы предполагаете, что они используют одну и ту же формулу?
Даже если они используют одну и ту же формулу, и вы принимаете, что реализация отличается, ожидаете ли вы, что результат будет одинаковым?
В конце дня код предназначен для работы с восприятием, а не с математической точностью. Хотя вы можете получить это с CUDA, если хотите.
Вместо того, чтобы удивляться, что вы получаете другие результаты, я был бы очень удивлен, если бы вы получили идеальное совпадение пикселей.
то, как они представляют цвет, отличается ... Я точно знаю, что nvidia использует float (возможно, double) для представления цветов, где GDI использует int, я верю.
http://en.wikipedia.org/wiki/GPGPU
В DX9 появляется шейдер 2.0, когда реализация цвета переключается с int на 24 и 32-битные значения с плавающей запятой.
попробуйте сравнить рендеринг ati / amd с рендерингом nvidia, и вы можете ясно увидеть, что цвет сильно отличается.
Я впервые заметил это в Quake 2 ... Разница между двумя картами была ошеломляющей - конечно, это связано с большим количеством вещей, наименьшей из которых является их реализация bilinier interp.
РЕДАКТИРОВАТЬ: информация о том, как спецификация была сделана случайно после моего ответа. В любом случае, я думаю, что типы данных, которые использовались для его хранения, будут разными, независимо от того, как вы их указали. Кроме того, реализация float может быть иной. Я могу ошибаться, но я почти уверен, что реализации на c # отличаются от компилятора C, который использует nvidia. (и это предполагает, что GDI + не просто конвертирует float в эквивалентный int ....)
Даже если я ошибаюсь из-за этого, я считаю, что это исключительное ожидание, что две разные реализации алгоритма будут идентичными. они оптимизированы по скорости, в результате разница в оптической характеристике будет напрямую переходить к разнице в качестве изображения, поскольку эта скорость будет зависеть от другого подхода к срезанию углов / приближению.