日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中Bitmap和Drawable

發布時間:2025/3/13 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)?{??
  • ????????//?取?drawable?的長寬??
  • ????????int?w?=?drawable.getIntrinsicWidth();??
  • ????????int?h?=?drawable.getIntrinsicHeight();??
  • ??
  • ????????//?取?drawable?的顏色格式??
  • ????????Bitmap.Config?config?=?drawable.getOpacity()?!=?PixelFormat.OPAQUE???Bitmap.Config.ARGB_8888??
  • ????????????????:?Bitmap.Config.RGB_565;??
  • ????????//?建立對應?bitmap??
  • ????????Bitmap?bitmap?=?Bitmap.createBitmap(w,?h,?config);??
  • ????????//?建立對應?bitmap?的畫布??
  • ????????Canvas?canvas?=?new?Canvas(bitmap);??
  • ????????drawable.setBounds(0,?0,?w,?h);??
  • ????????//?把?drawable?內容畫到畫布中??
  • ????????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);??
  • ????//?Set?the?Transfer?mode?to?be?porter?duff?and?destination?in??
  • ????paint.setXfermode(new?PorterDuffXfermode(Mode.DST_IN));??
  • ????//?Draw?a?rectangle?using?the?paint?with?our?linear?gradient??
  • ????canvas.drawRect(0,?h,?w,?bitmapWithReflection.getHeight()??
  • ????????????+?reflectionGap,?paint);??
  • ??
  • ????return?bitmapWithReflection;??
  • }??
  • ?三、Drawable

    1、Bitmap轉換成Drawable

    Java代碼??
  • Bitmap?bm=xxx;?//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();??
  • ????//?drawable轉換成bitmap??
  • ????Bitmap?oldbmp?=?drawableToBitmap(drawable);??
  • ????//?創建操作圖片用的Matrix對象??
  • ????Matrix?matrix?=?new?Matrix();??
  • ????//?計算縮放比例??
  • ????float?sx?=?((float)?w?/?width);??
  • ????float?sy?=?((float)?h?/?height);??
  • ????//?設置縮放比例??
  • ????matrix.postScale(sx,?sy);??
  • ????//?建立新的bitmap,其內容是對原bitmap的縮放后的圖??
  • ????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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。