- 浏览: 72377 次
- 性别:
- 来自: 苏州
最新评论
-
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 980http://www.devdiv.com/thread-32 ... -
AndEngine学习笔记
2011-05-29 00:58 2666暂时先记录一下思考点 ... -
如何在Android平台下编译带STL的C++程序
2011-05-24 13:03 5296Android操作系统由linux ... -
java-h用法
2011-05-23 20:03 1190按照网上抄来的javah用法一般出错,今天查了一下午在一篇文章 ... -
NDK 5R2B
2011-05-20 16:29 858http://mobile.51cto.com/android ... -
HOME键启动软件同点击图标进入软件区别
2011-03-18 14:53 1171感谢nvstp分享 按HOME键启动的软件的intent会带 ... -
vcard介绍
2011-03-17 15:50 2554原文转载:http://zengrong.net/post/6 ... -
android src
2011-03-13 12:27 1072打包好的src http://code.google.com ... -
Android App项目开发步骤小结
2011-03-10 14:02 984转载:http://www.androidmi.com/And ... -
关于RelativeLayout的一些看法,欢迎拍砖。
2011-02-27 15:58 2689如需转载请著名 作者:倚风听雪 来源:ht ... -
myEclipse ADT 安装方法
2011-02-20 17:48 4175安装ADT插件 1、 下载ADT 2、从中解压出fe ... -
android透明度调整
2011-02-12 15:11 1943android程序中设置背景透明度可以通过设置 android ... -
Android 系统应用调用,intent的使用总结帖
2011-01-30 18:16 1571Android 系统应用调用 收集与网络,版权归原作者所有 ... -
Android的Window类
2011-01-24 16:51 2404原文链接:http://blog.sina ... -
conversion to dalvik format failed with error 1的解决办法
2011-01-22 19:01 1413原文转载:http://hi.baidu.com/myluy/ ... -
反编译XML文件
2011-01-02 01:36 1174把AXMLPrinter2.jar拷贝到C盘,在控制台cd到要 ... -
如何获取设备屏幕的宽度和高度(分辨率)
2010-12-31 00:52 1368原文转自:http://www.chengyunfeng.co ... -
ListActivity/ListView用法 与 @+id 与 @android:id 关系小解
2010-12-29 04:08 1578文章转自 http://blog.csdn.net/zhqin ... -
命令模式下的异步消息处理(Handler,Message,Looper,MessageQueue)
2010-12-26 20:52 730http://czpsailer.iteye.com/blog ... -
MatrixCursor
2010-12-23 02:50 1598如需转载请著名 作者:倚风听雪 来源:htt ...
相关推荐
Android—BitMap与Canvas学习笔记
主要介绍了 Android canvas drawBitmap方法详解及实例的相关资料,需要的朋友可以参考下
Android开发者学习笔记——View、Canvas、bitmap
android 画图 bitmap drawable canvas paint
Android UI开发(五)Bitmap和Canvas实例.docxAndroid UI开发(五)Bitmap和Canvas实例.docxAndroid UI开发(五)Bitmap和Canvas实例.docxAndroid UI开发(五)Bitmap和Canvas实例.docxAndroid UI开发(五)Bitmap和Canvas实例...
在Android UI开发专题的前五节我们讲到的东西主要是基础和理论内容,从本次Android123将通过实例代码来演示,本次主要是Bitmap和Canvas类的使用,根据要求缩放Bitmap对象并返回新的Bitmap对象。centerToFit方法一共...
android bitmap outofMemory 用来解决android中常见的bitmap outOfMemory
android里面 canvas 转换成bitmap
Android开发者学习笔记-View、Canvas、bitmap.pdf
android Bitmap相关知识介绍~~~
Android图片Bitmap和字符串String之间相互转换的工具类,外加项目代码,封装好的,直接可以用,
Android bitmap Android Bitmap相关
Android下使用Canvas生成验证码Bitmap
Android Bitmap.getPixels的正确理解演示源码,参考文章《Android Bitmap入门:getPixels的正确理解》
android中对Bitmap图片设置任意角为圆角
Android不支持将Bitmap转换成单色的Bmp图片,所以参考Bmp格式说明,自己写了一个转换类。亲测有效!!!
Android上解析24位深度Bitmap文件示例
android Bitmap用法总结 Bitmap用法总结 1、Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable....