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

Пиша програма за обработване на изображения на GPU. За това използвам 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