1

我有一个从相机抓取帧的 C# .NET 库。我需要将这些帧发送到从unsigned char*.

我最初将帧作为System::Drawing::Bitmap.

到目前为止,我可以byte[]Bitmap. 我的测试是使用分辨率为 400*234 的图像完成的,我应该获得 400*234*3 字节才能达到 RGB 图像所需的 24bpp。

但是,我得到byte[]的尺寸为 11948。

这就是我转换为Bitmap的方式byte[]

private static byte[] ImageToByte(Bitmap img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

转换System::Drawing::Bitmap为 RGB的正确方法是什么unsigned char*

4

1 回答 1

1

这必须使用 lockBits 方法来完成,这是一个代码示例:

    Rectangle rect = new Rectangle(0, 0, m_bitmap.Width, m_bitmap.Height);
    BitmapData bmpData = m_bitmap.LockBits(rect, ImageLockMode.ReadOnly,
        m_bitmap.PixelFormat);

    IntPtr ptr = bmpData.Scan0;
    int bytes = Math.Abs(bmpData.Stride) * m_bitmap.Height;
    byte[] rgbValues = new byte[bytes];
    Marshal.Copy(ptr, rgbValues, 0, bytes);
    m_bitmap.UnlockBits(bmpData);
    GCHandle handle = GCHandle::Alloc(rgbValues, GCHandleType::Pinned);
    unsigned char * data = (unsigned char*) (void*) handle.AddrOfPinnedObject();
    //do whatever with data
于 2013-08-30T11:19:01.187 回答