人气 218

[行业观察] 将RGB值转换为灰度值的简单算法 [复制链接]

九艺网 2017-3-10 17:00:54

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
[table][tr][td] 使场景或精灵以灰度的形式显示,这是一般游戏制作中常常用到的效果,如:战棋游戏中当一个角色被使用过后,通常就会变成灰色,代表本回合已不能行动了;《仙剑》中回忆彩蝶的部分是用整屏的灰色来表现的?(记的不太清楚,太久了^_^);还有很多很多例子……
  将RGB值转换为灰度的过程应该是在程序中实现的(至少我是这么认为的)。其实这是非常简单的,基本原理就是将一个点的RGB值分开来求和,然后除以3,把得到的值再分别付给RGB,用公式表示如下:
R = G = B = 0.3R + 0.6G + 0.1B; //第二版改正后的公式
//第一版中的错误公式是 R = G = B = ( R + G + B ) / 3;

  在实际编程应用中又可分为8位、16位和24位三种情况,下面进行一一介绍:
  一、首先说最简单的24位点的转换,24位点的RGB均匀分布,所以分离和合成都较为简单,代码如下:


//=======24位转换============
int gMask=0x00ff00; //绿色掩码
int bMask=0x0000ff; //兰色掩码

int RGB24toGray(int sour)
{
    int r,g,b,t; //临时变量

    r=(sour>>16);
    g=(sour & gMask) >>8;
    b=sour & bMask;
    t=(r*3+g*6+b)/10; //第二版改正的地方

<p><span class="p1"><font face="宋体" color="#99ccff" size="2">    return (t GMove;
    b= BMask & sour;
    t = (r*3+b*6+g)/10; //第二版改正的地方
    return (t
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-19 18:25 , Processed in 0.053748 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.