本文共 3932 字,大约阅读时间需要 13 分钟。
预告:j2medev.com将开始整理各个版面的有价值问题,并以PDF格式集结,敬请期待。
出品商 | 产品名称 | 产品版本 |
J2medev.com | 版面有价值的问题合集 | 0.1 |
j2medev.com之“用户界面和多媒体”版面
有价值问题的整理
Version | Date | Creator | Description |
1.0.0.1 | 2006-4-4 | 郑昀 | 草稿 |
1.0.0.2 | 2006-4-6 | 郑昀 | 第二稿 |
关键词 | 详细描述 |
| |
SonyEricsson T630 | 该款手机的参数:索尼爱立信 T630 SonyEricssonT630R401 ProfileMIDP-1.0 ConfigurationCLDC-1.0。 “据我所知,不可以实现全屏显示。” --- lulei204 |
| |
SonyEricsson K700c | k700c 直接用nokia的FullCanvas,可以全屏176 x 220。 k700c用midp2.0的那个this.setFullScreenMode(true);也是可以全屏的,176x220。 k700c直接用nokia的FullCanvas全屏好像是176*208,直接拿nokia60上的程序可以直接放进去。键值和60的也是相同的,只是多了一个返回键,我忘了值是多少了。用2.0的GameCanvas大小是176*220。 --- lulei204 |
| |
不使用FullCanvas实现全屏的方法 | 为了用标准的SUN WTK2.1开发能兼容各种机型的MIDP2.0游戏,会遇到一个奇怪的全屏问题,在K700上好好的,到了Nokia上居然死活显示一半,费了一番功夫后,终于不用FullCanvas实现了兼容K700和Nokia的全屏显示,方法如下: 在索爱的K700上,实现全屏很简单,如下写法就可以了: public Canvas1() { super(false); this.setFullScreenMode(true); this.width=getWidth(); this.height=getHeight(); } 得到的屏幕大小是176*220。 Nokia上就比较奇怪了,这种方式取得的width和height居然是176*144。 需要加以下代码修正一下: if(width>=176) { if(height<208) { height=208; } } 绘图部分都以width和height为基准。 另外canvas1不能继承系统的GameCanvas,因为系统GameCanvas里的缓冲图还是176*144的,画出来就只能是半屏,我用j2me polish里的GameCanvas修改一下后,放到src里代替系统GameCanvas就OK了。 修正过的GameCanvas代码如下: http://www.j2medev.com/bbs/dispbbs.asp? BoardID=19&ID=3218&replyID=&skin=1 ---alexhy | ||
FullCanvas和setFullScreenMode()的区别 | setFullScreenMode用于MIDP2.0设备上。com.nokia.mid.ui.FullCanvas是Nokia UI API 1.1的包,用于MIDP2.0设备上,SonyEricsson手机也支持。
“FullCanvas是肯定可以实现全屏幕显示的,但是MIDP2.0里面的setFullScreenMode()只是实现为尽量使用最大的屏幕空间,但是不一定是全屏幕,要看各个手机的实现。” ---mingjava “FullCanvas不能加Command;setFullScreenMode(true)可以加上Command()。只是我加上一个按键时,却不管把它设在哪里,只能是右键响应。” ---风过留痕 | ||
FullCanvas和Canvas,GameCanvas分别有什么不同 | “FullCanvas是Canvas的子类,实现全屏的功能,而且把按键针对nokia的手机进行了映射。其他没有什么区别。” ---migjava “GameCanvas也是Canvas的子类,自MIDP2.0起提供,专门针对游戏增加了一些功能。在按键和显示各方面的运用都和Canvas有较大的不同。” ---efei | ||
Motorola的MIDP1.0手机 | “motorola如果不支持MIDP2.0,应该就没办法实现全屏了。全屏下的菜单很好实现,不用搞得象Command那么复杂,那个Command用起来就是很不爽,还是自己写最好。” ---海标 | ||
Nokia S60全屏后的Canvas高度 | “canvas. setFullScreenMode(true)后,一定让他被绘制一次,系统会调用sizechange(int w,int h),w、h肯定是全屏的。仅调用setFullScreenMode (true)则好象各系统有不同处理。” ---atchome
“You can call getWidth() getHeight() after Canvas.showNotify(). Then it will return the correct value. eg. 176*208” --- okboy001
“系统第一次回调paint()方法时可以获得正确的屏幕尺寸 原因如atchome所说” --- imshark_jinni
“在Nokia S60真机上这是一个BUG似乎: setFullScreenMode(true);调用之后, getHeight()返回的并不是全屏后的高度,比如他本应该返回208, 但是他却返回144,所以,在真机测试时也要小心nokia s60的这个bug, 不要因为屏幕高度获取不正确,导致fillRect与你预想不一致。
以上这个BUG,起码我的Nokia 7610就是这样。 所以我必须在setFullScreenMode(true);全屏之后 通过下面代码来获取真实的canvas高度:
Code: public abstract class PopupCanvas extends Canvas { 。。。。 /* * 针对Nokia全屏情况下getHeight的BUG,此函数出自于 * http://discussion.forum.nokia.com/f...?threadid=48826 */ public int getHeight(){ try{ if("Nokia".compareTo( System.getProperty("microedition.platform").substring(0,5)) == 0) return 208; else return super.getHeight(); } catch(Exception e){ return super.getHeight(); } } }” ---zhengyun |
| |
关键词 | 详细描述 | |
Image对象转换为byte[] | “image-(getGraphics)->graphic-(setClip, 对每个象素getColor)->原始byte[]” --- rypan
“要是在 J2ME 的话, 看来只有 Image.getRGB() 能帮上: 还有做int[] -> byte[] 的动作, 可以考虑用 ByteArrayOutputStream + DataOutputStream, 把 int[] 用 dos.writeInt 的方法写在 Byte array 上. 当然可以用最老土的方法, 不知道那种快: byteArray[i] = intArray[j] & 0xFF; byteArray[i+1] = (intArray[j] >> 8)& 0xFF; byteArray[i+2] = (intArray[j] >> 16)& 0xFF; byteArray[i+3] = (intArray[j] >> 24)& 0xFF;” --- wapeter
“ public static byte[] getByteArray(Image image) { int raw[] = new int[image.getWidth() * image.getHeight()]; image.getRGB(raw, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight()); byte rawByte[] = new byte[image.getWidth() * image.getHeight() * 4]; int n = 0; for(int i = 0; i < raw.length; i++) { int ARGB = raw[i]; & 再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来! |
转载地址:http://tlwzi.baihongyu.com/