APP下载

J2ME程序手机屏幕分辨率自适应研究

2011-01-20曹郁辉

湖北工业职业技术学院学报 2011年2期
关键词:平铺显示屏分辨率

曹郁辉

(十堰职业技术学院党委工作部,湖北十堰442000)

J2ME(JAVA 2 Micro Edition)是为手机等消费类电子产品开发程序的JAVA语言平台,用它开发的程序可以不受设备的操作系统类型的限制。无论是Symbian、Microsoft windows、Android、Linux操作系统的智能手机还是不带操作系统的非智能手机,大都支持J2ME开发的程序的运行。因此J2ME开发的程序有很强的适应性和较长的生命力[1]。然而,近些年来,手机硬件的发展日新月异,无论是从手机CPU的速度、内存的大小、各种传感器的应用和新型显示技术的应用都有非常大的发展。而很多J2ME开发的程序没有考虑到这些发展变化而影响了这些程序的广泛应用。例如随着手机显示屏尺寸逐渐增大,分辨率逐渐增加,很多采用J2ME编写的软件由于采用固定分辨率,造成在较新型号手机上使用不便,甚至无法使用,大大缩短了软件的生命力。本文将讨论J2ME软件编程时适应各种手机显示屏分辨率的问题。

一、J2ME程序手机屏幕分辨率自适应

所谓J2ME程序手机屏幕分辨率是指无论在何种手机显示屏的分辨率下,程序都能自动调整,按照最适合当前分辨率的模式来显示程序运行的人机界面。市场上现有的手机,显示分辨率从相对低端的176×144像素到高端的iphone手机的960×640像素,相差是比较大的,而且还不断有显示屏尺寸更大、分辨率更高的手机推出,比如在本文写作过程中,已经有了分辨率为1280×720的手机。如果你希望自己编写的程序在这些机器中都能很好地运行,那么在编程的时候就应该考虑到,程序当中的界面,都能够适应各种不同的手机显示屏的分辨率。

要实现这种分辨率自适应,在使用J2ME编程的时候要考虑这样几点:(1)手机屏幕上显示的文字。(2)在程序当中,利用JAVA函数绘制的图形。(3)程序当中使用的外部图像文件。其中程序当中使用外部图像文件是最复杂,也是我们要重点考虑的。

手机屏幕上显示的文字在使用J2ME编程时是可以通过字号的设置控制其大小的。同时,同一个字号的文字会随着手机屏幕尺寸的增大显示得大一些。因此,文字在不同分辨率下显示时,矛盾并不突出。

在手机屏幕上显示的一些简单图形,如点、线、圆、矩形等,使用J2ME编程时可以利用现成的JAVA函数来进行绘制。绘制时,首先要规划好显示屏上显示的所有图形,它们相对于显示屏的大小以及图形间的相对位置。按照显示屏的比例来绘制图形,无论显示屏的分辨率如何改变,显示的图形也会随之而改变,能比较好地显示出来不变形。

由于利用JAVA函数绘制的图形有相当的局限性,只能画简单图形,不能胜任画面比较复杂的情况,所以很多时候我们不得不使用外部的图像文件。J2ME程序当中使用的外部图像文件都是点阵图像文件,它的特点是像素的数目是固定的,如果屏幕的分辨率发生变化,图像本身是不变的。对于这种图像,要想使之适应屏幕分辨率的变化,我们要根据屏幕分辨率的大小对图像进行适当的缩放。JAVA里没有图像缩放函数,要靠用户自己编写。

二、分辨率自适应的实现方法

1.利用JAVA函数绘制简单图形

下面是一个绘制屏幕上菜单选项的程序,菜单由简单的矩形构成:

LABELS.length为菜单项的数目,prefer-Width和preferHeight根据字体大小由另一个函数得出。可以看出,程序中所绘制的图形大小不是绝对值,会随着屏幕的大小变化而变化,能够适应不同手机显示屏的分辨率。

2.使用外部图像文件

在使用外部图像文件时,设计一个好的缩放函数很重要。下面给出一个图像缩放函数的例子:

