圖片圓角處理

在Android中可以很容通過圖像疊加的規則爲圖片添加圓角效果。正常情況下,在已有的圖像上繪圖時將會在其上面添加一層新的圖形。如果繪圖時使用的Paint是完全不透明的,那麼它將完全遮擋住下面的圖像,如果Paint是部分透明的,那麼它將會對重疊部分圖像的顏色疊加處理。通過PorterDuffXfermode規則可以設置繪製圖像時的疊加規則。PorterDuffXfermode是非常強大的轉換模式,使用它可以設置圖像疊加的Porter-Duff規則,來控制Paint如何與Canvas上已有的圖像進行疊加。下面列舉了常用的12條Porter-Duff規則及其表示的含義:

    PorterDuff.Mode.CLEAR 清除畫布上圖像
    PorterDuff.Mode.SRC 顯示上層圖像
    PorterDuff.Mode.DST 顯示下層圖像
    PorterDuff.Mode.SRC_OVER上下層圖像都顯示,下層居上顯示
    PorterDuff.Mode.DST_OVER 上下層都顯示,下層居上顯示
    PorterDuff.Mode.SRC_IN 取兩層圖像交集部分,只顯示上層圖像
    PorterDuff.Mode.DST_IN 取兩層圖像交集部分,只顯示下層圖像
    PorterDuff.Mode.SRC_OUT 取上層圖像非交集部分
    PorterDuff.Mode.DST_OUT 取下層圖像非交集部分
    PorterDuff.Mode.SRC_ATOP 取下層圖像非交集部分與上層圖像交集部分
    PorterDuff.Mode.DST_ATOP 取上層圖像非交集部分與下層圖像交集部分
    PorterDuff.Mode.XOR 取兩層圖像的非交集部分

下面使用PorterDuff.Mode.SRC_IN規則來給圖片添加圓角效果,主要的思路是先繪製一個圓角矩形,然後在上面繪製圖像,取圖像與圓角矩形的交集部分,只保留圖像。Java代碼如下:

  // 圖片圓角處理
  public Bitmap getRoundedBitmap() {
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.frame);
    // 創建新的位圖
    Bitmap bgBitmap =
        Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Config.ARGB_8888);
    // 把創建的位圖作爲畫板
    Canvas mCanvas = new Canvas(bgBitmap);

    Paint mPaint = new Paint();
    Rect mRect = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
    RectF mRectF = new RectF(mRect);
    // 設置圓角半徑爲20
    float roundPx = 15;
    mPaint.setAntiAlias(true);
    // 先繪製圓角矩形
    mCanvas.drawRoundRect(mRectF, roundPx, roundPx, mPaint);

    // 設置圖像的疊加模式
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    // 繪製圖像
    mCanvas.drawBitmap(mBitmap, mRect, mRect, mPaint);

    return bgBitmap;
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章