1

我正在编写一个程序来在 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。

有人有解决这个问题的想法吗?

提前致谢。

4

1 回答 1

1

位图保证是 4 个字节的倍数。所以 int[] 将起作用:

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

不过,这对接收器来说并不容易,我建议你使用 PixelFormat.Format32bppRgb 所以一个像素正好是一个 int 的大小。

于 2009-12-16T19:25:36.640 回答