




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【IT168 专稿】Android是谷歌推出的业界首个完全开放且免费的移动应用开发平台,自从去年11月份谷歌宣布举办总奖金为1000万美元的Android开发者大赛以来,人们对了解它、使用它的热情逐渐升温。自开赛以来全世界已经有近1800个新参赛产品被提交,其中甚至有很多因其独具一格的创意而登上技术界媒体的头条,成为人们关注的焦点。在这个平台上引入了许多有趣的概念,不过很多开发者依然认为它只是一个Linux、Java和谷歌自己的应用程序编程接口API的组合产物。本文将通过介绍图片处理相关的编程,来让你明白使用Android平台非常简单,而且这个平台也非常强大。开始之前的入门知识了解现在关于Android的参考资料并不是很多,而当前最好的资料则来自于谷歌自己的Android的网站:/android/。在这儿有你所需要的所有必须的开发工具、插件和示例代码,你可以免费下载它们。下载操作很容易,在此不再浪费笔墨介绍。除了在线文档之外,你还可以通过加入社区论坛的方式来得到技术帮助。如果你是初学者,我推荐你选择使用免费的开发工具Eclipse,因为它集成了最好的Android SDK,另外还有调试软件和模拟器。根据很多有经验的开发者介绍,尽管通过命令行或批处理脚本都可以实现创建Android项目,但是使用Eclipse无疑是最容易上手的方法。处理图像的API有哪些?Android的API可以实现很多强大的功能,其中包括:SQLite结构化数据存储数据库(SQLite for structured data storage):通过它你不用花很大劲就可以在你的应用程序内嵌入一个微型数据库。图形库支持:基于OpenGL ES嵌入版的最佳二维图形库和三维图形库。集成Web浏览器支持多媒体支持:它支持常用的音频、视频和图像格式。谷歌API:映射(Mapping)功能可以让第三方代码显示和控制一个谷歌地图。它还可以通过XMPP支持一个叫做GTalkService的P2P服务。硬件相关的支持:有很多人们所期待的功能,用来支持GSM电话、蓝牙、3G、WiFi、定位服务等相关硬件。在谷歌提供的大量API中,我们主要关注下面两个程序包中的相关API:android.graphics:核心渲染包,它提供了一些初级图形工具,诸如画布、颜色过滤器、画笔等,可以让你直接在屏幕上进行图像处理。android.graphics.drawable:编译过的可视化资源用来做背景、标题或屏幕的其他部分。由于图片是位图文件,因此我们将重点了解和使用在android.graphics.Bitmap下的API。文件I/O和支持的图片格式Android支持好几种常见的静态图片格式,例如PNG、JPG和GIF。在本文的示例中,我们将使用JPG格式。如果你考虑使用图片的透视功能,可能选择PNG格式更合适一些。为了从你的软件中查看一个图片文件,你应该将它放在你的软件根目录下的res/drawable目录下。一旦这个图片放在这个文件夹下之后,当你重新编译打包的时候,会自动为它产生一个资源ID。举个例子来说,如果你拥有一个叫做pic1.jpg的图片文件,它将可以通过它的资源ID R.drawable.pic1在程序中被访问。你可以看到这个图像文件扩展名已经被脱去,而R则代表了整体资源文件R.java,它是自动生成的,除非你非常了解这个文件中的资源结构,不推荐你编辑它里面的内容。下面的示例代码介绍如何通过一个图像文件的资源ID来访问它。1 Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),2 R.drawable.pic1);3 int pic_width = mBitmap.width();4 int pic_height = mBitmap.height();如果你希望阅读和编写一个没有指定文件夹结构的图片文件,它应该放在模拟器的/data/data/YourPackageName/files/目录下。举个例子来说,如果你为你的例程创建一个程序包名称为com.cyl.TutorialOnImages。那么当你在运行的时候创建一个新的图片文件,它将被放在/data/data/com.cyl.TutorialOnImages/files/文件夹下。请记住每一个Android应用都将以它自己的用户和组ID来启动,因此你专门设定,某些文件夹是不可以通过你的软件来访问的。下面是一段当你希望输出一个位图到一个output.jpg文件时的代码。1 try 2 FileOutputStream fos = super.openFileOutput(output.jpg,3 MODE_WORLD_READABLE);4 5 mBpress(CompressFormat.JPEG, 75, fos);6 7 fos.flush();8 fos.close();9 catch (Exception e) 10 Log.e(MyLog, e.toString();11 图片查看、颜色和透明每一个Android应用应该有一个屏幕布局。你可以在软件内动态的创建它,或者通过一个外部XML文件来指定它。这个文件默认是main.xml。为了包含一个图片,你要使用一个叫做ImageView的查看类。下面是main.xml文件的内容: 1 2 3 8 9 13 14 如同图片文件可以被通过一个资源ID来访问一样,编译后在全局资源文件R.java中自动为main.xml产生一个叫做R.layout.main的资源ID。下面是当应用程序首次在模拟器上启动时的默认视图。图1、软件在模拟器上首次启动每一个图像像素通过一个4字节整数来展现。最高位字节用作alpha通道;换言之用来实现透明/不透明控制。255代表完全不透明;0则代表完全透明。接下来一个字节是red红色通道;255代表完全是红色。依次类推接下来两个字节相应的实现绿色和蓝色通道。A,R,G,B全为255时为白色, R,G,B全为0时为黑色。操作图像像素现在你可以对单独的像素进行处理了。通过使用android.graphics.Bitmap API中的getPixels,可以加载像素到一个整数数组中。在本文例子中,你将按照一定规则对每一个像素实现着色。经过这个处理后,所有的像素将被转化为一个范围在0到255的字节码。android.graphics.Bitmap API中的setPixels则用来加载这个整数数组到一个图像中。最后一步是通过ImageView变量mIV来更新屏幕。以下是实现这个染色过程的代码片段。1 private void TintThePicture(int deg) 2 int pix = new intpicw * pich;3 mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);4 5 int RY, GY, BY, RYY, GYY, BYY, R, G, B, Y;6 double angle = (3.14159d * (double)deg) / 180.0d;7 int S = (int)(256.0d * Math.sin(angle);8 int C = (int)(256.0d * Math.cos(angle);9 10 for (int y = 0; y pich; y+)11 for (int x = 0; x 16) & 0xff;/0xff=25515 int g = (pixindex 8) & 0xff;16 int b = pixindex & 0xff;17 RY = ( 70 * r - 59 * g - 11 * b) / 100; /7018 GY = (-30 * r + 41 * g - 11 * b) / 100; /4119 BY = (-30 * r - 59 * g + 89 * b) / 100;/8920 Y = ( 30 * r + 59 * g + 11 * b) / 100;/10021 RYY = (S * BY + C * RY) / 256;/S = (int)(256.0d * Math.sin(angle);22 BYY = (C * BY - S * RY) / 256;23 GYY = (-51 * RYY - 19 * BYY) / 100;24 R = Y + RYY;25 R = (R 255) ? 255 : R);26 G = Y + GYY;27 G = (G 255) ? 255 : G);28 B = Y + BYY;29 B = (B 255) ? 255 : B);30 pixindex = 0xff000000 | (R 16) | (G 8) | B;31 32 33 Bitmap bm = Bitmap.createBitmap(picw, pich, false);34 bm.setPixels(pix, 0, picw, 0, 0, picw, pich);35 36 / Put the updated bitmap into the main view37 mIV.setImageBitmap(bm);38 mIV.invalidate();39 40 mBitmap = bm;41 pix = null;42 图2:按下中间按钮时的结果实现用户交互操作看完上面的内容后,我们已经知道了如何导入和导出一个图像文件,并且为它创建一个视图,进而在这个图片中处理每一个像素。下面我们要了解的一件事情是实现一个简单的用户交互,这样可以根据用户端的输入来实现相应操作。android.view.KeyEvent中的API让你可以处理响应操作。这个软件被设定为等待方向键的中央键的按键事件。当它被按下的时候,它将为这个图片以增加20的方式来进行着色,并将结果保存的一个文件中。1 public boolean onKeyDown(int keyCode, KeyEvent event) 2 if (keyCode = KeyEvent.KEYCODE_DPAD_CENTER) 3 4 / Perform the tinting operation5 TintThePicture(20);6 7 / Display a short message on screen8 nm.notifyWithText(56789, Picture was tinted,9 NotificationManager.LENGTH_SHORT, null);10 11 / Save the result12 SaveThePicture();13 14 return (true);15 16 17 return super.onKeyDown(keyCode, event);18 一点建议如果处理所有像素要花费比较长的事件,你可能会得到一个应用程序不响应的弹出对话框。这种情况下,你应该创建一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿电与氢能融合发展方案
- (2025年标准)工程内部交接协议书
- 关于框架合同(标准版)
- (2025年标准)更夫免责协议书
- (2025年标准)各个俱乐部转让协议书
- (2025年标准)个人转让物品协议书
- (2025年标准)个人卖牛协议书
- (2025年标准)个人结账协议书
- (2025年标准)个人共用厨房协议书
- 劳务公司承包项目协议
- 社区居民高血压防治健康讲座
- 2025年湖北省中考化学试题深度解读及答案详解
- Unit 3 Same or DifferentSection A Grammar Focus (3a-3c) 课件-2025-2026学年人教版八年级英语上册
- 管线及设备开启作业安全管理制度与操作流程
- 2025年保密知识试题库附参考答案(完整版)
- 2025年医学基础知识考试试题库及答案
- 1.5 植物的变化 教案 教科版小学一年级科学上册
- 揭西招投标管理办法
- 社区与小课堂的合同协议
- 低空经济相关政策文件
- 养老机构风险防范课件
评论
0/150
提交评论