总文件夹:http://blog.csdn.net/iloveas2014/article/details/38304477

1.3.3 HSB与RGB之间的互转公式及HSL和HSV对色彩属性理解的异同

首先,HSL和HSV对H的定义一致,公式例如以下:

max=min意味着R,G,B三个值始终相等,仅仅能是白,灰,黑这三类颜色了,色相值在这样的情况下没有不论什么意义,所以让它等于0。

然后,HSB模式将色相环等分成三个120度的区间(图 1.28)。

图 1.28色相环的区间分布

[0,60]U[300,360]为红色区间,[60,180]为绿色区间,[180,300]为蓝色区间。推断RGB颜色的H值位于哪个颜色区间也很easy,只要看哪个通道反射的色光最大就可以。红色被划分到了两側,所以当色相位于红色区间时要多加一个条件,但它并不复杂,由于H轴本身是环状结构,左側跟右側实际上是重合的,所以这一步的推断不过为了将计算出来的角度标准化了一下,使它落在[0, 360]的区间内而不至于出现负数。因此当max=r时,公式能够合并例如以下:

(60*(g-b)/(max-min)+360)%360。

可是敲代码的时候一般都还是用推断来处理,由于取余数的运行效率比較差。

然后看看HSL里面的L和S的计算方法:

可见,仅仅有max和min都取到通道的最大值,即要求R=G=B=255时,亮度才达到最大,换而言之,HSL模式里,仅仅有白色才是亮度最大的,这跟HSL的色彩空间示意图不谋而合。

max=min or l=0意味着R=G=B,这时候的颜色仅仅有白,灰,黑,自然就没有饱和度了。

而HSV中V和S的计算公式例如以下:

作为物理意义是亮度的V,它达到最大值的要求比HSL模式低,RGB三个通道中仅仅要有一个取到了255,亮度就达到最大值。这种差异,可能导致两种颜色的明暗差异在不同的模式描写叙述下出现不同的结果。即颜色A和颜色B出现 L(A)>L(B),可是V(A)<V(B)的现象。

饱和度为0的定义,两种模式没有区别,而饱和度的计算规则,也都以R,G,B通道值的差作为基本的决定因素,然后除以亮度来对结果进行标准化。然后,由于亮度计算的差异,L的色彩变化范围比V要大一倍,所以HSL模式的除数必须等于亮度的2倍才干够抵消,加上较明亮的颜色,HSV和HSL在饱和度方面没有达成共识,HSL模式的S公式就要写成分段函数了。

而HSV/HSL转RGB则是RGB转HSV/HSL的逆运算,尽管在一些极端条件下,这样的运算并不可逆,可是放心,这些问题不会影响到您对色彩的使用。

比方H250,S60,L100和H300,S50,L100,转到RGB都是R255,G255,B255,这时候转回HSL就是H0,S0,L100,值是变了,只是结果值始终都是白色。这跟地球在极点位置的经纬度处理很相似。

ActionScript3游戏中的图像编程(连载十七)的更多相关文章

  1. ActionScript3游戏中的图像编程(连载二十四)

    总文件夹:http://blog.csdn.net/iloveas2014/article/details/38304477 2.1.1 投影样式的制作 点击左側列表的"投影"系列 ...

  2. 原创教程“ActionScript3.0游戏中的图像编程”開始连载啦!

            经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方 ...

  3. 洗礼灵魂,修炼python(41)--巩固篇—从游戏《绝地求生-大逃杀》中回顾面向对象编程

    声明:本篇文章仅仅以游戏<绝地求生>作为一个参考话题来介绍面向对象编程,只是作为学术引用,其制作的非常简易的程序也不会作为商业用途,与蓝洞公司无关. <绝地求生>最近很火,笼络 ...

  4. Unity3D游戏开发之C#编程中常见数据结构的比较

    一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都 ...

  5. JavaScript游戏中的面向对象的设计

    简介: 从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句.在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计.本文将概述原 ...

  6. [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader

    高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...

  7. 超全面的.NET GDI+图形图像编程教程

    本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了 ...

  8. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  9. C#_GDI+详细教程(图形图像编程基础)

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...

随机推荐

  1. [置顶] 修改Android开机画面之rle制作

    第一个动画: Bootloader开机使用的图片是linux.bmp,长高分别是120*120,色度是32,所以可以拿相同格式图片替换,进行编译烧写即可. 第二个图片:内核logo 这个修改方式,我在 ...

  2. symfony2-不同bundle的entity的一对多关系

    重点:其实和普通一个bundle中一样,只是把entity地址写全就行. 例子: 表commentone (多方) 表shopone(一方) 在Userbundle中的Commentone实体对应关系

  3. 老男孩python第六期

    01 python s6 day7 上节回顾02 python s6 day7 SNMP使用03 python s6 day7 大型监控架构讲解04 python s6 day7 Redis使用05 ...

  4. ruiy_ocfs2

    http://docs.oracle.com/cd/E37670_01/E37355/html/ol_instcfg_ocfs2.html

  5. Google AdSense的CPC点击单价超百度联盟(2014)

    很久没有关注AdSense了,一是访问不太方便,二是网站投放AdSense广告相当少,估计每天收入都不到1美元,所以就懒得去看了,一般都是几个月才去看一看. AdSense还行吗? AdSense点击 ...

  6. 送给刚刚開始学cocos2d-x引擎 移植Android的同学

    刚刚開始学cocos2-x,不过依照教程把已经安了一般Android的开发环境的eclipse又一次升级到安装好cdt和ndk就花了我几十小时,差点都要放弃了. 參考博客 http://blog.cs ...

  7. Android乐学成语之自定义Adapter

    一.首先对Adapter概念深刻的了解 首先看看他的继承图

  8. Android核心基础

    第三代移动通讯技术(3rd Generation) ,支持高速数据传输的蜂窝移动通讯技术.3G与2G的主要区别是传输数据的速度. 1987年,第一台模拟制式手机(1G)问世,只能进行语音通话,型号:摩 ...

  9. iOS中UIWebView使用JS交互 - 机智的新手

    iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html & ...

  10. 不直接用NSLog

    公司中不直接使用NSLog,而是利用宏定义自己的打印函数,将该打印函数写在项目的.pch文件中.调试的时候往往用到好多打印,但发布的时候确不需要.(一下是在公司中的一些处理) 自定义NSLog 一,固 ...