/** * Created by kingadmin on 2018/4/17. */public class BitmapUtil {    private static BitmapUtil btimapUtil;    private Context context;    private BitmapUtil(Context context) {        this.context = context;    }    public static BitmapUtil getBtimapUtil(Context context) {        if (btimapUtil == null) {            synchronized (BitmapUtil.class) {                btimapUtil = new BitmapUtil(context);            }        }        return btimapUtil;    }    /**     * 文件转Bitmap     */    public Bitmap fileToBitmap(String filePath) {        File file = new File(filePath);        BitmapFactory.Options options = new BitmapFactory.Options();        /**         *压缩长宽各为一半避免图片过大装载不了         */        options.inPurgeable = true;        options.inSampleSize = 2;        return BitmapFactory.decodeFile(filePath, options);    }    /**     * Bitmap转文件     */    public File bitmapToFile(Bitmap bitmap, String saveFilePath) {        File file = new File(saveFilePath);//将要保存图片的路径        try {            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);            bos.flush();            bos.close();            return file;        } catch (IOException e) {            e.printStackTrace();            return null;        }    }    /**     * 数组转Bitmap     */    public Bitmap btyesToBtimap(byte[] bytes) {        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);    }    /**     * Btimap转数组     */    public byte[] btimapToBtyes(Bitmap bitmap) {        ByteArrayOutputStream baos = new ByteArrayOutputStream();        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);        return baos.toByteArray();    }    /**     * Bitmap转Drawable     */    public Drawable btimapToDrawable(Bitmap bitmap) {        return new BitmapDrawable(context.getResources(), bitmap);    }    /**     * Drawable转Bitmap     */    public Bitmap drawableToBitmap(Drawable drawable) {        int w = drawable.getIntrinsicWidth();        int h = drawable.getIntrinsicHeight();        // 取 drawable 的颜色格式        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;        Bitmap bitmap = Bitmap.createBitmap(w, h, config);        //建立对应 bitmap 的画布        Canvas canvas = new Canvas(bitmap);        drawable.setBounds(0, 0, w, h);        // 把 drawable 内容画到画布中        drawable.draw(canvas);        return bitmap;    }    /**     * 带圆角的绘制转Bitmap     */    public Bitmap creatRoundedBitmap(Bitmap bitmap, float roundPx) {        int w = bitmap.getWidth();        int h = bitmap.getHeight();        Bitmap output = Bitmap.createBitmap(w, h, 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, w, h);        final RectF rectF = new RectF(rect);        paint.setAntiAlias(true);        canvas.drawARGB(0, 0, 0, 0);        paint.setColor(color);        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        canvas.drawBitmap(bitmap, rect, rect, paint);        return output;    }    /**     * 带倒影的绘制Bitmap     */    public Bitmap createReflectionBitmap(Bitmap bitmap) {        final int reflectionGap = 4;        int w = bitmap.getWidth();        int h = bitmap.getHeight();        /**         * 获取矩阵变换         * */        Matrix matrix = new Matrix();        matrix.preScale(1, -1);        Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w, h / 2, matrix, false);        Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2), Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bitmapWithReflection);        canvas.drawBitmap(bitmap, 0, 0, null);        Paint deafalutPaint = new Paint();        canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);        canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);        Paint paint = new Paint();        LinearGradient shader = new LinearGradient(0, bitmap.getHeight(),                0, bitmapWithReflection.getHeight() + reflectionGap,                0x70ffffff, 0x00ffffff, Shader.TileMode.CLAMP);        paint.setShader(shader);        // Set the Transfer mode to be porter duff and destination in        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));        // Draw a rectangle using the paint with our linear gradient        canvas.drawRect(0, h, w, bitmapWithReflection.getHeight() + reflectionGap, paint);        return bitmapWithReflection;    }}

更多相关文章

  1. android 程序日志记录
  2. android调用系统相机并调整照片大小保存,最后上传照片
  3. Android(安卓)按键驱动
  4. android实现回车键的监听
  5. android用于打开各种文件的intent
  6. Android_linux下android platforms下载地址
  7. android计算器布局(TableLayout)
  8. android ndk 入门 - 一个简单的ndk工程
  9. Delphi XE5 for android 调用Java类库必看的文件

随机推荐

  1. Google 新物联网平台初体验—Android Thi
  2. Android(安卓)自定义Toast显示(不限时+在
  3. 部署应用程序到Android手机上
  4. Android百度定位API使用方法
  5. android camera拍摄surfaceview预览界面
  6. Android中使用gridview如何让图片在上文
  7. Android RadioButton的自定义样式
  8. 【Arcgis for android】spatialite打开sh
  9. MTK 6573平台 android 2.3系统上添加维文
  10. Android(安卓)Jetpack之生命周期的处理