图片灰化

cocos2d-x 2.x 版本使用的灰化方法:Cocos2d-x 精灵变灰效果

 "#ifdef GL_ES \n \
precision mediump float; \n \
#endif \n \
uniform sampler2D u_texture; \n \
varying vec2 v_texCoord; \n \
varying vec4 v_fragmentColor; \n \
void main(void) \n \
{ \n \
// Convert to greyscale using NTSC weightings \n \
vec4 col = texture2D(u_texture, v_texCoord);  float grey = dot(col.rgb, vec3(0.299, 0.587, 0.114));  gl_FragColor = vec4(grey, grey, grey, col.a);   \n \
}";

cocos2d-x 3.0 版本使用的灰化方法:

sdk目录下的文件:\tests\cpp-tests\Resources\Shaders\example_greyScale.fsh

#ifdef GL_ES
precision mediump float;
#endif

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

uniform sampler2D CC_Texture0;

void main(void)
{
 vec4 c = texture2D(CC_Texture0, v_texCoord);
 gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b);
 gl_FragColor.w = c.w;
}


转自:PSCS3专家讲堂77灰度与位图颜色模式

我们可以观察一下RGB颜色通道,可以发现它们都是灰度图像,那么彩色图像转为灰度,到底应该由哪个通道来决定呢?这是一个问题哈。

 也许有的人会说,我可以随意取一个通道嘛。其实这样做,得到的结果往往不是最佳的。而PS在进行彩色到灰度处理的时候,在旧的版本中,往往是用默认算法一步到位,没有灵活性可言。

声明,以下内容较深,初学者可以看看,不一定现在就要理解:

 对于彩色转灰度,有一个很著名的心理学公式:
 灰度值 = R(红色值)*0.299 + G(绿色值)*0.587 + B(蓝色值)*0.114

在关文涛先生的《选择的艺术》一书中,把这个公式简单归纳为

30%红色值+59%绿色值+11%蓝色值

 不过似乎PS还有更多的模拟算法在里边,得到的值并不是完全一致的。
 我们不必去算颜色的具体值,只要知道,用默认的转灰度形式,得到的是不灵活的转换就可以了。

 我们可以利用CS3新增加的黑白调整来做这个工作。先把图像转为黑白图像(注意:模式还是RGB,但是图像是由黑白灰来表达,如要转为灰度模式,还要用到菜单进行转换),这样的话,我们就可以把图像调为自己想要的模样,再转为灰度啦。

 这个黑白调整选项真是个好东西,它把我们以前用通道计算得到结果的复杂方式,转化为一步到位。PS的功能是越来越强大了。


 初学者请在具有一定基础之后,再回来看下面的内容:

 以下数据引自“灰鹿”先生原创,供学有所长的朋友探讨,此公式尚无完全定论,还存在微小差异。

 关于彩色转为灰度图像,由于上述的公式得到的误差很大,所以有不少朋友进行了研究。最终得到比较接近的公式。

 公式原理,RGB图像转为Lab模式图,并将a和b通道填充128中间灰,(对Lab通道如不了解,可以看一下这个教程:点击观看81集:颜色模式-Lab)得到的结果可以发现,和彩色转为黑白得到的结果基本一致。经过灰鹿先生的计算得到下列公式:


 公式:
Gray = (R^2.2 * 0.213  + G^2.2 * 0.715  + B^2.2 * 0.072)^(1/2.2)

 K = (1-Gray/255)*100

下面是此公式抽样验证的结果,计算值(K)应四舍五入取值。验证时一定要设为sRGB模式/Gray Gamma 2.2,关闭“使用仿色”和“使用黑场补偿”。


 单击下面的链接,观看本节教程:

点击观看77集:颜色模式-灰度与位图



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值