Android API提供了两种解码图片的类:BitmapFactory解码jpg.png等静态图片,Movie类解码gif动态图片。


对图片解码,数据源可以是byte 数组,InputStream ,资源ID,或者指定文件名。对于BitmapFactory来说,还可以通过BitmapFactory.Options 指定解码时的一些设置。

下面代码指定opts.inJustDecodeBounds = true,表示解码时只想获取被解码图像的长度和宽度,此时bm返回值为null, 而opts.outWidth, opts.outHeight中返回了图像的宽度和长度。这种用法解码器无需为被解码的图像分配内存而值是通过BitmapFactory.Options 的输出参数返回有关图像的一些信息。

BitmapFactory.Options opts = new BitmapFactory.Options();    Bitmap bm;               opts.inJustDecodeBounds = true;    bm = BitmapFactory.decodeStream(is, null, opts);

下面代码将采样大小设为4,相当于每隔4个像素采样一次,结果是解码后的图像为原图的四分之一(具体的采用算法由平台决定,并非简单的隔4个像素取其中一个像素值)。

opts.inJustDecodeBounds = false;       opts.inSampleSize = 4;               bm = BitmapFactory.decodeStream(is, null, opts);               mBitmap = bm;

下面代码从资源文件通过InputStream解码图像:

is = context.getResources().openRawResource(R.drawable.frog);    mBitmap2 = BitmapFactory.decodeStream(is);

对应解码后的图像Bitmap对象,可以通过getPixels取的图像对应的像素值数组,有了这个像素值数组,Bitmap可以创建不同配置的图像,下面代码创建两种配置的图像:ARGB_8888,ARGB_4444,新图像每个像素占用的字节大小不一。

int w = mBitmap2.getWidth();    int h = mBitmap2.getHeight();    int[] pixels = new int[w*h];    mBitmap2.getPixels(pixels, 0, w, 0, 0, w, h);    mBitmap3 = Bitmap.createBitmap(pixels, 0, w, w, h,     Bitmap.Config.ARGB_8888);    mBitmap4 = Bitmap.createBitmap(pixels, 0, w, w, h,     Bitmap.Config.ARGB_4444);

对应Drawable资源来说,更一般的做法是直接使用Resources对象来取得相应的Drawable资源:

mDrawable = context.getResources().getDrawable     (R.drawable.button);    mDrawable.setBounds(150, 20, 300, 100);



android.graphics.Movie对应可以用来解码.gif动画资源,从数组或是直接从InputStream中解码:R.drawable.animated_gif 为一飘动的旗帜动画。

if (DECODE_STREAM) {     mMovie = Movie.decodeStream(is);} else {     byte[] array = streamToBytes(is);     mMovie = Movie.decodeByteArray(array, 0, array.length);  }



更多相关文章

  1. android中圆角图像生成方法
  2. 《Beginning Android(安卓)Games》Chapter3给出的基本框架
  3. Android自定义相机实现自动对焦和手动对焦
  4. Android(安卓)中dp 和px 转换及原理分析
  5. Android(安卓)dip, dp, px, sp区别
  6. android中的dp,px深度解析
  7. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详
  8. Android原生编解码接口 MediaCodec 之——完全解析
  9. android 图片下载方法总结

随机推荐

  1. Android2.2添加busybox 支持——基于Andr
  2. Android Shape Drawable 静态使用和动态
  3. Android自学笔记1——基础知识
  4. Android系统资源
  5. Android 3 开发环境搭建
  6. Android 的系统属性(SystemProperties)分
  7. Android的BroadcastReceiver简介
  8. android中的计步问题及计步传感器分析
  9. Android开发的未来发展方向,难道android真
  10. Android日记之2012\01\13