1、Drawable → Bitmap
Java代码
1.public static Bitmap drawableToBitmap(Drawable drawable) {
2.
3. Bitmap bitmap = Bitmap
4. .createBitmap(
5. drawable.getIntrinsicWidth(),
6. drawable.getIntrinsicHeight(),
7. drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
8. : Bitmap.Config.RGB_565);
9. Canvas canvas = new Canvas(bitmap);
10. //canvas.setBitmap(bitmap);
11. drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
12. drawable.draw(canvas);
13. return bitmap;
14.}
public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
2、从资源中获取Bitmap
Java代码
1.Resources res=getResources();
2.
3.Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3、Bitmap → byte[]
Java代码
1.private byte[] Bitmap2Bytes(Bitmap bm){
2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
3. bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
4. return baos.toByteArray();
5. }
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
4、 byte[] → Bitmap
Java代码
1.private Bitmap Bytes2Bimap(byte[] b){
2. if(b.length!=0){
3. return BitmapFactory.decodeByteArray(b, 0, b.length);
4. }
5. else {
6. return null;
7. }
8. }
设置时间:
boolean isSuc = SystemClock.setCurrentTimeMillis(curMs);//此操作需要至少system权限才能操作成功
Log.i(tag, "设置系统时间是否成功?"+isSuc);
设置时区:
AlarmManager mAlarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mAlarmManager.setTimeZone("GMT+08:00");
设置时区需要在manifest.xml中增加如下权限:
<!-- 允许设置时区-->
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
<timezones>
<timezone id="Pacific/Majuro">马朱罗</timezone>
<timezone id="Pacific/Midway">中途岛</timezone>
<timezone id="Pacific/Honolulu">檀香山</timezone>
<timezone id="America/Anchorage">安克雷奇</timezone>
<timezone id="America/Los_Angeles">美国太平洋时间 (洛杉矶)</timezone>
<timezone id="America/Tijuana">美国太平洋时间 (提华纳)</timezone>
<timezone id="America/Phoenix">美国山区时间 (凤凰城)</timezone>
<timezone id="America/Chihuahua">奇瓦瓦</timezone>
<timezone id="America/Denver">美国山区时间 (丹佛)</timezone>
<timezone id="America/Costa_Rica">美国中部时间 (哥斯达黎加)</timezone>
<timezone id="America/Chicago">美国中部时间 (芝加哥)</timezone>
<timezone id="America/Mexico_City">美国中部时间 (墨西哥城)</timezone>
<timezone id="America/Regina">美国中部时间 (里贾纳)</timezone>
<timezone id="America/Bogota">哥伦比亚时间 (波哥大)</timezone>
<timezone id="America/New_York">美国东部时间 (纽约)</timezone>
<timezone id="America/Caracas">委内瑞拉时间 (加拉加斯)</timezone>
<timezone id="America/Barbados">大西洋时间 (巴巴多斯)</timezone>
<timezone id="America/Manaus">亚马逊标准时间 (马瑙斯)</timezone>
<timezone id="America/Santiago">圣地亚哥</timezone>
<timezone id="America/St_Johns">纽芬兰时间 (圣约翰)</timezone>
<timezone id="America/Sao_Paulo">圣保罗</timezone>
<timezone id="America/Argentina/Buenos_Aires">布宜诺斯艾利斯</timezone>
<timezone id="America/Godthab">戈特霍布</timezone>
<timezone id="America/Montevideo">乌拉圭时间 (蒙得维的亚)</timezone>
<timezone id="Atlantic/South_Georgia">南乔治亚</timezone>
<timezone id="Atlantic/Azores">亚述尔群岛</timezone>
<timezone id="Atlantic/Cape_Verde">佛得角</timezone>
<timezone id="Africa/Casablanca">卡萨布兰卡</timezone>
<timezone id="Europe/London">格林尼治标准时间 (伦敦)</timezone>
<timezone id="Europe/Amsterdam">中欧标准时间 (阿姆斯特丹)</timezone>
<timezone id="Europe/Belgrade">中欧标准时间 (贝尔格莱德)</timezone>
<timezone id="Europe/Brussels">中欧标准时间 (布鲁塞尔)</timezone>
<timezone id="Europe/Sarajevo">中欧标准时间 (萨拉热窝)</timezone>
<timezone id="Africa/Windhoek">温得和克</timezone>
<timezone id="Africa/Brazzaville">西部非洲标准时间 (布拉扎维)</timezone>
<timezone id="Asia/Amman">东欧标准时间 (安曼)</timezone>
<timezone id="Europe/Athens">东欧标准时间 (雅典)</timezone>
<timezone id="Asia/Beirut">东欧标准时间 (贝鲁特)</timezone>
<timezone id="Africa/Cairo">东欧标准时间 (开罗)</timezone>
<timezone id="Europe/Helsinki">东欧标准时间 (赫尔辛基)</timezone>
<timezone id="Asia/Jerusalem">以色列时间 (耶路撒冷)</timezone>
<timezone id="Europe/Minsk">明斯克</timezone>
<timezone id="Africa/Harare">中部非洲标准时间 (哈拉雷)</timezone>
<timezone id="Asia/Baghdad">巴格达</timezone>
<timezone id="Europe/Moscow">莫斯科</timezone>
<timezone id="Asia/Kuwait">科威特</timezone>
<timezone id="Africa/Nairobi">东部非洲标准时间 (内罗毕)</timezone>
<timezone id="Asia/Tehran">伊朗标准时间 (德黑兰)</timezone>
<timezone id="Asia/Baku">巴库</timezone>
<timezone id="Asia/Tbilisi">第比利斯</timezone>
<timezone id="Asia/Yerevan">埃里温</timezone>
<timezone id="Asia/Dubai">迪拜</timezone>
<timezone id="Asia/Kabul">阿富汗时间 (喀布尔)</timezone>
<timezone id="Asia/Karachi">卡拉奇</timezone>
<timezone id="Asia/Oral">乌拉尔</timezone>
<timezone id="Asia/Yekaterinburg">叶卡捷林堡</timezone>
<timezone id="Asia/Calcutta">加尔各答</timezone>
<timezone id="Asia/Colombo">科伦坡</timezone>
<timezone id="Asia/Katmandu">尼泊尔时间 (加德满都)</timezone>
<timezone id="Asia/Almaty">阿拉木图</timezone>
<timezone id="Asia/Rangoon">缅甸时间 (仰光)</timezone>
<timezone id="Asia/Krasnoyarsk">克拉斯诺亚尔斯克</timezone>
<timezone id="Asia/Bangkok">曼谷</timezone>
<timezone id="Asia/Shanghai">中国标准时间 (北京)</timezone>
<timezone id="Asia/Hong_Kong">香港时间 (香港)</timezone>
<timezone id="Asia/Irkutsk">伊尔库茨克时间 (伊尔库茨克)</timezone>
<timezone id="Asia/Kuala_Lumpur">吉隆坡</timezone>
<timezone id="Australia/Perth">佩思</timezone>
<timezone id="Asia/Taipei">台北时间 (台北)</timezone>
<timezone id="Asia/Seoul">首尔</timezone>
<timezone id="Asia/Tokyo">日本时间 (东京)</timezone>
<timezone id="Asia/Yakutsk">雅库茨克时间 (雅库茨克)</timezone>
<timezone id="Australia/Adelaide">阿德莱德</timezone>
<timezone id="Australia/Darwin">达尔文</timezone>
<timezone id="Australia/Brisbane">布里斯班</timezone>
<timezone id="Australia/Hobart">霍巴特</timezone>
<timezone id="Australia/Sydney">悉尼</timezone>
<timezone id="Asia/Vladivostok">海参崴时间 (符拉迪沃斯托克)</timezone>
<timezone id="Pacific/Guam">关岛</timezone>
<timezone id="Asia/Magadan">马加丹时间 (马加丹)</timezone>
<timezone id="Pacific/Auckland">奥克兰</timezone>
<timezone id="Pacific/Fiji">斐济</timezone>
<timezone id="Pacific/Tongatapu">东加塔布</timezone>
</timezones>
第一阶段:初学者阶段。
这个阶段主要是熟悉3D图形学的基本原理,和基本api的使用。
特别是对于空间的变换,矩阵的原理要有非常清楚的认识。
能够用简单的资源,做一个简单的demo,基本上就是达到了。
这个阶段比较简单,基本上每个人都可以达到,学习方法也很简单,就是看书,看demo,写代码。
时间周期大概1年。
第二阶段:进阶阶段
过了第一个阶段,一般人会走两条路。一种人会选择直接学引擎,开发游戏。另一种人,会选择先学场景管理和高级渲染。
这个视每个人的目标和爱好不同有所不一样。
做好demo后,就会想着怎么让效果更好,于是就学了很多高级渲染,比如阴影,法线贴图,HDR,反射折射等。
做了很多效果后,发现效率低下,于是就写一些场景管理方案。
能够基本实现场景管理和一些高级效果,基本上这个阶段就到达了。
国内大部分3D程序在这个阶段。
这个阶段要难点,自学达到需要一些毅力。如果你在公司里做,有人指导,也有测试资源,那会容易很多。
这个阶段的瓶颈在于没有经历过非常复杂的场景和效果,对于3D认识还是比较孤立的。不过已经打下了良好的基础了。
这个阶段应该也都开始熟悉一款引擎了。
时间周期每个人差别很大,1-2年左右。
第三阶段:3D成熟阶段
当第二阶段学得很好的时候,就会觉得自己像个高手了。有的人开始自己设计开发3D引擎了。
当发现,自己设计的场景管理和渲染都很不错的时候,可是效率还是不尽如人意。
当效果复杂,每帧都需要多遍渲染场景的时候,就发现了,原来还是做了很多重复的事情,以及占用了很多重复的资源和带宽等。
这个时候会静下心来,好好想想场景系统和逻辑该怎么设计才能效率最高,没有重复计算。
了解硬件的资源管理方式,结合自己的需求,解决资源的不当占用和带宽的随意浪费的情况。
深入熟悉硬件,彻底了解显卡流水线的特性,充分利用流水线的特性进行优化,这个时候对dx/opgl api也已经非常熟悉了,甚至一个枚举参数都了解它背后的意义。对于图形的debug,也非常熟练了,一般的渲染问题很快就解决了。
这个时候应该知道根据不同的游戏类型构建不同的场景系统了,即使是设计wow,crysis这种场景也可以,知道该怎么设计材质系统,以及effect 框架了。
这个阶段是最煎熬的阶段,也是最开心的阶段。
成长情况更是差别巨大,环境应该是至关重要。
大部分引擎其实在效率上都没完全达到这个程度。
时间周期1年以上,上不封顶,很多人估计都到不了这个层次。如果人够聪明,基础够好,环境也好,1年就够了。
这个阶段的一个特征,图形已经很简单了,不想再说啥了。
第四阶段:达人阶段
第三和第四阶段也许没有明显分界线。但有点是肯定不同的。
第三个阶段还是花很多时间在学习摸索,到第四个阶段,就是在寻求了。
更关注创作了。也许他觉得市面上没有让他非常满意的引擎,至少很难找到适合中国国情的引擎。
也许他会带着一帮小弟一起做引擎,也许是做游戏。
这个阶段技术已经不是唯一追求的目的了,还有很多很多其他的方面他会关注。
因为他的目的是让整个社会承认他的价值,明白一点只有技术是不够的。
这个阶段特征我也不是很清楚,无法一概而论,国内我只见过几个人达到或者超越了这个阶段。
看看自己是属于第几阶段的。
以后有空再补充,先上班了。
补充:
第二阶段和第三阶段,是由明显的分界线的。
要从第二阶段过渡到第三阶段,必须要写引擎,或者修改引擎来达到自己希望的目的。
本质上讲,第二阶段是学习各个技术,第三阶段是集成。就像武术里,第二阶段有点像在馆子里练招数,第三阶段就是在外面和真人实战。
第三阶段会让你有很多顿悟,环境好,身边高手多,自己基础好,悟性高,一年是可以达到的。
转自:http://blog.csdn.net/vincentff7/archive/2010/06/22/5685319.aspx