函数说明:输入参数src为原始图像,destW为目标图像的宽,dest H为目标图像的高。在给出了原始图像后,该函数按照逐点绘制的方式,按指定的宽和高生成新图像。该函数在每次加载图像后使用,按照重新计算所得的destW和dest H来完成图像的缩放。该函数的优点是:可以保持原图像的透明度信息;缺点是:没有插值运算,放大后会产生比较明显的失真。

使用外部图像在程序设计时还要首先设定一个基准的分辨率,也就是该程序当中的图像最适合显示的分辨率是多少。比如一个程序当中的所有图像最初设计时是为了在240×320的分辨率下显示的,那么在屏幕分辨率为176×144的手机上显示就应该缩小,在屏幕分辨率为320×480的手机上显示就应该放大,这样就适应了屏幕的变化。这个基准分辨率是程序设计人员在编程时根据需要来进行选择的,这个程序主要用在哪个分辨率的机型上,就可以选择哪个分辨率。如果没有特定对象,可以选择用户使用最普遍的显示屏的分辨率。

三、要注意的事项

在对图像进行缩放时要注意,在J2ME使用的图像中,有些是作为平铺贴图使用的。所谓平铺贴图,是为了实现特定的纹理,将一张大图分割成一块块大小相同的小图像,小图像在使用时可以任意拼接。J2ME定义,作为平铺贴图的大图像的宽必须是小图像宽的整数倍,如果不是的话,在设定贴图时就会出错。在基准分辨率下满足条件的平铺贴图,如果经过缩小操作,由于小数部分舍入的原因,可能会出现问题。比如我们在编程时选择的基准分辨率是320×480,用于平铺贴图的大图的宽是300像素,小图的宽是50像素,如果当前手机显示屏的分辨率是240×320,那么平铺贴图就要进行缩小操作。如果直接按比例进行缩小,所得的平铺贴图大图宽(即destW)为225像素,小图宽38像素,大图宽不是小图宽的整数倍,显而易见,设定贴图时就会出错。为避免这种情况的发生,程序当中要有容错语句,可以先算出缩小后的小图的宽度,再用倍数去乘,得到大图的宽度。在缩放函数中使用这样倒推后得到的平铺贴图缩小后的宽度(即destW),就不会出错了。在这个例子中,我们算得小图的宽为38像素,大图的宽是小图的6倍,因此,缩放程序中的destW应该是38*6=228像素。

为适应显示屏分辨率的变化对图像进行缩放时还要注意显示屏的长宽比,不同分辨率的手机显示屏,它们的长宽比例是不一样的。如分辨率为240 ×320的显示屏,长宽比是3∶4;而分辨率为320× 480的显示屏长宽比是2∶3。在分辨率为240× 320的显示屏上全屏显示的图形,在分辨率为320× 480的显示屏上全屏显示时会有些变形。如果这种变形我们可以容忍,我们就不要管它,如果这种变形严重地影响了图像的真实性,或者不被允许,那么我们在缩放图像时就要按照原始的基准分辨率的长宽比来缩放图像。比如,在分辨率为240×320的显示屏上全屏显示的图像,如果保持长宽比,在分辨率为320×480的显示屏上显示的小大为320×426像素,这样显示才不会变形,但是在屏幕上会留有空白。

在进行程序设计时,也应当注意,对于图像适应显示屏分辨率的变化在实际使用过程当中也是有局限的。现有的手机显示屏大小差别比较大。适合某一个分辨率的图像如果过分缩小会难以分辨,如果过分放大又会出现失真。如果想让自己的手机程序做到分辨率自适应,一开始选择一个适当的基准分辨率也是非常重要的,有时候也要作出一点牺牲,干脆只针对特定的用户群,放弃对某些分辨率的支持,如不对低端的或不对特别高端的手机屏幕进行支持,或针对低端的手机、高端的手机分别推出不同的程序。

[1]Kim Tople.J2ME技术手册[M].北京:中国电力出版社,2003:13.

猜你喜欢

平铺显示屏分辨率
咏霜
一块布就是一个显示屏?
亲自动手做顶皇冠就算落单也不孤单
EM算法的参数分辨率
苍蝇迷恋显示屏
原生VS最大那些混淆视听的“分辨率”概念
清扫机器人对光伏发电量的提升分析
可折叠3D魔方
基于深度特征学习的图像超分辨率重建
一种改进的基于边缘加强超分辨率算法