Как преобразовать растровое изображение в int[]?

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

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.

Есть у кого какие мысли по решению этой проблемы?

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


person João Cardoso    schedule 16.12.2009    source источник


Ответы (1)


Размер растрового изображения гарантированно кратен 4 байтам. Итак, int[] будет работать:

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

Однако это не облегчает получателю, я бы посоветовал вам использовать PixelFormat.Format32bppRgb, чтобы один пиксель был точно размером с int.

person Hans Passant    schedule 16.12.2009