- 浏览: 73685 次
- 性别:
- 来自: 苏州
最新评论
-
weishen:
AndEngine还是一个比较不错的游戏引擎,起码对于初学者还 ...
AndEngine学习笔记 -
jameslin_2011:
观注。希望能出多些相关文章,学习中。
AndEngine学习笔记 -
无愧衾影:
作用什么样的控件,要看当前的需求会是什么样的,LinearLa ...
关于RelativeLayout的一些看法,欢迎拍砖。 -
sniffer123:
个人觉得,relative layout会造成代码的可读性很差 ...
关于RelativeLayout的一些看法,欢迎拍砖。 -
hklongshao:
nciky1984 写道Relative就是给你一个基准值(上 ...
关于RelativeLayout的一些看法,欢迎拍砖。
原文链接:
http://www.cnblogs.com/feisky/archive/2010/01/10/1643460.html
http://www.cnblogs.com/xirihanlin/archive/2009/07/24/1530246.html
编辑整理:yftx
获取位图
三种方式获取bitmap,demo中都是从resource中获取图片。
方法一使用的inputStream流,所以比较适合从网络上面直接读取图片,显示图片。
方法二与方法三均是从resource中直接读取图片。
故方法一比较适合从网络加载图片。
Tips
获取位图的信息
要获取位图信息,比如位图大小、像素、density、透明度、颜色格式等。
获取得到Bitmap就迎刃而解了,这些信息在Bitmap的手册中,这里只是辅助说明以下2点:
* 在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、 RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题。
* Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充。|
显示位图
转换为BitmapDrawable对象显示位图
使用Canvas类显示位图
这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示
位图缩放
位图旋转
图片水印的生成方法
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°,画一个向上的箭头,然后再旋转回来(这种旋转操作对于画圆周上的标记非常有用)。然后,我们想在右下角有个20像素的圆,那么,onDraw中的核心代码是:
效果如图
如果我们不调用save和restore的样子
http://www.cnblogs.com/feisky/archive/2010/01/10/1643460.html
http://www.cnblogs.com/xirihanlin/archive/2009/07/24/1530246.html
编辑整理:yftx
获取位图
三种方式获取bitmap,demo中都是从resource中获取图片。
方法一使用的inputStream流,所以比较适合从网络上面直接读取图片,显示图片。
方法二与方法三均是从resource中直接读取图片。
故方法一比较适合从网络加载图片。
package org.yftx.bitmap; import java.io.InputStream; import android.app.Activity; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; public class BitmapDemo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Resources res = this.getResources(); /** 方法一:获取bitmap的方式,BitmapDrawable方式获取位图 * InputStream is=res.openRawResource(R.drawable.android); * BitmapDrawable bmpDraw=new BitmapDrawable(is); * Bitmap bmp=bmpDraw.getBitmap(); */ /**方法二:获取bitmap的方式,BitmapDrawable方式获取位图 * BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.android); * Bitmap bmp=bmpDraw.getBitmap(); */ /**方法三:获取bitmap的方式,BitmapFactory方式获取位图 * */ Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.android); } }
引用
Tips
获取位图的信息
要获取位图信息,比如位图大小、像素、density、透明度、颜色格式等。
获取得到Bitmap就迎刃而解了,这些信息在Bitmap的手册中,这里只是辅助说明以下2点:
* 在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、 RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题。
* Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充。|
显示位图
转换为BitmapDrawable对象显示位图
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.android); /** * 转换为BitmapDrawable对象显示位图 * */ // 转换为BitmapDrawable对象 BitmapDrawable bmpDraw = new BitmapDrawable(bmp); // 显示位图 ImageView imageView1 = (ImageView) findViewById(R.id.imageView1); imageView1.setImageDrawable(bmpDraw);
使用Canvas类显示位图
这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new Panel(this)); } class Panel extends View{ public Panel(Context context) { super(context); } public void onDraw(Canvas canvas){ Bitmap bmp = BitmapFactory.decodeResource(getResources(),// R.drawable.pic180); canvas.drawColor(Color.BLACK); canvas.drawBitmap(bmp, 10, 10, null); } } }
位图缩放
/** * 对位图进行缩放 * */ //对位图进行缩放 Matrix matrix=new Matrix(); //缩放的比例 matrix.postScale(0.2f, 0.2f); Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),// bmp.getHeight(),matrix,true); ImageView imageView2 = (ImageView) findViewById(R.id.imageView2); BitmapDrawable bmpDraw2 = new BitmapDrawable(dstbmp); imageView2.setImageDrawable(bmpDraw2);
位图旋转
/** * 位图旋转 * */ Matrix matrix=new Matrix(); matrix.postScale(0.8f, 0.8f); //设置旋转角度 matrix.postRotate(45); Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),// bmp.getHeight(),matrix,true); ImageView imageView2 = (ImageView)findViewById(R.id.imageView2); BitmapDrawable bmpDraw2 = new BitmapDrawable(dstbmp); imageView2.setImageDrawable(bmpDraw2);
图片水印的生成方法
//生成水印的过程。其实分为三个环节:第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。 /** * 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 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(); //创建一个新的和SRC长度宽度一样的位图 Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 ); Canvas cv = new Canvas( newb ); //在 0,0坐标开始画入src cv.drawBitmap( src, 0, 0, null ); //在src的右下角画入水印 cv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null ); //保存 cv.save( Canvas.ALL_SAVE_FLAG ); //存储 cv.restore(); return newb; }
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°,画一个向上的箭头,然后再旋转回来(这种旋转操作对于画圆周上的标记非常有用)。然后,我们想在右下角有个20像素的圆,那么,onDraw中的核心代码是:
int px = getMeasuredWidth(); int py = getMeasuredWidth(); // Draw background canvas.drawRect(0, 0, px, py, backgroundPaint); canvas.save(); canvas.rotate(90, px/2, py/2); // Draw up arrow canvas.drawLine(px / 2, 0, 0, py / 2, linePaint); canvas.drawLine(px / 2, 0, px, py / 2, linePaint); canvas.drawLine(px / 2, 0, px / 2, py, linePaint); canvas.restore(); // Draw circle canvas.drawCircle(px - 10, py - 10, 10, linePaint);
效果如图
如果我们不调用save和restore的样子
发表评论
-
ndk调试
2011-06-28 20:55 1024http://www.devdiv.com/thread-32 ... -
AndEngine学习笔记
2011-05-29 00:58 2698暂时先记录一下思考点 ... -
如何在Android平台下编译带STL的C++程序
2011-05-24 13:03 5322Android操作系统由linux ... -
java-h用法
2011-05-23 20:03 1236按照网上抄来的javah用法一般出错,今天查了一下午在一篇文章 ... -
NDK 5R2B
2011-05-20 16:29 886http://mobile.51cto.com/android ... -
HOME键启动软件同点击图标进入软件区别
2011-03-18 14:53 1223感谢nvstp分享 按HOME键启动的软件的intent会带 ... -
vcard介绍
2011-03-17 15:50 2686原文转载:http://zengrong.net/post/6 ... -
android src
2011-03-13 12:27 1100打包好的src http://code.google.com ... -
Android App项目开发步骤小结
2011-03-10 14:02 1037转载:http://www.androidmi.com/And ... -
关于RelativeLayout的一些看法,欢迎拍砖。
2011-02-27 15:58 2725如需转载请著名 作者:倚风听雪 来源:ht ... -
myEclipse ADT 安装方法
2011-02-20 17:48 4221安装ADT插件 1、 下载ADT 2、从中解压出fe ... -
android透明度调整
2011-02-12 15:11 1971android程序中设置背景透明度可以通过设置 android ... -
Android 系统应用调用,intent的使用总结帖
2011-01-30 18:16 1585Android 系统应用调用 收集与网络,版权归原作者所有 ... -
Android的Window类
2011-01-24 16:51 2448原文链接:http://blog.sina ... -
conversion to dalvik format failed with error 1的解决办法
2011-01-22 19:01 1438原文转载:http://hi.baidu.com/myluy/ ... -
反编译XML文件
2011-01-02 01:36 1229把AXMLPrinter2.jar拷贝到C盘,在控制台cd到要 ... -
如何获取设备屏幕的宽度和高度(分辨率)
2010-12-31 00:52 1395原文转自:http://www.chengyunfeng.co ... -
ListActivity/ListView用法 与 @+id 与 @android:id 关系小解
2010-12-29 04:08 1601文章转自 http://blog.csdn.net/zhqin ... -
命令模式下的异步消息处理(Handler,Message,Looper,MessageQueue)
2010-12-26 20:52 760http://czpsailer.iteye.com/blog ... -
MatrixCursor
2010-12-23 02:50 1623如需转载请著名 作者:倚风听雪 来源:htt ...
相关推荐
Android—BitMap与Canvas学习笔记
Android开发者学习笔记——View、Canvas、bitmap Android 开发者学习笔记——View、Canvas、bitmap 是 Android 开发中常用的类,本文将通过实例讲解 View、Canvas 等相关知识点。 从资源中获取位图 在 Android ...
### 八、Android Bitmap和Canvas学习笔记 - **Bitmap**:表示位图图像的对象,用于在内存中存储图像数据。 - **Canvas**:绘图区域,可以在其上绘制各种形状、图像等。 - **绘制技巧**:如使用 `Canvas.drawBitmap...
Android开发者学习笔记-View、Canvas、bitmap.pdf
### Android画图学习笔记知识点概览 #### 一、Android画图基础知识介绍 - **类的简介** - 在Android开发过程中,对于图形绘制的理解不仅仅局限于Google提供的官方文档,还需要深入掌握Java的基础类库,尤其是那些...
这个名为“Android学习实例备份”的资源集合,显然提供了一系列的学习材料,包括文档和笔记,帮助开发者在探索Android世界时提升技能。其中,"Graphics"这个标签可能指的是与Android图形处理相关的知识,这涵盖了从...
酷相机可能包含了各种拍照效果和滤镜,这些通常通过图像处理库实现,例如OpenCV、GLSurfaceView结合OpenGL ES进行实时滤镜处理,或者使用Android的Bitmap和Canvas进行后期处理。 七、图像存储 捕获的照片通常会保存...
首先,"Android开发者学习笔记——View、Canvas、bitmap.doc" 文件可能涵盖的是Android的基础图形绘制知识,包括View的生命周期、Canvas的基本用法以及如何在Bitmap上进行绘图。View是Android用户界面的基本构建块,...
在Android开发中,实现“雪花飘落特效”是一种常见的视觉效果,可以用于增强应用程序的用户界面体验,尤其是在节日或者冬季主题的应用...这个项目作为一个学习笔记,可以帮助开发者了解和掌握Android图形和动画的使用。
Canvas提供了丰富的绘图方法,如drawRect、drawCircle、drawBitmap等,允许开发者在屏幕上绘制矩形、圆形、位图等各种形状和图像。同时,Paint类则用于设置绘制的样式,如颜色、线条宽度、抗锯齿效果等。在创建...
在Android开发中,自定义控件是一种常见的需求,它能帮助开发者实现更丰富的交互和视觉效果。本篇笔记主要关注的是如何创建一个自定义的开关按钮,这个过程涉及到对View的继承、自定义属性的设置以及图形绘制。 ...
在Android开发领域,移动组件是构建应用程序的基础,尤其是在2D图形和游戏开发中。...这些资源对于学习和提升Android应用或游戏的视觉效果和用户体验非常有价值,同时也体现了作者持续学习和积累的精神。
在Android平台上,手写和涂鸦功能是许多应用中常用且有趣的特性,它们可以用于笔记、绘图或者增强用户交互体验。"Android源码——访米聊手写和涂鸦源码.zip"提供了实现此类功能的源代码示例,帮助开发者深入理解其...
通过研究和理解CancasDemo项目,开发者可以学习如何在Android应用中创建一个功能完善的手写板,同时也可以在此基础上扩展其他高级特性,如手势识别、颜色选择器、橡皮擦功能等。这个源码是一个很好的学习资源,对于...
3. **图形绘制**:游戏中的飞机、子弹和敌机等元素的绘制,通常会用到Canvas和Bitmap类,需要掌握如何在屏幕上动态绘制图形。 4. **事件处理**:玩家的操作如触摸屏幕控制飞机移动,需要通过监听MotionEvent来实现...
6. **多媒体支持**:MIUI便签支持图片和手绘功能,这就涉及到了Android的多媒体处理,包括Bitmap对象、Canvas绘图以及多媒体文件的读取和保存。 7. **权限管理**:由于涉及到读写文件和使用相机等敏感操作,MIUI...
- **学习资料管理**:可用于管理学生的学习资料,如笔记、讲义等。 - **个人文档整理**:帮助用户整理个人文档,便于随时查阅。 #### 五、总结 综上所述,本项目通过对现有源码的扩展与优化,成功地增加了书签、...