Android裁剪圖片為圓形圖片

來源:互聯網
上載者:User

以前在eoe論壇中找過裁剪圖片為圓形圖片的方法,但是效果都不是很理想,這幾天因為公司業務的要求,需要對頭像進行裁剪以圓形
的方式顯示,這個方法是根據傳入的圖片的高度(height)和寬度(width)決定的,如果是 width <= height
時,則會裁剪高度,裁剪的地區是寬度不變高度從頂部到寬度width的長度;如果 width >
height,則會裁剪寬度,裁剪的地區是高度不變,寬度是取的圖片寬度的中心地區,不過不同的業務需求,對裁剪圖片要求不一樣,可以根據業務的需求來調
整裁剪的地區。

好了,不多說了,直接上代碼

 

        /**         * 轉換圖片成圓形         * @param bitmap 傳入Bitmap對象         * @return         */        public Bitmap toRoundBitmap(Bitmap bitmap) {                int width = bitmap.getWidth();                int height = bitmap.getHeight();                float roundPx;                float left,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom;                if (width <= height) {                        roundPx = width / 2;                        top = 0;                        bottom = width;                        left = 0;                        right = width;                        height = width;                        dst_left = 0;                        dst_top = 0;                        dst_right = width;                        dst_bottom = width;                } else {                        roundPx = height / 2;                        float clip = (width - height) / 2;                        left = clip;                        right = width - clip;                        top = 0;                        bottom = height;                        width = height;                        dst_left = 0;                        dst_top = 0;                        dst_right = height;                        dst_bottom = height;                }                                 Bitmap output = Bitmap.createBitmap(width,                                height, Config.ARGB_8888);                Canvas canvas = new Canvas(output);                                 final int color = 0xff424242;                final Paint paint = new Paint();                final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom);                final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom);                final RectF rectF = new RectF(dst);                 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, src, dst, paint);                return output;        }

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.