总文件夹: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. Spring起步(一)Building a RESTful Web Service

    http://spring.io/guides/gs/rest-service/ 先放链接. 这个很小很小的一个功课,我却遇到了各种各样的奇葩错误,折腾了两天才弄好. 想要开始的话,需要一些准备工具 ...

  2. 查看、修改oracle字符集,查看oracle版本

    1.查看数据库字符集 数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 客户端字符集环境select * fr ...

  3. DatabaseMetaData的用法(转)

    http://blog.csdn.net/sdliubo/article/details/6546889

  4. Android开发笔记--hello world 和目录结构

    原文:Android开发笔记--hello world 和目录结构 每接触一个新东西 都有一个hello world的例子. 1.新建项目 2.配置AVD AVD 没有要新建个,如果不能创建 运行SD ...

  5. Hash 表详解(哈希表)

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...

  6. IE 中开发,兼容与性能测试工具汇总

    前言 对于开发者来说, IE的兼容性是最让人头疼的. 因为是微软的产品, 且绑定在操作系统上, 所以IE的占用率还是相当大, 对于开发者来说, 这部分的兼容的考虑就不可避免了. 对于IE 的各版本来说 ...

  7. Introduction to Probability (5) Continus random variable

    CONTINUOUS RANDOM VARIABLES AND PDFS  连续的随机变量,顾名思义.就是随机变量的取值范围是连续的值,比如汽车的速度.气温.假设我们要利用这些參数来建模.那么就须要引 ...

  8. Linux下并发网络设计之I/O复用

    I/O 流: 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套接字,还是管道,我们都可以把他们看作流. 之后我们来讨论I/O的操作 ...

  9. MFC下DLL编程(图解)

    DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种扩展,也是软件共享和重用的传 ...

  10. Hadoop MR Job 关于如何控制Map Task 数量

    整理下,基本分两个方式: 一.对于大量大文件(大于block块设置的大小) 增大minSize,即增大mapred.min.split.size的值,原因:splitsize=max(minisize ...