当前位置: 首页 > news >正文

ActionScript3游戏中的图像编程(连载十七)

总文件夹: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,值是变了,只是结果值始终都是白色。这跟地球在极点位置的经纬度处理很相似。

相关文章:

  • Telnet Windows Server时,提示NTLM authenticatio错误解决方法
  • 深入分析关于DHCP SNOOPING的设置
  • 关于 ACCESS 中插入操作的相关内容
  • 深挖BAT内部级别和薪资待遇,你敢看?(转)
  • 学习 WCF (4)--学会使用配置文件
  • 《3D Math Primer for Graphics and Game Development》读书笔记2
  • LAMP之php 与 mysql 配置(三)
  • 走进wordpress 详细说说template-loader.php
  • ubuntu的备份和还原
  • 【转】Android 带checkbox的listView 实现多选,全选,反选----解决checkbox错位问题
  • ACL访问控制列表及特殊权限
  • [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.5
  • Ubuntu APT使用指南
  • 6个常见的 PHP 安全性攻击
  • new/delete malloc/free深入剖析
  • [译]Python中的类属性与实例属性的区别
  • 2017届校招提前批面试回顾
  • Akka系列(七):Actor持久化之Akka persistence
  • co.js - 让异步代码同步化
  • CSS中外联样式表代表的含义
  • Hexo+码云+git快速搭建免费的静态Blog
  • mysql 数据库四种事务隔离级别
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Phpstorm怎样批量删除空行?
  • Rancher如何对接Ceph-RBD块存储
  • React Native移动开发实战-3-实现页面间的数据传递
  • vagrant 添加本地 box 安装 laravel homestead
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 配置 PM2 实现代码自动发布
  • 数据仓库的几种建模方法
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #### go map 底层结构 ####
  • #、%和$符号在OGNL表达式中经常出现
  • #Linux(权限管理)
  • (007)XHTML文档之标题——h1~h6
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (轉貼) UML中文FAQ (OO) (UML)
  • **PHP二维数组遍历时同时赋值
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Framework 4.6.2改进了WPF和安全性
  • .netcore 获取appsettings
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Data注解的作用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @SuppressLint(NewApi)和@TargetApi()的区别