Android(安卓)Bitmap最全基本操作:与Drawable 、File、btye[]互转
16lz
2021-12-04
/** * 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; }}
更多相关文章
- android 程序日志记录
- android调用系统相机并调整照片大小保存,最后上传照片
- Android(安卓)按键驱动
- android实现回车键的监听
- android用于打开各种文件的intent
- Android_linux下android platforms下载地址
- android计算器布局(TableLayout)
- android ndk 入门 - 一个简单的ndk工程
- Delphi XE5 for android 调用Java类库必看的文件