Есть ли способ выполнять операции с аппаратным ускорением для каждого пикселя или пиксельного шейдера на изображении (используя Drawing.Image) в С#?

Цель состоит в том, чтобы аппаратно ускорить настройку яркости, контрастности или цвета RGB для изображения. Использование C# и сохранение результата в Drawing.Image.

Я пытался использовать матричные преобразования, но они не ускоряются аппаратно. И использование XAML ускоряется аппаратно, но при извлечении изображения преобразование из Media.Image в стандартный .NET Drawing.Image изменяет содержимое изображения (с использованием методов преобразования Microsoft); то есть преобразованный вывод не соответствует вводу.

Я предполагаю, что есть способ использовать DirectX/пиксельные шейдеры из C# и работать или, по крайней мере, писать в Drawing.Image.

Спасибо


person derGral    schedule 19.07.2011    source источник


Ответы (2)


Вам следует проверить CUDA, если у вас есть графический процессор NVIDIA.

person Mark Segal    schedule 19.07.2011
comment
Спасибо, но это не совсем идеально. Целевая машина не исправлена, и я не хочу писать это для нескольких графических процессоров. - person derGral; 20.07.2011

Вы смотрели на XNA? Объект Texture2D может загружаться из потока памяти или из растрового файла, и вы можете либо получить данные из текстуры в виде массива, либо сохранить их в файл. Это должно иметь большую часть кода, который вам действительно нужно написать:

http://msdn.microsoft.com/en-us/library/bb313868(v=xnagamestudio.31).aspx

но есть много учебников xna по созданию пиксельных шейдеров, если вам нужно больше примеров... например, этот (http://blog.josack.com/2011/07/my-first-2d-pixel-shaders-part-1 .html)

person theoretical    schedule 19.07.2011
comment
Вероятно, это правильное направление, но я действительно надеялся, что не будет еще одного слоя. Я предполагаю, что XNA использует DirectX для выполнения операции, так можно ли это сделать более напрямую? - person derGral; 20.07.2011