系统::绘图::位图到无符号字符*

本文关键字:字符 无符号 位图 绘图 系统 | 更新日期: 2023-09-27 18:28:44

我有一个C#.NET库,可以从相机中获取帧。我需要将这些帧发送到从unsigned char*获取图像的本地应用程序。

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

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

然而,我得到了一个尺寸为11948的byte[]

这就是我如何从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*的正确方法是什么?

系统::绘图::位图到无符号字符*

这必须使用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