gpt4 book ai didi

c# - System::Drawing::Bitmap 到 unsigned char *

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:43 26 4
gpt4 key购买 nike

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

我最初将框架作为 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

关于c# - System::Drawing::Bitmap 到 unsigned char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com