2009-12-16 2 views
1

Я пишу программу для обработки изображений на графическом процессоре. Для этого я использую CUDA.Net, но сожелению CUDA не распознает тип байт, в котором я был в состоянии хранить информацию пикселей, используя этот код:Как преобразовать растровое изображение в int []?

BitmapData bData = bmp.LockBits(new Rectangle(new Point(), bmp.Size), 
           ImageLockMode.ReadOnly, 
           PixelFormat.Format24bppRgb); 

     // number of bytes in the bitmap 
     byteCount = bData.Stride * (bmp.Height); 


     byte[] bmpBytes = new byte[byteCount]; 


     Marshal.Copy(bData.Scan0, bmpBytes, 0, byteCount); 

bmp.UnlockBits(bData); 

return bmpBytes; 

Моя проблема заключается в факт, что CUDA не принимает этот массив байтов, и если изменить его на тип int [], программа получает исключение AccessViolationException.

У кого-то есть мысли решить эту проблему?

Заранее спасибо.

ответ

1

Растровое изображение должно быть кратным 4 байтам. Так ИНТ [] будет работать:

int[] bytes = new int[byteCount/4]; 
    Marshal.Copy(bData.Scan0, bytes, 0, byteCount/4); 

Это не делает его легким для приемника, хотя, я предлагаю вам использовать PixelFormat.Format32bppRgb так один пиксель точно размером с междунар.

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