针对16位EGA1色彩集合定义了一些常量。下面是gdi.h中的相关定义,显示了TRgb中R、G和B值的组合方式。
我们使用#define,而不是const TRgb KRgbWhite = TRgb(0xffffff)之类的代码,这是因为GCC 2.7.2并不支持在构建时初始化类常量。使用其中某个“常量”来初始化TRgb的开销不会高于“适当”使用 const TRgb的开销。画笔和画刷的所有CGraphicsContextColor规范都使用TRgb值。然后,图形设备内在地将这些TRgb值转换为与设备相关的色彩值。
使用度量和字体时,必须在调用 CGraphicsContext函数前转换到与设备相关的单位(像素和CFont)。对色彩也可以进行这种转换,但并不需要这样做,因为相比于像素的尺寸和字体的位图,色彩并没有多少设备相关性。
在许多情况下,具体的色彩值,例如KRgbBlack,非常有用。TLogicalColor中定义了一些逻辑色彩值,这些逻辑色彩值引用用于 UI 模式中的色彩,例如用于菜单、菜单加亮显示、工具栏按钮或窗口阴影中的色彩。由设备 OEM 确定这些逻辑值对应的物理色彩。相关的映射存储在CColorList对象中,它支持:
逻辑色彩到RGB色彩的映射,从资源文件中加载该映射,或者通过编程(www.cppentry.com)方式指定该映射;
系统和应用程序的独立区,由UID标识的部分,以及由枚举常量标识的逻辑色彩;
4级灰度和256色这两种模式的映射,如果屏幕模式支持16种或更多的色彩,则可以使用256色模式,这样看起来将比较美观。否则,就需要使用4级灰度模式。
应用程序可通过CEikonEnv::ColorList()函数访问色彩表。 必须了解某个设备支持多少种色彩。实际情况中,设备所支持的色彩数量不仅取决于设备本身,还取决于设备的当前显示模式。大多数设备都有首选的显示模式,并且一些设备还支持多种 显示模式:可以检查窗口服务器屏幕设备支持的显示模式,并将窗口设置为所需的显示模式,前提是该窗口支持这种显示模式。一些显示模式将比其他的显示模式消耗更多的电能,因此窗口服务器为任何可见的窗口把当前使用的显示模式改为消耗最小电能的显示模式。
可以使用任意的显示模式创建位图。将这些贴图到另一个位图上,或者以特殊的模式显示这些位图时,可以根据需要缩减或扩展位图数据,以此来匹配目标位图的显示模式。在 gdi.h 中,TDisplayMode枚举定义了Symbian操作系统支持的显示模式(见表17.3)。
根据当前可视窗口的需求以及硬件是否支持,窗口服务器将屏幕的显示模式设置为最适宜的模式。因此,“首选屏幕显示模式”将实现为“默认窗口显示模式”。可能需要在更佳的显示模式和更低的功耗之间进行平衡。在首选显示模式中生成 ROM 位图,从而在向屏幕贴图时,一般不需要进行位图转换。 如果当前设备上并不支持传递给 CGraphicsContext的色彩,则使用该设置上最接近的支持色彩。我们总是习惯于将实际的色彩向下映射为黑色、白色或并不怎么逼真的色彩上。获得实际的色彩,最好的方法是允许TDisplayMode映射执行这些工作。
最后,可能需要用户在绘制程序中选择一种颜色。一些 GUI 提供的控件可实现这一点,如UIQ中的CQikColorSelector。
必须在任何其他操作使用不支持的色彩前进行最接近色彩的转换,这些操作包括 XOR 等逻辑运算。这可能产生无法预料的影响,在窗口化的系统上,逻辑运算总是一个不确定的值—除了使用KRgbWhite的XOR运算外,该运算具有特定的用途,并且总是按照预期的方式执行。
在一些GDI定义中,经常会看到“面板(palette)”这个术语;在实现对任何色彩显示形式的支持(在 Symbian 操作系统 v5 中)之前,人们将面板添加到设计中。在添加色彩显示模型支持时,并不使用面板来优化用于 256色显示模式中的阴影等。相反,我们使用固定的Netscape色彩盒集合来实现这一点。这将减少API的复杂性,并且不会丢失类中任何有价值的设备特性。在只优化前台窗口的面板时,这样做也可以避免偶尔会在Window PC上看到的奇怪现象。这被证实是个明智的决定,因为256色显示模式从没有在真实的设备上使用过。
5.Web浏览
Web浏览技术通常会在目标无关性和尺寸无关性这两个主题上产生混淆。该技术在不断发展,但是对于打印和屏幕上的图形没有明显的区分,并且没有调整尺寸的一致方法。文本以html的格式指定—它与设备无关—而图形(gif、jpg 或 bmp)则以像素为单位指定。图形的物理尺寸将根据屏幕的分辨率而有所变化—对于具有较高分辨率的屏幕,图形将更小。文本尺寸和图形之间并没有明显的关系,这意味着它们在大多数浏览器上不会同时缩放。然而,Symbian 操作系统浏览器中有针对这些问题的解决方法,并且文本和图形可同时进行缩放。
【责任编辑:
董书 TEL:(010)68476606】