android基础入门教程8.2.1bitmap位图详解_第1页
android基础入门教程8.2.1bitmap位图详解_第2页
android基础入门教程8.2.1bitmap位图详解_第3页
android基础入门教程8.2.1bitmap位图详解_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、title: Android基础入门categories: Android8.2.1 Bitmap(位图)详解基础入门,Android基础入门解8.2.1 Bitmap(位图)详本节引言:在上一节中对Android中的13种类型的Drawable的类型进行了讲解,有没有应用到自己的项目当中呢?而本节来探讨的是Bitmap(位图)的一些使用,而在开始本节的内容之前先来区分几个名词的概念:Drawable:通用的图形对象,用于装载常用格式的图像,既可以是PNG,JPG这样的图像,也是前面学的那13种Drawable类型的可视化对象!可以理解成一个用来放画的画框!Bitmap(位图):可以把他看作一

2、个画架,先把画放到上面,然后可以进行一些处理,比如获取图像文件信息,做旋转切割,放大缩小等操作!Canvas(画布):如其名,画布,可以在上面作画(绘制),你既可以用Pa(画笔),来画各种形状或者写字,又可以用Path(路径)来绘制多个点,然后连接成各种图形! Matrix(矩阵):用于图形特效处理的,颜色矩阵(ColorMatrix),还有使用Matrix进行图像的平移,缩放,旋转,倾斜等!而上述的这些都是Android中的底层图形类:android.graphics给提供的接口!嗯,话不多说开始本节内容!PS:文档:Bitmap1.了解Bitmap,BitmapFactory,Bitmap

3、Facotry.Options如题,本来可以直接三个东东的关系的,但是我就是要傲娇,就要看代码!如果你打开Bitmap类的源码,你会看到Bitmap的构造方法上有这样一段东东:大概想说的就是:Bitmap的构造方法是私有的,外面不能实例化,只能通过JNI实例化!当然,肯定也会给提供一个接口给来创建Bitmap的,而这个接口类就是:BitmapFactory!来来来,打开BitmapFactory类,点下左边的Structure可以看到BitmapFactory给提供了这些方法,大部分都是decode,通过各种形式来创建Bitmap的!接着 于是乎又发现了,每法,都会有一个Options类型的参

4、数,点进去看看:发现了这货是一个静态类:BitmapFacotry.Options!而他是用来设置decode时的选项的!2.Bitmap常用方法普通方法publiccompress (pressFormat format,quality, OutputStream stream)对这里的某些参数的值进行设置,比如inJustDecodeBounds设置为true避免 OOM(内存溢出),什么,不知道OOM,没事,等下一点点跟你说清楚!最后回到的Bitmap!嗯,Bitmap中的方法比较多,就不一一进行讲解了,从中挑几个用得较多的来讲解!中文文档:Android中文API(136) Bitma

5、pBitmapFactory.Option可设置参数:inJustDecodeBounds如果设置为true,不获取,不分配内存,但会返回的高宽度信息。inSleSize缩放的倍数。如果设为4,则宽和高都为原来的1/4,则图是原来的1/16。outWidth获取的宽度值将位图的压缩到指定的OutputStream,可以理解成将Bitmap保存到文件中!format:格式,PNG,JPG等;quality:压缩质量,0-100,0表示最低画质压缩,100最大质量(PNG无损,会忽略品质设定)stream:输出流返回值代表是否成功压缩到指定流!void recycle():回收位图占用的内存空间,

6、把位图标记为Dead isRecycled():判断位图内存是否已getWidth():获取位图的宽度 getHeight():获取位图的高度isMutable():是否可修改getScaledWidth(Canvas canvas):获取指定密度转换后的图像的宽度getScaledHeight(Canvas canvas):获取指定密度转换后的图像的高度静态方法:Bitmap createBitmap(Bitmap src):以src为原图生成不可变得新图像 Bitmap createScaledBitmap(Bitmap src,dstWidth,dstHeight, filter):以s

7、rc为原图,创建新的图像,指定新图像的高宽以及是否变。Bitmap createBitmap(width,height, Config config):创建指定格式、大小的位图Bitmap createBitmap(Bitmap source,x,y,width,height)以source为原图,创建新的 ,指定起始坐标以及新图像的高宽。 public s ic Bitmap createBitmap(Bitmap source, x, y, width, height,Matrix m,filter)好吧,就贴这么多吧,要用自己查文档3.获取Bitmap位图BitmapDrawable方法

