关于vc将图片进行灰度化的程序原理

关于vc将图片进行灰度化的程序原理,第1张

24位色位图,一个像素是用3个字节表示,每个字节分别表示R、G、B通道的值(红绿蓝)、组合成实际颜色。

这段程序就是遍历像素点,每种颜色按权值运算,转换为1个字节的灰度值(256级灰度),关键就是这句:

buf2[x] = (BYTE)(0.11*buf[i] + 0.59*buf[i+1] + 0.30*buf[i+2])

这代码写的很低效,不过还算清晰。

灰度处理那个很简单吧,基本上C#都自动帮你做了,你那代码就是手动遍历其中每个像素然后读取其灰度值(这里代码偷懒直接让C#帮忙计算了)然后重新把像素设置为RGB都是灰度值的颜色而已。

二值化的其实也不复杂,也是逐个遍历像素,判断某个像素的亮度是否大于给定阈值,如果大于则设置为白色否则设置为黑色。唯一有点麻烦的是要把8个像素合并到一个字节里面,于是代码里面搞了个scan数组,然后八个像素为一组填进去,每个像素占字节的一个位(白1黑0)。使用位运算0x80

>>

(x

%

8)保证像素从左到右依次保存在字节的8个位上。你这个二值化代码回填像素信息的时候用的是Marshal的字节拷贝而已,你只要知道了位图的结构这个理解也很简单。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12141167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存