- 浏览: 117166 次
- 性别:
- 来自: 重庆
文章分类
最新评论
位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。 当然,首先需要获取资源: Resources res=getResources(); 使用BitmapDrawable获取位图 或者采用下面的方式: 使用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、路径、文件、数据流等方式来获取位图。 以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),和bmp(Android SDK Support Media Format)。 要获取位图信息,比如位图大小、像素、density、透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的手册中,这里只是辅助说明以下2点: 显示位图可以使用核心类Canvas,通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。当然,也可以通过BitmapDrawable将位图显示到View中。 转换为BitmapDrawable对象显示位图 // 获取位图 使用Canvas类显示位图 这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示 (1)将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)。 (2)在原有位图的基础上,缩放原位图,创建一个新的位图:CreateBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) (3)借助Canvas的scale(float sx, float sy) (Preconcat the current matrix with the specified scale.),不过要注意此时整个画布都缩放了。 (4)借助Matrix: 同样,位图的旋转也可以借助Matrix或者Canvas来实现。 旋转效果: 生成水印的过程。其实分为三个环节:第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。
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); 效果如图1所示: 如果我们不调用save和restore会是什么样子呢?如图2所示: 从这两个图中,我们就能看到圆圈位置的明显差异。不进行Canvas的save和restore操作的话,所有的图像都是在画布旋转90°后的画布上绘制的。当执行完onDraw方法,系统自动将画布恢复回来。save和restore操作执行的时机不同,就能造成绘制的图形不同。 本文参考: Android SDK moandroid.com http://www.cnblogs.com/xirihanlin/archive/2009/07/24/1530246.html 转载至:http://www.cnblogs.com/feisky/archive/2011/12/11/1643460.html1. 从资源中获取位图
// 读取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();
2. 获取位图的信息
3. 显示位图
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180);
// 转换为BitmapDrawable对象
BitmapDrawable bmpDraw=new BitmapDrawable(bmp);
// 显示位图
ImageView iv2 = (ImageView)findViewById(R.id.ImageView02);
iv2.setImageDrawable(bmpDraw);public class MainActivity extends Activity {
/** Called when the activity is first created. */
@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);
}
}
}
4. 位图缩放
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.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. 位图旋转
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic180);
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);
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(dstbmp, 10, 10, null);
6.图片水印的生成方法
7.Canvas的save和restore
发表评论
-
Android Camera 使用小结
2012-03-06 17:07 1464Android Camera 使用小结 Android手 ... -
Android权限说明
2012-03-05 14:12 659程序执行需要读取到安全敏感项必需在androidma ... -
详解 Android 的 Activity 组件
2012-02-29 09:24 878Activity 的生命周期 和 J2ME 的 MI ... -
JNI技术与Android应用
2012-02-20 17:08 2785本文转自http://www.cnblogs.com/y ... -
如何发布打包并发布自己的Android应用(APP)
2012-02-20 15:30 759前面讲的都是关于And ... -
Android JNI知识简介
2012-02-16 17:33 796Java Native Interface (JNI)标准是j ... -
Android NDK: Host 'awk' tool is outdated.
2012-02-16 16:27 1165在使用Android NDK进行编译的时候可能会出现 Andr ... -
windows+eclipse+cygwin+cdt+ndk
2012-02-16 15:56 916代码下载 - 公共邮 ... -
解决Android自定义标题栏充满的问题
2012-02-15 10:27 807一个接着一个的activi ... -
WebView使用
2012-02-10 11:43 856WebView使用: Java代码 ... -
Android自定义title bar(标题栏)
2012-02-10 11:40 1226我们在开发程序是经常会需要软件全屏显示、自定义标题(使用按 ... -
Android应用开发中的风格和主题(style,themes)
2012-02-10 11:09 9735越来越多互联网企业都在Android平台上部署其客户端, ... -
Android 对话框(Dialog)大全 建立你自己的对话框
2012-02-10 10:03 776Activities提供了一种方便管理的创建、保存、回复 ... -
PerferenceActivity用法
2012-02-10 10:01 985看到很多书中都没有 ... -
android:webView总结
2012-02-09 15:53 1209android:webView总结 大部分内容为网 ... -
Serializable 和 Parcelable 区别
2012-02-07 17:18 981android 中自定义的对象 ... -
Android中Intent传递对象的两种方法(Serializable,Parcelable)
2012-02-07 17:16 789转载自 http://blog.csdn.net/xyz ... -
Android拟器不能正常上网
2012-01-19 11:18 887启动模拟器后,可能模拟器不能正常上网,需要对模拟器进行设 ... -
Android平台常见属性集合
2012-01-19 10:56 904属性 值 说明 ... -
Android平台常见属性集合
2012-01-19 10:42 1属性 值 说明 android:orientation hor ...
相关推荐
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...
- **学习资料管理**:可用于管理学生的学习资料,如笔记、讲义等。 - **个人文档整理**:帮助用户整理个人文档,便于随时查阅。 #### 五、总结 综上所述,本项目通过对现有源码的扩展与优化,成功地增加了书签、...