1、Drawable → Bitmap

public static Bitmap drawableToBitmap(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; }

2、从资源中获取Bitmap

Resources res=getResources();   Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);

3、Bitmap → byte[]

private byte[] Bitmap2Bytes(Bitmap bm){     ByteArrayOutputStream baos = new ByteArrayOutputStream();     bm.compress(Bitmap.CompressFormat.PNG, 100, baos);     return baos.toByteArray();    }

4、 byte[] → Bitmap

private Bitmap Bytes2Bimap(byte[] b){             if(b.length!=0){                 return BitmapFactory.decodeByteArray(b, 0, b.length);             }             else {                 return null;             }       }

一个程序(电子书)中,涉及到对图像的处理,主要是对Bitmap的处理。要把一个Bitmap画到View上,必须用到的类有android.graphics.Canvasandroid.graphics.Bitmap。方法很简单,在View里面,重载onDraw(Canvas canvas)方法,然后用canvas.drawBitmap()方法,将其画在屏幕上。

public class MyView extends View {           private Bitmap mBitmap;           public MyView(Context context) {         super(context);         initialize();     }       private void initialize() {                   Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();                   mBitmap = bmp;               }           @Override protected void onDraw(Canvas canvas) { // super.onDraw(canvas); //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。         canvas.drawBitmap(mBitmap, 0, 0, null);     } }

上面是直接将原图画在屏幕上,没有任何处理,因为图片比屏幕大,所以超出的部分看不到。我们试着将图片拉伸以填满整个屏幕。

public class MyView extends View {           private Bitmap mBitmap;     private Matrix mMatrix = new Matrix();           private static int mScreenWidth;     private static int mScreenHeight;           public MyView(Context context) {         super(context);         initialize();     }       private void initialize() {         DisplayMetrics dm = getResources().getDisplayMetrics();         mScreenWidth = dm.widthPixels;         mScreenHeight = dm.heightPixels;                   Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();         mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);     }           @Override protected void onDraw(Canvas canvas) { // super.onDraw(canvas); //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。         canvas.drawBitmap(mBitmap, 0, 0, null);     } }

上面简单介绍了把Bitmap画到屏幕上,以及缩放Bitmap以铺满屏幕。对Bitmap的操作还有很多。比如截取Bitmap的部分区域,可以使用:

mBitmap = Bitmap.createBitmap(bmp, 100, 100, 120, 120);

这句代码从bmp(100,100)处截取120*120像素区域放到新的Bitmap中。缩放一个Bitmap,前面一篇已经涉及到了,可以用Bitmap.createScaledBitmap()方法根据给定的Bitmap创建 一个新的,缩放后的Bitmap

Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);
其中mScreenWidthmScreenHeight是屏幕的宽度和高度,这里就将bmp拉伸到整个屏幕。

每次createBitmap,都会分配新的内存,带来资源的 消耗,所以用BitmapcreateBitmap虽然简单方便,但是不是最优方 法。介绍一个比较好点的方法,不用创建新的Bitmap,用Canvas在画的时候直接缩放或者剪切。

canvas.drawBitmap(mBitmap, null, new Rect(0, 0, 200, 200), null);
这里的Rect对象表示一个矩形区域,从(0,0)(200,200)之间的矩形区域。这段代码将把mBitmap缩放并绘制到屏幕上的(0,0)(200,200)之间的区域。

这个方法还有第二个参数我给的是null,其实这个参数也是个Rect对象,表示源Rect。把图片的某个区域拿出来画到屏幕的指定区域。

canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100, 200, 200), null);
这里将mBitmap(100,100)(300,300)区域拿出来,自动缩放并画到屏幕的(100,100)(200,200)区域。

对于Bitmap的处理,上面介绍的是最简单的两种,平移和缩放。而要是需要更复杂的处理,比如旋转和倾斜,就得使用Matrix了。

更多相关文章

  1. Android(安卓)支持多屏幕机制
  2. Android(安卓)studio图片ERROR: 9-patch image xx .9.png malfor
  3. android 中获取屏幕大小
  4. Android监听屏幕屏幕锁屏与解锁
  5. android截屏并将截图缩放
  6. Wakelock API详解
  7. Android单击屏幕获得坐标,屏幕多点触摸测试器
  8. Android(安卓)点击空白区域 软键盘消失
  9. 图片比例缩放以及bitMap转BitmapDrawable

随机推荐

  1. Android中dip(dp)和pix互相转化
  2. Android中通过getSystemService取得服务
  3. 【备忘】2016最新独家老罗Android视频教
  4. android webview 正常显示 Html中的 Fram
  5. android获取各种系统路径的方法
  6. Android中JNI程序的编写(zhuan)
  7. 使用libevent实现最简单的android http-s
  8. MediaRecorder流程分析
  9. Android 7.0 自动安装APK及拍照崩溃问题
  10. android中常用的方法备忘