版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、开发者学习笔记 View&CanvasBitMap 、View 以及 Canvas 是我们 Ophone 程序中常用到的类。 本日以 feisky 的学习笔 记呈现,通过实例讲解 View&Canvas 等等。1. 从资源中获取位图可以使用 BitmapDrawable 或者 BitmapFactory 来获取资源中的位图。当然,首先需要获取资源:Resources res=getResources();使用 BitmapDrawable 获取位图使用 BitmapDrawable (InputStream is) 构造一个 BitmapDrawable ;使用 BitmapD
2、rawable 类的 getBitmap() 获取得到位图;/ 读取 InputStream 并得到位图InputStream is=res.openRawResource(R.drawable.pic180);BitmapDrawable bmpDraw=new BitmapDrawable(is);Bitmap bmp=bmpDraw.getBitmap();或者采用下面的方式:BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180);Bitmap bmp=bmpDraw.getBitmap();使用
3、 BitmapFactory 获取位图( Creates Bitmap objects from various sources, including files, streams, and byte-arrays. )使用 BitmapFactory 类 decodeStream(InputStream is) 解码位图资源,获取位图。 Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180);BitmapFactory 的所有函数都是 static ,这个辅助类可以通过资源 ID 、路径、文件、数据 流等方式来获取位图。
4、以上方法在编程的时候可以自由选择,在 Android SDK 中说明可以支持的图片格式如下: png (preferred), jpg (acceptable), gif (discouraged),和 bmp ( Android SDKSupport Media Format )。2. 获取位图的信息要获取位图信息, 比如位图大小、 像素、 density 、透明度、 颜色格式等, 获取得到 Bitmap 就迎刃而解了,这些信息在 Bitmap 的手册中,这里只是辅助说明以下 2 点:在 Bitmap 中对 RGB 颜色格式使用 Bitmap.Config 定义,仅包括 ALPHA_8 、
5、ARGB_4444 、 ARGB_8888 、RGB_565 ,缺少了一些其他的,比如说 RGB_555 ,在开 发中可能需要注意这个小问题;Bitmap 还提供了 compress() 接口来压缩图片,不过 AndroidSAK 只支持 PNG 、JPG 格 式的压缩;其他格式的需要 Android 开发人员自己补充了。3. 显示位图显示位图可以使用核心类 Canvas ,通过 Canvas 类的 drawBirmap() 显示位图,或者借 助于 BitmapDrawable 来将 Bitmap 绘制到 Canvas 。当然,也可以通过 BitmapDrawable 将位图显示到 View
6、中。转换为 BitmapDrawable 对象显示位图/ 获取位图Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180);/ 转换为 BitmapDrawable 对象BitmapDrawable bmpDraw=new BitmapDrawable(bmp);/ 显示位图ImageView iv2 = (ImageView)findViewById(R.id.ImageView02); iv2.setImageDrawable(bmpDraw);使用 Canvas 类显示位图这儿采用一个继承自 View 的子类 Pane
7、l ,在子类的 OnDraw 中显示public class MainActivity extends Activity /* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(new Panel(this);class Panel extends Viewpublic Panel(Context context) super(context);
8、public void onDraw(Canvas canvas)Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pic180);canvas.drawColor(Color.BLACK);canvas.drawBitmap(bmp, 10, 10, null);4. 位图缩放(1 )将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一 样: drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)。(2 )在原有位图的基础上
9、,缩放原位图,创建一个新的位图:CreateBitmap(Bitmapsource, int x, int y, int width, int height, Matrix m, boolean filter)( 3 )借助 Canvas 的 scale(float sx, float sy)( Preconcat the current matrix withthe specified scale. ),不过要注意此时整个画布都缩放了。( 4 )借助 Matrix :Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.dra
10、wable.pic180);Matrix matrix=new Matrix();matrix.postScale(0.2f, 0.2f);Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(), bmp.getHeight(),matrix,true);canvas.drawColor(Color.BLACK);canvas.drawBitmap(dstbmp, 10, 10, null);5. 位图旋转R.drawable.p同样,位图的旋转也可以借助Matrix或者Canvas来实现。Bitmap bmp = BitmapFact
11、ory.decodeResource(getResources(), ic180);Matrix matrix =newMatrix();matrix.postScale(0.8f,0.8f);matrix.postRotate(45);Bitmap dstbmp=Bitmap.createBitmap(bmp,O,O,bmp.getWidth(), bmp.getHeight(),matrix,true);can vas.drawColor(Color.BLACK);can vas.drawBitmap(dstbmp,10, 10, nu II);旋转效果:6.图片水印的生成方法生成水印的过
12、程。其实分为三个环节:第一,载入原始图片;第二,载入水印图片; 保存新的图片。* create the bitmap from a byte array* param src the bitmap object you want proecss* param watermark the water mark above the src* return return a bitmap object ,if paramter's length is 0,return null */private Bitmap createBitmap( Bitmap src, Bitmap waterma
13、rk )String tag = "createBitmap"Log.d( tag, "create a new bitmap" );if( src = null )return null;int w = src.getWidth();int h = src.getHeight();int ww = watermark.getWidth();int wh = watermark.getHeight();/create the new blank bitmapBitmap newb = Bitmap.createBitmap( w, h, Config.A
14、RGB_8888 );/ 的和 SRC 长度宽度一样的位图Canvas cv = new Canvas( newb );/draw src into cv.drawBitmap( src, 0, 0, null );/在/draw watermark intocv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );/ 水印/save all clipcv.save( Canvas.ALL_SAVE_FLAG );/ 保存/storecv.restore();/ 存储return newb;6. 图片水印的生成方法生成水印的过程。其实分为
15、三个环节:第一,载入原始图片;第二, 保存新的图片。创建一个新0, 0 坐标开始画入 src在 src 的右下角画入载入水印图片;第三,/* create the bitmap from a byte array * param src the bitmap object you want proecss* param watermark the water mark above the src* return return a bitmap object ,if paramter's length is 0,return null*/private Bitmap createBitm
16、ap( Bitmap src, Bitmap watermark )String tag = "createBitmap"Log.d( tag, "create a new bitmap" );if( src = null )return null;int w = src.getWidth();int h = src.getHeight();int ww = watermark.getWidth();int wh = watermark.getHeight();/create the new blank bitmap创建一个新0 坐标开始画入 src在
17、src 的右下角画入Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );/ 的和 SRC 长度宽度一样的位图Canvas cv = new Canvas( newb );/draw src into cv.drawBitmap( src, 0, 0, null );/ 在 0 ,/draw watermark intocv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );/ 水印/save all clipcv.save( Canvas.ALL_SAVE_FLAG )
18、;/保存/storecv.restore();/ 存储return newb;7. Canvas 的 save 和 restore onDraw 方法会传入一个 Canvas 对象,它是你用来绘制控件视觉界面的画布。在 onDraw 方法里,我们经常会看到调用 save 和 restore 方法,它们到底是干什么用的 呢?? save :用来保存 Canvas 的状态。 save 之后,可以调用 Canvas 的平移、放缩、旋转、 错切、裁剪等操作。? restore :用来恢复 Canvas 之前保存的状态。 防止 save 后对 Canvas 执行的操作对后 续的绘制有影响。save 和 restore 要配对使用( restore 可以比 save 少,但不能多),如果 restore 调用 次数比 save 多,会引发 Error 。 save 和 restore 之间,往往夹杂的是对 Canvas 的特殊 操作。例如:我们先想在画布上绘制一个右向的三角箭头,当然,我们可以直接绘制,另外,我们 也可以先把画布旋转 90°,画一个向上的箭头,然后再
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于人工智能的2025年度智能物流系统合作协议2篇
- 2025版美容院顾客隐私保护及数据共享协议4篇
- 二零二五年度智能门窗系统研发与生产合作合同4篇
- 二零二五年度绿色环保美容美发产品直销合作协议4篇
- 2025年度出国劳务派遣与项目管理合作协议4篇
- 二零二五版生态湿地绿化修复工程承包合同4篇
- 二零二五年度倪俊戚露离婚协议书:离婚后子女医疗费用承担协议
- 《眼动追踪技术》课件
- 2025年度瓷石行业标准化与认证服务合同4篇
- 二零二五版旅游行业信息化建设合作合同4篇
- MT/T 199-1996煤矿用液压钻车通用技术条件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力学性能试验第1部分:桌类强度和耐久性
- 第三方在线纠纷解决机制(ODR)述评,国际商法论文
- 第5章-群体-团队沟通-管理沟通
- 肾脏病饮食依从行为量表(RABQ)附有答案
- 深基坑-安全教育课件
- 园林施工管理大型园林集团南部区域养护标准图例
- 排水许可申请表
- 低血糖的观察和护理课件
- 计量检定校准技术服务合同协议书
评论
0/150
提交评论