8、:你可以创建一个构造一个BitmapDrawable对象,比如通过流构建BitmapDrawable:BitmapDrawabmpMeizi = newBitmapDrawable(getAssets().open(pic_meizi.jpg); Bitmap mBitmap = bmpMeizi.getBitmap();img_bg.set mageBitmap(mBitmap);.BitmapFactory方法:都是静态方法,直接调,可以通过资源ID、路径、文件、数据流等方式来获取位图!/通过资源 Dprivate Bitmap getBitmap romResource(Resourre

9、s, return Bitmap actory.decodeResource(res, res d);.res d) /文件private Bitmap getBitmap rotring pathName) 从资源中获取位图的方式有两种:通过BitmapDrawable或者BitmapFactory,下面演示下:首先得获得这个outHeight获取的高度值inDensity用于位图的像素压缩比argetDensity用于目标位图的像素压缩比(要生成的位图) inScaled设置为true时进行压缩,从inDensity到argetDensity。.return Bitmap actory.d

10、ecode ile(pathName);/字节数组.0.2.3.4.publicifBitmap Bytes2Bimap(byte b) (b.length != 0) return else returnBitmap actory.decodeByteArray(b, 0, b.length);null;/输入流 private BitmapgetBitmap romStream( nputStream inputStream)return Bitmap actory.decodeStream(inputStream);4.获取Bitmap的相关信息:这个,只要获取了Bitmap对象,就可以

11、调用相关方法来获取对应的参数了,getByteCount获得大小,getHeight和getWidth这些这里就不写了,自己查文档!5.抠上的某一角下来有时,可能你想把上的某一角扣下来,直接通过Bitmap的createBitmap()扣下来即可参数依次为:处理的bitmap对象,起始x,y坐标,以及截取的宽高Bitmap bitmap = Bitmap actory.decodeResource(getResourpic_meizi);(), R.mipmap.Bitmap bitmap2 = Bitmap.createBitmap(bitmap , 00, 00,200,200); img

12、_bg = ( mageView) findViewBy d(R.id.img_bg);img_bg.set mageBitmap(bitmap2);运行效果图:原图:切下来的一角:6.对Bitmap进行缩放这里不用Matrix来对Bitmap,而是直接使用Bitmap给的createScaledBitmap来实现,参数依次是:处理的bitmap对象,缩放后的宽高,提供7.使用Bitmap进行截屏运行效果图:实现代码:public class MainActivity extendsptivity .sic ByteArrayOutputStream byteOut = null;privat

13、e Bitmap bitmap = null; private Button btn_cut;Overrideprotected void onCreate(Bundle saved nstane) super.onCreate(saved nstane);setContentView(R.layout.activity_main); btn_cut = (Button) findViewBy d(R.id.btn_cut);btn_cut.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(Vie

14、w v) captureScreen(););.0.public void captureScreen() Runnable action = new Runnable() .2.3.4.5.Overridepublic void run() final View contentView = getWindow().getDecorView(); tryLog.e(HEHE,contentView.getHeight() : contentView.getWidth();bitmap = Bitmap.createBitmap(contentView.getWidth(),contentVie

15、w.getHeight(), Bitmap.Config.ARGB_4444);contentView.draw(new Canvas(bitmap); ByteArrayOutputStream byteOut = newByteArrayOutputStream();6.7.8.9.0.press(press ormat.JPEG, 00,byteOut);.2.3.4.5.6.7.8.9.0.2.3.4.5.6.7.8.9.0.2.3.4.5.6.7.8.savc(bitmap, sdcard/short.png);catch (Exception e)e.pr finally tryS

16、tackTrace();if(null != byteO(null !=byteOut) lose();bitmap & !bitmap.isRecycled() if/bitmap.recycle();bitmap = null;catch( OException e)e.prStackTrace();tryaction.run(); catch (Exceptione) e.prStackTrace();private void savc(Bitmap b, String str ileName) ileOutputStream fos = null;tryfos = new ileOut

17、putStream(str ileName);if(null != fos) sucs=press(press ormat.PNG,00, fos);9.fos.flush();0.2.fos.close();if(sucs)Toast.makeText(MainActivity.this, 截屏成功, Toast.L ENGTH_SHORT).show();3.4.5.6.7.8.9.0. catch (e.pr catch (e.prileNot oundException e) StackTrace();OException e) StackTrace();代码分析:本节小结:本节给大家讲解下Bitmap,BitmapFactory和他的静态类Options,以及 BitmapDrawable的基本使用,其实Bitmap知道怎么创建就好了,他的扩展一般是通过Matrix和 Canvas来实现的,Bitm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论