C#LockBits调整图片背景透明,替换颜色

本文介绍了如何使用C#的LockBits方法来优化图片处理,特别是将图片背景设置为透明的过程。传统的SetPixel方法在处理大图片时效率低下,而LockBits通过直接操作像素内存,显著提高了速度。示例代码展示了如何查找并设置RGB值接近的目标颜色为透明,实现了快速的背景透明化处理。虽然代码已能实现预期效果,但作者在尝试将其他颜色设为透明时遇到了问题,尚未找出原因。

 

 

之前写的C#图片处理类里面的更改图片透明度和替换图片中的指定颜色,用到的是SetPixel()方法,虽然目的是达到了,但是两个for循环下来,图片大的耗时很多,达不到每张图片100毫秒以内的要求,测试的图片都是712*500左右大小的,每张用SetPixel方法处理耗时700-800毫秒左右,几张1920*2000左右的图片达到了十几秒,很是心累,改完后最大的几张图片的耗时也只是1秒多些,基本不会处理这么大的图片的

代码如下:通过测试可用的

//将图片转为32位的位图

public static Bitmap ConvertTo32bpp(Image img)
        {
            var bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            using (var gr = Graphics.FromImage(bmp))
                gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
            return bmp;
        }

代码的思路汉荣原来的一样,通过对比内存内存储的RGB值,找到和目标颜色RGB误差范围内的值,将Alpha设为0,我以第一个值(应该是前4个byte即代码中的rgbValues[i]) 为背景是为参考系

#region 图片背景透明化 Conver_1(Bitmap img, int w, int h)
public static Bitmap Conver_1(Bitmap img, int w, int h)
        {
            Bitmap bt = new Bitmap(ConvertTo32bpp(img)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值