Android中图片资源格式的转换

来源:互联网 发布:算法第四版中文电子书 编辑:程序博客网 时间:2024/06/08 07:19

在Android中图片资源有很多种格式,比如Drawable,图片的资源ID,Bitmap,还有从文件中加载进来的原始形式字节形式,那这几种格式的图片怎样相互转换来用于不同的场景呢?之后还要说一种简单压缩图片的方法。

一.Drawable转化为Bitmap

如果Drawable的对象为BitmapDrawable或FastBitmapDrawable的类型,则直接使用getBitmap()就可以了

如果是其他类型的Drawable的对象则可以用Canvas画到一个Bitmap上

Canvas canvas = new Canvas(bitmap)      drawable.draw(canvas)

二.资源ID转化为Drawable

 Drawable drawable = activity.getResources().getDrawable(R.drawable.icon);

三.资源ID转化Bitmap

Bitmap bitmap = BitmapFactory. decodeResource (Resources   res, int id)

四.Bitmap转化为Drawable

Drawable drawable = new FastBitmapDrawable(bitmap);

五.Bitmap转化为字节形式

ByteArrayOutputStream out = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);byte[] array= out.toByteArray();

六.通过字节形式构建Bitmap

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

最后说一种简单的图片压缩方法(对OOM有点用处的)

<span style="font-size:18px;">public Bitmap getBitmap(String path, Context context) {// 图片宽高都为原来的二分之一,即图片为原来的四分之一if (path.length() < 7) {return null;}String str = path.substring(0, 7);// 代表了一个内部地址content打头if ("content".equals(str)) {try {BitmapFactory.Options options = new BitmapFactory.Options();//不加载到内存当中、、options.inJustDecodeBounds = true;BitmapFactory.decodeStream(context.getContentResolver()      //在res/drawable中.openInputStream(Uri.parse(path)), null, options);int height = options.outHeight;if (options.outWidth > 100) {// 根据宽设置缩放比例options.inSampleSize = options.outWidth / 100 + 1 + 1;options.outWidth = 100;// 计算缩放后的高度height = options.outHeight / options.inSampleSize;options.outHeight = height;}options.inJustDecodeBounds = false;options.inPurgeable = true;options.inInputShareable = true;return BitmapFactory.decodeStream(context.getContentResolver().openInputStream(Uri.parse(path)), null, options);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {// 外部地址BitmapFactory.Options options = new BitmapFactory.Options();   //在外存中// options.inSampleSize = 8;options.inJustDecodeBounds = true;BitmapFactory.decodeFile(path, options);int height = options.outHeight;if (options.outWidth > 100) {// 根据宽设置缩放比例options.inSampleSize = options.outWidth / 100 + 1 + 1;options.outWidth = 100;// 计算缩放后的高度height = options.outHeight / options.inSampleSize;options.outHeight = height;}options.inJustDecodeBounds = false;options.inPurgeable = true;options.inInputShareable = true;return BitmapFactory.decodeFile(path, options);// public static Bitmap decodeFile(String filepath,final int// REQUIRED_SIZE){//}return null;}</span>


0 0
原创粉丝点击