之前写的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)