C#中使用Bitmap.lockBits可以直接将bitmap中的托管内存直接转为非托管内存。但是使用Bitmap.lockBits会存在自动字节对齐问题,将bitmap中的图像的每行数据按4字节对齐,不足的补齐。在把此非托管内存传入到第三方算法库中后,第三方仍按照原本图像宽,高解析,就会使解析出来的图片存在畸变,因此为保证第三方解析图片无误,应该在传入前将多出的对齐字节去除,然后传入。
示例代码:
问题代码:
Bitamp chassis;
Rectangle rect = new Rectangle(0, 0, chassis.Width, chassis.Height);
System.Drawing.Imaging.BitmapData bmpData = chassis.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, chassis.PixelFormat);
IntPtr ptrImage = bmpData.Scan0;
MvsImage img = MvsImage.GetInstance();
img.Width = chassis.Width;
img.Height = chassis.Height;
img.ImageData = ptrImage ;
img.Type = Convert.ToInt32(MvsImgType.MVS_IMGTP_UITL_BGR);
img.DataType = Convert.ToInt32(MvsImgDataType.M