/** * 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】图片切换组件ImageSwitcher的运用
  2. Android 创建圆形背景图片
  3. android用于打开各种文件的intent
  4. Android base64 上传图片
  5. Android显示网络图片相关实现方法浅谈
  6. android 中Drawable跟Bitmap转换及常用于图片相关操作方法 - And
  7. Delphi XE5 for android 调用Java类库必看的文件
  8. android带图片的AlertDialog和文件管理器(代码)

随机推荐

  1. 伪类选择器的应用/盒模型的分析
  2. 【Linux学习】OpenCV+ROS 实现人脸识别(Ub
  3. 常用的两种伪类选择器
  4. 伪类和伪元素和盒模型
  5. Ubuntu软件更新更换源
  6. CSS常用伪类选择器的总结与盒子模型的简
  7. 0707伪类选择器/盒模型
  8. html基础:css伪类选择器的使用和盒模型的
  9. 选择器和盒模型
  10. 伪类选择器的使用与盒模型属性使用方式