第一章 基础概念和数据结构
1 基础概念和数据结构
1.1颜色表示
1.1.1 RGB 表示法
RGB颜色表示法是一种基于三基色原理的色彩表示方法。所谓三基色原理是指绝大部分颜色都可以用R(红),G(绿),B(蓝)三种基本颜色按照一定的比例混合得到。目前的绝大部分电子设备都是采用RBG来表示颜色的。因此,Android系统中也是用RGB来表示颜色。
根据每一中颜色表示的数据长度不同,Android中常用的RGB像素格式主要有:
ARGB8888:用4个字节表示一种颜色。其中最高8位表示和背景色的混合系数。剩下三个字节分别表示一种颜色。所以一共可以表示:256x256x256种颜色。
RGB888: 用三个自己表示一种颜色。和ARGB的区别仅在于没有透明系数。
RGB565: 用两个自己表示一种颜色。一共可以表示32x64x32种颜色。
在后文可以看到,当我们加载图像时,就需要指定图像的像素格式。
1.1.2 HSI 表示法
HSI色彩空间是一种比较符合人的视觉系统的感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。
色调H(Hue):表示不同的颜色,如红色、绿色、蓝色等。它也可表示一定范围的颜色,如暖色、冷色等。
饱和度S(Saturation): 表示颜色的纯度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
强度I(Intensity): 对应成像亮度和图像灰度,是颜色的明亮程度。
HSI 表示方法在数字图像处理软件中应用比较广泛。
1.1.3 YUV表示法
YUV是一种广泛应用于电视,广播,视频领域的颜色表示方法。
其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
在Android的多媒体模块中,视频解码器的输出格式就是YUV。
1.2像素
像素是数字图像的最基本单位,一个像素对应着一个点。通常我们说一个手机的分辨率是1024x768,就是说在长轴方向有1024个像素,而在短轴方向上有768个像素。一个像素表示一个颜色值,在Android中主要使用RGB表示法。1.1.1节中描述了android中最常用的几种像素表示格式。
Andorid系统为了便于开发者实现在不同设备上一致性较好的应用程序,定义了一些相关的基本概念并建议开发者在开发过程中使用,现简述如下:
pixel:像素,是一个逻辑单位。一个像素可以认为就是一个点。
dp/dip:物理长度单位。一个dp等于160分之一英寸。而一英寸等于2.54厘米。就是说1dp =0.00625 inch = 0.015875 cm。
dpi:像素密度,是英文dotper inch的缩写,翻译过来就是一英寸多少个点。显然,越精细的屏幕,dpi就越高,显示效果就越好。
dp 和 pixel 的换算关系为:
px =dp * (dpi/160).
dp=(px*160)/dpi.
ppi:像素密度,是英文pixelper inch的缩写,翻译过来就是一英寸多少像素。和dpi是一个含义。ppi常用于显示领域。
屏幕尺寸:指屏幕的大小,通常说一个手机是4.3寸的,就是指屏幕尺寸为4.3英寸。注意,这个4.3指的是手机屏幕对角线的长度。家里的电视说多少寸的,和这个是一个原理,也是对角线的长度。
分辨率:我们说一个手机的分辨率是854x480,首先是以像素作为单位的。也就是说这个手机的长边能显示854个点,短边能显示480个点。但是这个854x480的手机到底是几寸的,还要看屏幕显示密度,也就是dpi/ppi。分辨率和显示密度共同决定了手机的屏幕尺寸。
1.3 位图
计算机上表示图像的方法主要有两种:位图(又称点阵图,光栅图)和矢量图。
矢量图指用一系列的线段和曲线描述的图像。常见的矢量图格式有Adobe Illustrator的*.AI、*.EPS和SVG、AutoCAD的*.dwg和dxf、Corel DRAW的*.cdr、windows标准图元文件*.wmf和增强型图元文件*.emf等等。矢量图的优点是缩放无质量损失,存储空间小,便于转换成位图等优点。
位图是用大量的点阵来描述图像。每个点表示一种颜色,称为一个像素。常见的位图格式有:*.bmp、*.pcx、*.gif、*.jpg、*.tif、*.pcd、*.psd、*.cpt。Android系统中目前主要使用位图进行各种显示。
1.4 画布(Canvas)
顾名思义,画布就是作画的地方。Android中的3D图形引擎是通过OpenGLES实现的。而2D图形引擎就是通过Canvas封装的一系列的接口实现的。
画布实现的基本功能有:基本图形的绘制,如:直线,曲线,点等等,位图的显示,画布剪裁,画布的几何变换,用来实现移动,缩放,旋转等功能。
要在Android系统中使用画布作画,需要具备四个基本要素:
(1) 一个位图,用来最终保存在画布上绘制的内容。
(2)一张画布,用来进行绘制操作。
(3)基本绘制元素,就是想要往画布上绘制的内容。
(4)画笔,用来定义绘制图形的颜色,线型等基本内容。
画布对应了android.graphics包中的Canvas类。
1.5 Drawable
drawable 是android系统中被定义为仅用于显示的视觉元素。通常用于控件的背景图片或者作为图标。通常在XML文件中定义。
drawabled对应了android.graphics中的Drawable类。Drawable有很多子类分别实现不同的显示功能,后文会详细描述。