Android Bitmap和Drawable互转及使用BitmapFactory解析图片流
来源:互联网 发布:厄运葬礼知乎 编辑:程序博客网 时间:2024/06/07 17:32
一、Bitmap转Drawable
Bitmap bmp=xxx; BitmapDrawable bd=new BitmapDrawable(bmp);
因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
二、 Drawable转Bitmap
转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
Drawable d=xxx; BitmapDrawable bd = (BitmapDrawable) d;Bitmap bm = bd.getBitmap();
最终bm就是我们需要的Bitmap对象了。
Drawable->Bitmap
public static Bitmap convertDrawable2BitmapByCanvas(Drawable drawable) { Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); // canvas.setBitmap(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap;}
三、Bitmap转byte[]
public static byte[] convertBitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray();}
四、BitmapFactory图片解析工具类
BitmapFactory自带了一套decodeXXX(params...)方法,用于解析获取图片;其中一个需要注意的细节是opts参数,因为比较常见的是大图,或者一系列的图片,而过多的图片就会有内存溢出的潜在可能性,这个opts参数即是用于设置解析图片流的一些参数的,比如设置宽高,图片缩放等等;
下面是google官方关于BitmapFactory.Options的字段的解释;
挑几个通常情况下需要用到的字段
inJustDecodeBounds:boolean类型变量,设置为true时表示只获取图片的宽高;而不获取实际图片;
outHeight:此参数可以进行设置,值为图片的高度,可以通过设置inJustDecodeBounds为true获取图片的高度,然后再对这个高度进行设置,以获取理想高度的图片;
outWidght:获取图片宽度,值的含义同上;
inSampleSize:如果设置值大小1,表示获取一个小一点的图片,用于节省内存,比如:inSampleSize = 4 返回一个原图1/4宽高的图像(图片像素个数为原图1/16);
获取一个大图的步骤通常如下:
1。传入一个参数opts,设置opts.inJustDecodeBounds为true;
2。获取宽高信息,再通过outHeight、outWidth设置理想图片宽高;
3。重新设置opts.inJustDecodeBounds为false,表示需要获取图片;
4。设置inSampleSize,用于节省内存;
有时候可能还需要设置其它的参数,这里列举两个
inPreferredConfig = Bitmap.Config.ARGB_4444;默认是Bitmap.Config.ARGB_8888;
inPreferredConfig = Bitmap.Config.ARGB_4444;默认是Bitmap.Config.ARGB_8888;
inPurgeablein、InputShareable 这两个参数需要同时使用;
0 0
- Android Bitmap和Drawable互转及使用BitmapFactory解析图片流
- Android图片之Bitmap、BitmapFactory
- Android Drawable和Bitmap图片之间转换
- Bitmap和BitmapFactory对象使用
- Android、Bitmap转Drawable和Drawable转Bitmap
- 初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)
- android的Bitmap和BitmapFactory类的使用
- 初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)
- Android Bitmap和Drawable
- Android Bitmap和Drawable
- android下载网络图片,BitmapFactory创建bitmap
- (转)初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)
- Android图片压缩Bitmap,Drawable
- 使用Bitmap将自身保存为文件,BitmapFactory从File中解析图片并防止OOM
- 使用BitmapFactory压缩图片大小解决android解析图片OOM错误
- android:Bitmap和Drawable相互转…
- Android中Bitmap和Drawable(转)
- Android中Bitmap和Drawable(转)
- 微信开通批量检测软件的常见问题解答(入手必备)
- Java源码解析(附录)(1) —— ParameterizedType
- Oracle常用函数
- 疑难问题记录
- SVN服务器搭建和使用(二)
- Android Bitmap和Drawable互转及使用BitmapFactory解析图片流
- java定时器的使用(Timer)
- C# winform中一个类中如何调用另一个窗体的控件或方法
- CodeForces 712D Memory and Scores
- PDF 在线预览类库:Aspose.Pdf.dll
- 最优化理论之牛顿法
- html 中align和 valign
- bzoj3156 防御准备
- Android Studio 升级 2.2 Maven 插件不能使用的问题