应用笔记 · 2023年3月19日

C#将图片特定颜色替换成另一种颜色

本文转自 使用C#实现对图片内某种颜色的替换 – 知乎 (zhihu.com)

效果图:

图片处理

(原图) (处理后1) (处理后2)

证件照换背景色


程序很简单,大体结构如下:

核心代码如下:

 

代码说明:

通过LockBits方法来锁定系统内存中现有的bitmap位图,使其可以用编程的方式进行更改.然后通过用bitmapdata的Scan0属性来找到位图第一个像素数据的位置,进而通过bitmapdata的Stride属性来得到位图的扫描宽度(和图片的width属性不一样,Stride是内存中实际位图每行的宽度,存在一个补齐为4的倍数).然后通过宽度和高度的乘积得到位图在内存中占有的字节(byte)数组大小,进而用Marshal.Copy方法从内存中得到这些位图的像素数据,然后采用for循环去遍历每一个像素(4字节,顺序是bgrAlpha)上的颜色数值和要替换的颜色数值的差的绝对值是否在设定的容差范围内,如果在就用替换的颜色数值去覆盖原有颜色数值.

程序地址:

github.com/JingChao94/I

参考资料:

docs.microsoft.com/zh-c