【问题标题】:How to convert a bitmap to int[]?如何将位图转换为 int[]?
【发布时间】:2009-12-16 18:37:22
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: marshalling byte access-violation


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2011-01-28
      • 2020-07-17
      相关资源
      最近更新 更多