颜色基本概念和颜色位移

颜色的基本概念: RGB中0x000000是黑色,0xffffff是白色; Alpha当0x00时候是完全透明的,0xff是完全不透明的
颜色的深度,就是一个像素用多少位来表示,一般图像为8位深度,也就是2(^8) = 256种颜色。如果图像深度为24位,那就是2(^24)=
16777216种颜色称之为真彩色。虽然颜色的深度为8位,但是也不是说R只有8种,G只有8种,B只有4种颜色,也不是说R只能取0x00~0x07, 而是将这256种常用颜色赋值给一个unsigned int类型的整数(alpha位也是必须的),R位可能是0x00~0xff,所以到 内存里面还是要消耗一个unsigned int的整型来存放一个像素颜色,而颜色的深度只能在磁盘空间或者网络存储中减少存储空间

颜色在内存中用调色板,可以有效的减少内存中的占用,比如用一个unsigned char来表示一个颜色索引,索引到调色板

颜色位移的例子:
uint32_t Color::to_ARGB32() const {

 uint32_t c=(uint8_t)(a*255); // 例如0x0000007F
 c<<=8;      // 0x00007F00
 c|=(uint8_t)(r*255);    // 0x00007F10
 c<<=8;   // 0x007F1000
 c|=(uint8_t)(g*255);   // 0x007F1011
 c<<=8;   // 0x7F101100
 c|=(uint8_t)(b*255);   // 0x7F101112

unsigned char red = (unsigned char)(color >> 16);
int nRed = (int)red; // 输出16

 return c; // 0x7F101112
}
// 总结:   
// 1. C/C++语言的位移运算不需要考虑内存存放的大小端,因为这个是对逻辑上十六进制数值的位移, 直接16进制左右移动即可。
//   2.小转大,大左移<<填充:类型的转换,将小类型转换为大类型,只需要声明一块大数据类型的空间,然后左移填充各个小的数据类型。
//   3.大转小,大右移>>截取:大的转换为小的先右移,然后直接强制类型转换截取,或者格式截取。

