您的位置:首页 > 移动开发 > Android开发

[Android学习笔记]Bitmap,BitmapDrawable,BitmapFactory学习笔记

2014-04-22 14:26 344 查看
Bitmap:图片文件的封装,可以看做是一张位图
此类中的静态方法可以通过源Bitmap创建新的Bitmap对象
此类封装了位图的一些信息
Bitmap文档BitmapFactory:一个工具类,用于创建Bitmap对象
使用此类可以通过文件,资源,byte-array等创建Bitmap对象
BitmapFactory文档BitmapDrawable:是Drawable类的扩展,Drawable是一个可以绘制到屏幕上的一个对象,BitmapDrawable则为可以会知道屏幕上的一个位图对象
BitmapDrawable对象中封装了Bitmap对象
BitmapDrawable文档ImageView:图片控件,用于承载Bitmap绘制在屏幕上
图片控件,需要显示图片时需要把Bitmap,set给它
ImageView文档
example:
//1. //使用BitmapFactory,从资源中创建Bitmap,把Bitmapset给ImageView Bitmapbitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.pic); ImageViewimageView=newImageView(this); imageView.setImageBitmap(bitmap); rl.addView(imageView); //2. //使用BitmapFactory,从InputStream中创建Bitmap //模拟创建InputStream Bitmapbitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.pic); ByteArrayOutputStreambyteStream=newByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG,100,byteStream); //得到InputStream ByteArrayInputStreambyteInputStream=newByteArrayInputStream(byteStream.toByteArray()); //通过InputStream创建Bitmap BitmapnewBitmap=BitmapFactory.decodeStream(byteInputStream); ImageViewimageView=newImageView(this); imageView.setImageBitmap(newBitmap); rl.addView(imageView); //3. //使用BitmapFactory,有Byte-Array中创建Bitmap //模拟获取byte-array Bitmapbitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.pic); ByteArrayOutputStreambyteStream=newByteArrayOutputStream(); bitmap.compess(Bitmap.CompressFormat.PNG,100,byteStream); //得到bytes byte[]bytes=byteStream.toByteArray(); byteStream.close(); //通过byte-array创建Bitmap BitmapnewBitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length); ImageViewimageView=newImageView(this); imageView.setImageBitmap(newBitmap); rl.addView(imageView); //4. //使用BitmapFactory,从SD卡中获取Bitmap StringsdPath=Environment.getExternalStorageDirectory().toString(); sdPath+="/orderMenu.png"; Bitmapbitmap=BitmapFactory.decodeFile(sdPath); ImageViewimageView=newImageView(this); imageView.setImageBitmap(bitmap); rl.addView(imageView); //5. //使用Bitmap的静态方法从originBitmap创建新的Bitmap对象 BitmaporiginBitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.pic); Bitmapbitmap=Bitmap.createBitmap(originBitmap,100,100,300,300); ImageViewimageView=newImageView(this); imageView.setImageBitmap(bitmap); rl.addView(imageView); //6. //使用BitmapDrawable填充ImageView Bitmapbitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.pic); BitmapDrawablebitmapDrawable=newBitmapDrawable(this.getResources(),bitmap); ImageViewimageView=newImageView(this); imageView.setImageDrawable(bitmapDrawable); rl.addView(imageView); //7. //获取图片的尺寸 BitmapFactory.Optionsopts=newBitmapFactory.Options(); opts.inSampleSize=1; opts.inJustDecodeBounds=false; //从Bitmap获取图宽高 Bitmapbitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.pic,opts); Log.d("test","Bitmapwidth:"+bitmap.getWidth()+"Btimapheight:"+bitmap.getHeight()); //从BitmapDrawable获取图片宽高 BitmapDrawablebitmapDrawable=newBitmapDrawable(this.getResources(),bitmap); Log.d("test","BitmapDrawablewidth:"+bitmapDrawable.getIntrinsicWidth()+"BitmapDrawableheight:"+bitmapDrawable.getIntrinsicHeight()); ImageViewimageView=newImageView(this); imageView.setImageBitmap(bitmap); rl.addView(imageView); //8. //强制释放Bitmap if(!bitmap.isRecycled()) bitmap.recycle();

有一个问题:
一张图片,分别放到drawable-mdpi/drawable-ldpi/drawable-hdpi/drawable-xhdpi/drawable-xxhdpi中,获取到内存中创建成为Bitmap对象之后,使用
getWidth(),getHeight()获取到的值都是不相同的,这是什么情况?
这问题是Android系统对图片资源管理造成的,具体新情况得重新写一篇笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: