最近在做PNG解码,获得的数据是RGBA,但用来写BMP图像的函数只具有写RGB功能,所以想将RGBA转成RGB;
其实带有A通道的图片解码之后得到额数据是 RGBA,如果直接将A通道的数据舍去,将会使写出的图像失真。可以采用如下方法进行转换;
1.将 R,-G-B-A数据归一化, 记为:Source.R, Source.G, Source.B, Source.A (记的用浮点型啊)
2..提供一个背景色,但同时也应归一化;比如白色背景BGcolur = 1;或者黑色背景 BGcolur =0;
3.目标数据RGB:
Target.R = BGcolur *(1-Source.A ) + Source.R*Source.A ;
Target.G = BGcolur *(1-Source.A ) + Source.G*Source.A ;
Target.B = BGcolur *(1-Source.A ) + Source.B*Source.A ;
3.最后将Target.R,Target.G,Target.B再乘以255
这是从维基百科里看到的,实验了,是可以的!
额 ,对灯发誓!!!
2..提供一个背景色,但同时也应归一化;比如白色背景BGcolur = 1;或者黑色背景 BGcolur =0;
3.目标数据RGB:
Target.R = BGcolur *(1-Source.A ) + Source.R*Source.A ;
Target.G = BGcolur *(1-Source.A ) + Source.G*Source.A ;
Target.B = BGcolur *(1-Source.A ) + Source.B*Source.A ;
3.最后将Target.R,Target.G,Target.B再乘以255
这是从维基百科里看到的,实验了,是可以的!
额 ,对灯发誓!!!