2013-11-24 5 views
0

То, что я пытаюсь сделать, это ускоритель фракталов с ускорением CUDA. Я хочу использовать C# для создания ui, но фрактальные изображения генерируются неуправляемым cuda c, скомпилированным в dll. Следуя некоторым учебным пособиям, мне удалось сделать взаимодействие с простыми данными, но мне трудно создать растровое изображение и передать его обратно в приложение C#.C# interop с неуправляемой dll

Я могу собрать буфер в dll с данными пикселя, успешно используя CUDA, но как я могу использовать указатель на этот буфер, чтобы сделать растровое изображение в приложении c sharp?

+1

Можете ли вы опубликовать код, показывающий растровое изображение, которое вы хотите увидеть на C#? – doctorlove

ответ

0

Один из некоторых способов сделать это:

Если ваш родной функции выглядит следующим образом:

void foo(void *bitmap); 

Вы можете использовать P/Invoke, чтобы объявить:

[DllImport(...)] 
public static unsafe void foo(void *bitmap); 

, а затем использовать это следующим образом:

unsafe 
{ 
    byte[] buffer = new byte[...]; 
    fixed (void *pBuffer = buffer) 
    { 
     foo(pBuffer); 
    } 
} 

Обратите внимание, что вы должны разрешить небезопасный код (в настройках проекта, вкладка «Сборка»).

+0

Спасибо. Последующий вопрос, как использовать этот буфер для создания растрового изображения, которое я могу использовать для pictureBox? Извините, если этот вопрос кажется глупее, чем первый, но я новичок в C#. –

+0

Я не уверен, как вы это делаете в WinForms. Я вижу, что элемент управления PictureBox имеет свойство с именем Image, которое вы должны установить. Вы можете создать объект изображения из массива байтов, как описано здесь: http://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv – MaMazav

Смежные вопросы