C#使用Bitmap.lockBits注意问题

C#中使用Bitmap.lockBits时,图像数据会被按4字节对齐,可能导致第三方算法解析错误。解决方法是手动去除多余字节,确保数据正确传递给第三方库。示例代码展示了如何复制并去除对齐字节,以避免图片畸变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值