首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Android 圖片處理工具類:Bitmap/Drawable 互轉、圓角、資源讀取完整指南

     編輯:Java 相關知識

常見 Bitmap 建立方式

來源方法範例
RGB 字串Color.parseColor() + eraseColor()createColorBitmap("#cce8cf", 200, 50)
Color 常數eraseColor(Color.BLUE)createColorBitmap(Color.BLUE, 200, 50)
byte[]BitmapFactory.decodeByteArray()網路下載後轉圖
檔案路徑BitmapFactory.decodeFile()SD 卡圖片
ResourcesBitmapFactory.decodeResource()APK 內置圖片
InputStreamBitmapFactory.decodeStream()網路流、assets
DrawableBitmapFactory.decodeResource()同上

Bitmap ↔ Drawable 互轉


// Drawable → Bitmap
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.icon);

// Bitmap → Drawable
Drawable drawable = new BitmapDrawable(resources, bitmap);

圓角 Bitmap 產生器


public static Bitmap getRoundedCornerBitmap(Bitmap src, int radius) {
    Bitmap output = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
    RectF rectF = new RectF(rect);

    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(0xff424242);
    canvas.drawRoundRect(rectF, radius, radius, paint);

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(src, rect, rect, paint);

    return output;
}
  • radius:圓角半徑(像素),值越大越圓。
  • 核心原理:先畫圓角矩形遮罩,再用 SRC_IN 模式只保留原圖與遮罩交集區域。

效能與記憶體提醒

  • BitmapFactory.decodeXxx 會完整解碼至記憶體,大圖請用 inSampleSize 縮放。
  • 不再使用的 Bitmap 呼叫 recycle()(API 19+ 多由 GC 管理,但主動釋放更保險)。
  • 頻繁建立圓角圖建議快取或使用 RoundedBitmapDrawableFactory (Support Library)。

Kotlin 擴充函數建議


fun Bitmap.rounded(radius: Int): Bitmap = BitmapUtils.getRoundedCornerBitmap(this, radius)
fun Int.toColorBitmap(w: Int, h: Int) = BitmapUtils.createColorBitmap(this, w, h)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved