Как преобразовать растровое изображение в int []? - PullRequest
1 голос
/ 16 декабря 2009

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

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 Ответ

1 голос
/ 16 декабря 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...