Hello Android - Bitmap转换为黑白的灰度图和加圆角效果

来源:互联网 发布:vba数据录入 编辑:程序博客网 时间:2024/05/16 08:33
/**  * 处理图片的工具类. *  */public class ImageTools {        /***//**     * 图片去色,返回灰度图片     * @param bmpOriginal 传入的图片     * @return 去色后的图片     */    public static Bitmap toGrayscale(Bitmap bmpOriginal) {        int width, height;        height = bmpOriginal.getHeight();        width = bmpOriginal.getWidth();            Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);        Canvas c = new Canvas(bmpGrayscale);        Paint paint = new Paint();        ColorMatrix cm = new ColorMatrix();        cm.setSaturation(0);        ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);        paint.setColorFilter(f);        c.drawBitmap(bmpOriginal, 0, 0, paint);        return bmpGrayscale;    }            /***//**     * 去色同时加圆角     * @param bmpOriginal 原图     * @param pixels 圆角弧度     * @return 修改后的图片     */    public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {        return toRoundCorner(toGrayscale(bmpOriginal), pixels);    }        /***//**     * 把图片变成圆角     * @param bitmap 需要修改的图片     * @param pixels 圆角的弧度     * @return 圆角图片     */    public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap                .getHeight(), 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());        final RectF rectF = new RectF(rect);        final float roundPx = pixels;        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;    }        /***//**     * 使圆角功能支持BitampDrawable     * @param bitmapDrawable      * @param pixels      * @return     */    public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable, int pixels) {        Bitmap bitmap = bitmapDrawable.getBitmap();        bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));        return bitmapDrawable;    }}