左右移动只是数值上的操作,ARGB颜色格式在内存中数值就是一个unsigned int整型:ARGB;存储方式在内存中的由底地址到高地址为:BGRA的字节顺序。
左右移动只是改变大数据的值,地址并不改变。输出是<<,输入是>>。
// 4. 网络上的数据,需要先转换为主机字节顺序,然后对主机数据进行16进制处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 3D NGUI实战教程 完整版 第1章 初识NGUI 1.1 游戏UI开发介绍 1.1.1 什么是游戏UI 1.1.2 UI为何如此重要 1.1.3 UI开发的流程 1.1.4 UI开发的难点 1.2 什么是NGUI 1.2.1 NGUI插件介绍 1.2.2 NGUI的强大优势 第2章 NGUI基础 2.1 导入NGUI插件 2.1.1 NGUI版本介绍 2.1.2 NGUI的下载和购买 2.1.3 导入NGUI插件应用 2.1.4 导入常见问题 2.2 认识基本的UI资源 2.2.1 什么是UI精灵(Sprite) 2.2.2 什么是UI图集(Atlas) 2.2.3 什么是UI贴图(Texture) 2.2.4 什么是UI标签(Label) 2.2.5 什么是UI字体(Font) 2.3 制作第一个UI图集 2.3.1 学会解剖UI的资源结构 2.3.2 如何导入切好的美术资源 2.3.3 用Atlas Maker制作图集 2.4 制作第一个UI字体 2.4.1 为什么要制作UI字体 2.4.2 静态字体和动态字体 2.4.3 制作静态字体介绍 2.4.4 制作动态字体介绍 2.5 创建第一个UI 2.5.1 创建一个2D UI 2.5 .2 创建一个3D UI 2.5.3 了解UIRoot、UIPanel和UICamera组件 2.6 2DUI和3DUI的工作原理 2.6.1 2DUI的工作原理 2.6.2 3DUI的工作原理 2.6.3 如何判断该选择哪一种UI 2.7 深度(Depth)概念 2.7.1 强化对深度的理解 2.7.2 小心相机的深度 第3章 核心组件 3.1 什么是UI控件 3.2 制作精灵(UISprite) 3.2.1 怎样判断是否应该使用精灵 3.2.2 创建精灵 3.2.3 Sprite组件的设置 3.3 制作标签(Label) 3.3.1 怎样判断是否应当使用标签 3.3.2 创建标签 3.3.3 Label的文字设置 3.4 制作UI纹理(UITexture) 3.4.1 什么情况下使用UITexture 3.4.2 创建纹理 3.4.3 纹理的设置 3.5 制作按钮(Button) 3.5.1 怎样判断应该使用按钮 3.5.2 创建按钮 3.5.3 核心组件BoxCollider 3.5.4 核心组件UIButton 3.5.5 制作按钮的放缩动画 3.5.6 制作按钮的偏移动画 3.5.7 制作按钮的旋转动画 3.5.8 添加按钮单击音效 3.5.9 任何事物都可以变成按钮,不仅仅是UI 3.6 制作进度条(UISlider) 3.6.1 怎样判断是否应当使用进度条 3.6.2 创建进度条 3.6.3 核心组件UISlider设置 3.6.4 进度条的BoxCollider说明 3.7 制作输入框(Input) 3.7.1 怎样判断是否应当使用输入框 3.7.2 创建输入框 3.7.3 核心组件Input设置 3.7.4 输入框使用的一些注意事项 3.8 制作滚动视图(ScrollView) 3.8.1 怎样判断是否应当使用滚动视图 3.8.2 创建滚动视图 3.8.3 滚动视图核心组件UIPanel 3.8.4 滚动视图核心组件UIScrollView 3.8.5 创建一个拖动条 3.8.6 拖动条说明 3.8.7 让视图内的内容可以被拖动 3.8.8 制作滚动视图时的注意事项 3.9 制作复选框(Toggle) 3.9.1 怎样判断是否应当使用复选框 3.9.2 创建复选框 3.9.3 复选框的核心组件UIToggle 3.10 制作下拉菜单(PopupList) 3.10.1 怎样判断是否应当使用下拉菜单 3.10.2 创建下拉菜单 3.10.3 显示当前选中的选项 3.10.4 下拉菜单核心组件PopupList 3.10.5 制作下拉菜单的注意事项 第4章 UI动画 4.1 常见的两种UI动画介绍 4.1.1 要区分UI动画和UI特效两个概念 4.1.2 关于Tween动画 4.1.3 关于Animation动画 4.2 渐隐渐现动画(透明度动画) 4.2.1 透明度动画的介绍和应用 4.2.2 使用透明度动画TweenAlpha 4.2.3 使用透明度动画的注意点 4.3 颜色变化动画(变色动画) 4.3.1 变色动画的介绍和应用 4.3.2 使用颜色动画TweenColor 4.3.3 使用颜色动画的注意点 4.4 位置变换动画(位移动画) 4.4.1 位移动画的介绍和应用 4.4.2 使用位移动画TweenPosition 4.4.3 使用位移动画的注意点 4.5 旋转变化动画(旋转动画) 4.5.1 旋转动画的介绍和应用 4.5.2 使用旋转动画TweenRotation 4.5.3 使用旋转动画的注意点 4.6 大小变化动画(放缩动画) 4.6.1 放缩动画的介绍和应用 4.6.2 使用放缩动画TweenScale 4.6.3 使用放缩动画的注意点 4.7 Tween动画总结 4.8 动画控制组件UIPlayTween 4.8.1 为什么要用UIPlayTween 4.8.2 动画核心组件UIPlayTween讲解 4.8.3 使用UIPlayTween的注意事项 4.9 动画控制组件UIPlayAnimation 4.9.1 为什么要用UIPlayAnimation 4.9.2 为UI添加Animation组件 4.9.3 动画核心组件UIPlayAnimation讲解 4.9.4 使用UIPlayAnimation注意事项 第5章 其他组件 5.1 使用Toggle制作页签 5.1.1 页签的工作原理 5.1.2 一个完整的页签界面 5.1.3 制作两个页签按钮 5.1.4 使用ToggleObjects来记录页签内容 5.1.5 制作页签注意事项 5.2 拖动摄像机来浏览超大界面 5.2.1 拖动相机功能的介绍和应用 5.2.2 核心原理和组件介绍 5.2.3 拖动相机浏览超大界面的注意事项 5.3 使用Grid自动排列UI 5.3.1 自动排列UI的应用 5.3.2 自动排列UI核心组件Grid介绍 5.4 使用DragObject直接拖动物体 5.5 让玩家通过拖动自由改变控件大小 5.6 制作序列帧精灵动画(SpriteAnimation) 5.6.1 什么是序列帧精灵动画 5.6.2 SpriteAnimation组件 第6章 NGUI实战进阶 6.1 UI开发核心问题--UI随屏幕自适应 6.1.1 屏幕分辨率对UI适配的影响 6.1.2 主流设备的屏幕分辨率 6.1.3 自适应核心组件Anchor的使用 6.1.4 使用Anchor的注意事项 6.1.5 正式开发UI之前必须明确的几个问题 6.2 UI元素的相对自适应 6.2.1 什么是UI元素的相对自适应 6.2.2 Anchors的介绍及使用 6.2.3 使用Anchors的范例:背景图的全屏适配 6.2.4 使用Anchors的注意事项 6.3 多摄像机同时协作运行 6.3.1 摄像的渲染层的概念 6.3.2 多摄像机协作的应用范围 6.3.3 如何创建多个UI摄像机 6.3.4 多摄像机协作的注意事项 6.4 巧用九宫格以减少UI资源量 6.4.1 项目安装包大小对项目的影响
JavaScript电子书,包括了JavaScript的大部分知识,可以帮助读者快速入门。内容如下: 第1章 JavaScript语言概述 1.1 JavaScript是什么 1.1.1 JavaScript简史 1.1.2 JavaScript有何特点 1.2 JavaScript能做什么 1.2.1 表单数据合法性验证 1.2.2 页面特效 1.2.3 交互式菜单 1.2.4 动态页面 1.2.5 数值计算 1.3 JavaScript编程起步 1.3.1 “Hello World!”程序 1.3.2 选择JavaScript脚本编辑器 1.4 如何引入JavaScript脚本代码 1.4.1 通过与标记对引入 1.4.2 通过标记的src属性引入 1.4.3 通过JavaScript伪URL引入 1.4.4 通过HTML文档事件处理程序引入 1.5 嵌入JavaScript脚本代码的位置 1.5.1 在与标记对之间放置 1.5.2 在与标记对之间放置 1.5.3 在两个标记对之间混合放置 1.6 选择合适的浏览器 1.7 处理不支持JavaScript脚本的情况 1.7.1 使用标记对直接屏蔽法 1.7.2 使用和标记对给出提示信息 1.8 JavaScript的实现基础 1.8.1 ECMAScript 1.8.2 DOM 1.8.3 BOM 1.9 客户端与服务器端脚本 1.10 JavaScript与JScript、 VBScript 1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 2.2 数值类型 2.2.1 整型和浮点数值 2.2.2 八进制和十六进制 2.3 变量 2.3.1 变量标识符 2.3.2 变量申明 2.3.3 变量作用域 2.4 弱类型 2.5 基本数据类型 2.5.1 Number型 2.5.2 String型 2.5.3 Boolean型 2.5.4 Undefined型 2.5.5 Null型 2.5.6 Function型 2.6 组合类型 2.6.1 Array型 2.6.2 Object型 2.7 运算符 2.7.1 赋值运算符 2.7.2 基本数学运算符 2.7.3 位运算符 2.7.4 位移运算符 2.7.5 自加和自减 2.7.6 比较运算符 2.7.7 逻辑运算符 2.7.8 逗号运算符 2.7.9 空运算符 2.7.10 ?...:运算符 2.7.11 对象运算符 2.7.12 typeof运算符 2.7.13 运算符优先级 2.8 核心语句 2.8.1 基本处理流程 2.8.2 if条件假设语句 2.8.3 switch流程控制语句 2.8.4 for循环语句 2.8.5 while和do-while循环语句 2.8.6 使用break和continue进行循坏控制 2.8.7 with对象操作语句 2.8.8 使用for…in进行对象循坏 2.8.9 含标签的语句 2.9 函数 2.9.1 函数的基本组成 2.9.2 全局函数与局部函数 2.9.3 作为对象的函数 2.9.4 函数递归调用 2.9.5 语言注释语句 2.9.6 函数应用注意事项 2.10 本章小结 第3章 JavaScript事件处理 3.1 什么是事件 3.2 HTML文档事件 3.2.1 事件捆绑 3.2.2 浏览器事件 3.2.3 HTML元素事件 3.2.4 IE扩展的事件 3.3 JavaScript如何处理事件 3.3.1 匿名函数 3.3.2 显式声明 3.3.3 手工触发 3.4 事件处理器的返回值 3.5 事件处理器设置的灵活性 3.6 现代事件模型与Event对象 3.7 IE4中的Event对象 3.7.1 对象属性 3.7.2 事件上溯 3.7.3 阻止事件上溯 3.7.4 事件改向 3.8 NN4中的Event对象 3.8.1 对象属性 3.8.2 事件捕获 3.8.3 关闭事件捕获 3.8.4 事件传递 3.9 DOM的解决之道

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值