[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文档//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系统对图片资源管理造成的,具体新情况得重新写一篇笔记
此类中的静态方法可以通过源Bitmap创建新的Bitmap对象
此类封装了位图的一些信息
使用此类可以通过文件,资源,byte-array等创建Bitmap对象
BitmapDrawable对象中封装了Bitmap对象
图片控件,需要显示图片时需要把Bitmap,set给它
example:
有一个问题:
一张图片,分别放到drawable-mdpi/drawable-ldpi/drawable-hdpi/drawable-xhdpi/drawable-xxhdpi中,获取到内存中创建成为Bitmap对象之后,使用
getWidth(),getHeight()获取到的值都是不相同的,这是什么情况?
这问题是Android系统对图片资源管理造成的,具体新情况得重新写一篇笔记
相关文章推荐
- android学习笔记---fragment适配手机和平板
- Android中的ID能否重名
- android数据库拷贝出错
- Android多屏滑动:ViewPager基础使用及PagerTabStrip先天缺陷(附源码)
- android processbar
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- android 各国语言对应的缩写
- android中sharedPreferences的用法(转)
- android.mk说明
- Android幻灯片式图片浏览器
- android 错误之==和equals
- android的线程(Thread)和服务(Service)的区别
- Android listview与adapter用法(BaseAdapter + getView)
- 完全退出Android程序的几种方法
- android 程序更新(没有sdcard)
- Android开发文档——Notifications
- android之屏幕适配之一理论知识
- android context 获得
- Android 程式开发:(十三)特殊碎片 —— 13.2 DialogFragment
- eoe上的android开源小项目