生活随笔
收集整理的這篇文章主要介紹了
Android中Bitmap和Drawable
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、相關概念
1、Drawable就是一個可畫的對象,其可能是一張位圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,創建相應的可畫對象 2、Canvas畫布,繪圖的目的區域,用于繪圖 3、Bitmap位圖,用于圖的處理 4、Matrix矩陣
二、Bitmap
1、從資源中獲取Bitmap
Java代碼??
Resources?res?=?getResources();??Bitmap?bmp?=?BitmapFactory.decodeResource(res,?R.drawable.icon);?? ?
2、Bitmap → byte[]
Java代碼??
public?byte[]?Bitmap2Bytes(Bitmap?bm)?{??????ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();??????bm.compress(Bitmap.CompressFormat.PNG,?100,?baos);??????return?baos.toByteArray();??}?? ?3、byte[] → Bitmap
Java代碼??
public?Bitmap?Bytes2Bimap(byte[]?b)?{??????if?(b.length?!=?0)?{??????????return?BitmapFactory.decodeByteArray(b,?0,?b.length);??????}?else?{??????????return?null;??????}??}?? 4、Bitmap縮放
Java代碼??
public?static?Bitmap?zoomBitmap(Bitmap?bitmap,?int?width,?int?height)?{??????int?w?=?bitmap.getWidth();??????int?h?=?bitmap.getHeight();??????Matrix?matrix?=?new?Matrix();??????float?scaleWidth?=?((float)?width?/?w);??????float?scaleHeight?=?((float)?height?/?h);??????matrix.postScale(scaleWidth,?scaleHeight);??????Bitmap?newbmp?=?Bitmap.createBitmap(bitmap,?0,?0,?w,?h,?matrix,?true);??????return?newbmp;??}?? ??5、將Drawable轉化為Bitmap
Java代碼??
public?static?Bitmap?drawableToBitmap(Drawable?drawable)?{????????????????????int?w?=?drawable.getIntrinsicWidth();??????????int?h?=?drawable.getIntrinsicHeight();??????????????????????Bitmap.Config?config?=?drawable.getOpacity()?!=?PixelFormat.OPAQUE???Bitmap.Config.ARGB_8888??????????????????:?Bitmap.Config.RGB_565;????????????????????Bitmap?bitmap?=?Bitmap.createBitmap(w,?h,?config);????????????????????Canvas?canvas?=?new?Canvas(bitmap);??????????drawable.setBounds(0,?0,?w,?h);????????????????????drawable.draw(canvas);??????????return?bitmap;??????}?? 6、獲得圓角圖片?
Java代碼??
public?static?Bitmap?getRoundedCornerBitmap(Bitmap?bitmap,?float?roundPx)?{??????int?w?=?bitmap.getWidth();??????int?h?=?bitmap.getHeight();??????Bitmap?output?=?Bitmap.createBitmap(w,?h,?Config.ARGB_8888);??????Canvas?canvas?=?new?Canvas(output);??????final?int?color?=?0xff424242;??????final?Paint?paint?=?new?Paint();??????final?Rect?rect?=?new?Rect(0,?0,?w,?h);??????final?RectF?rectF?=?new?RectF(rect);??????paint.setAntiAlias(true);??????canvas.drawARGB(0,?0,?0,?0);??????paint.setColor(color);??????canvas.drawRoundRect(rectF,?roundPx,?roundPx,?paint);??????paint.setXfermode(new?PorterDuffXfermode(Mode.SRC_IN));??????canvas.drawBitmap(bitmap,?rect,?rect,?paint);????????return?output;??}?? ?7、獲得帶倒影的圖片
Java代碼??
public?static?Bitmap?createReflectionImageWithOrigin(Bitmap?bitmap)?{??????final?int?reflectionGap?=?4;??????int?w?=?bitmap.getWidth();??????int?h?=?bitmap.getHeight();????????Matrix?matrix?=?new?Matrix();??????matrix.preScale(1,?-1);????????Bitmap?reflectionImage?=?Bitmap.createBitmap(bitmap,?0,?h?/?2,?w,??????????????h?/?2,?matrix,?false);????????Bitmap?bitmapWithReflection?=?Bitmap.createBitmap(w,?(h?+?h?/?2),??????????????Config.ARGB_8888);????????Canvas?canvas?=?new?Canvas(bitmapWithReflection);??????canvas.drawBitmap(bitmap,?0,?0,?null);??????Paint?deafalutPaint?=?new?Paint();??????canvas.drawRect(0,?h,?w,?h?+?reflectionGap,?deafalutPaint);????????canvas.drawBitmap(reflectionImage,?0,?h?+?reflectionGap,?null);????????Paint?paint?=?new?Paint();??????LinearGradient?shader?=?new?LinearGradient(0,?bitmap.getHeight(),?0,??????????????bitmapWithReflection.getHeight()?+?reflectionGap,?0x70ffffff,??????????????0x00ffffff,?TileMode.CLAMP);??????paint.setShader(shader);????????????paint.setXfermode(new?PorterDuffXfermode(Mode.DST_IN));????????????canvas.drawRect(0,?h,?w,?bitmapWithReflection.getHeight()??????????????+?reflectionGap,?paint);????????return?bitmapWithReflection;??}?? ?三、Drawable
1、Bitmap轉換成Drawable
Java代碼??
Bitmap?bm=xxx;???BitmapDrawable?bd=?new?BitmapDrawable(getResource(),?bm);???因為BtimapDrawable是Drawable的子類,最終直接使用bd對象即可。?? 2、Drawable縮放
Java代碼??
public?static?Drawable?zoomDrawable(Drawable?drawable,?int?w,?int?h)?{??????int?width?=?drawable.getIntrinsicWidth();??????int?height?=?drawable.getIntrinsicHeight();????????????Bitmap?oldbmp?=?drawableToBitmap(drawable);????????????Matrix?matrix?=?new?Matrix();????????????float?sx?=?((float)?w?/?width);??????float?sy?=?((float)?h?/?height);????????????matrix.postScale(sx,?sy);????????????Bitmap?newbmp?=?Bitmap.createBitmap(oldbmp,?0,?0,?width,?height,??????????????matrix,?true);??????return?new?BitmapDrawable(newbmp);??}?? ?
轉載于:https://www.cnblogs.com/siyiganshou/archive/2012/08/15/2639700.html
總結
以上是生活随笔為你收集整理的Android中Bitmap和Drawable的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。