1. 程式人生 > >android圓形圖片裁剪demo以及實現

android圓形圖片裁剪demo以及實現

Bitmap getBitmap() { try { // srcPic.getDrawingCache()獲取View截圖在某些情況下報錯了。 // 現在用一種新的獲取view中影象的方法取代getDrawingCache()方法. // 另:在使用createBitmap()增加try..catch..以防止不斷生成bitmap可能導致的oom int startX = (int) (clipview.getCircleCenterPX() - clipview.getRadius()); int startY = (int) (clipview
.getCircleCenterPY() - clipview.getRadius()); Log.i(TAG, "getBitmap()startX=" + startX + ",startY=" + startY + ",clipview.getClipWidth()=" + clipview.getClipWidth() + ",clipview.getWidth()=" + clipview.getWidth() + ",clipview.getCircleCenterPX()="
+ clipview.getCircleCenterPX() + ",clipview.getRadius()=" + clipview.getRadius() + ",clipview.getCircleCenterPY()=" + clipview.getCircleCenterPY()); Bitmap finalBitmap = Bitmap.createBitmap( loadBitmapFromView(srcPic), startX, startY, clipview.getClipWidth(),
clipview.getClipHeight()); // 釋放資源 srcPic.destroyDrawingCache(); Log.i(TAG, "getBitmap() finalBitmap=" + finalBitmap); return getCircleBitmap(finalBitmap); } catch (OutOfMemoryError err) { Toast.makeText(this, "儲存頭像失敗", Toast.LENGTH_SHORT).show(); Log.e(TAG, err.getMessage()); return null; } catch (Exception e) { Toast.makeText(this, "儲存頭像失敗!", Toast.LENGTH_SHORT).show(); Log.e(TAG, e.getMessage()); return null; } } /** * @description 獲取圓形裁剪框內截圖 * @param bitmap src圖片 * @return */ public static Bitmap getCircleBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); //在畫布上繪製一個圓 -1是為了去掉白色的邊框 canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2 - 1, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); Log.i(TAG, "getCircleBitmap() output=" + output); return output; }