欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android Bitmap 图片处理工具类,,将Drawable转为B

来源: javaer 分享于  点击 31553 次 点评:157

Android Bitmap 图片处理工具类,,将Drawable转为B


将Drawable转为Bitmap ```javapublic static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); // canvas.setBitmap(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; }

将Bitmap转为btye[]```java public static byte[] bmpToByteArray(final Bitmap bmp,            final boolean needRecycle) {        ByteArrayOutputStream output = new ByteArrayOutputStream();        bmp.compress(CompressFormat.JPEG, 80, output);        if (needRecycle) {            bmp.recycle();        }        byte[] result = output.toByteArray();        try {            output.close();        } catch (Exception e) {            e.printStackTrace();        }        return result;    }

将图片存储到sdcard中```java public static void storeImageToSDCARD(Bitmap colorImage, String ImageName, String path) { File file = new File(path); if (!file.exists()) { file.mkdir(); } File imagefile = new File(file, ImageName + ".jpg"); try { imagefile.createNewFile(); FileOutputStream fos = new FileOutputStream(imagefile); colorImage.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

sdcard取图片```java    public static Bitmap getImg(String path,String picName) {        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {            return null;        }        try {            File file = new File(path, picName + ".png");            FileInputStream inputStream = new FileInputStream(file);            byte[] b = new byte[inputStream.available()];            inputStream.read(b);            Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);            return bitmap;        } catch (Exception e) {            return null;        }    }```网络获取图片```javapublic static Bitmap getImageByNet(String urlpath) throws Exception {        URL url = new URL(urlpath);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        conn.setRequestMethod("GET");        conn.setConnectTimeout(5 * 1000);        Bitmap bitmap = null;        if (conn.getResponseCode() == 200) {            InputStream inputStream = conn.getInputStream();            bitmap = BitmapFactory.decodeStream(inputStream);        }        return bitmap;    }

将两个bitmap对象整合并保存为一张图片

    public Bitmap combineBitmap(Bitmap background, Bitmap foreground) {        //第一张图片的宽高        int bgWidth = background.getWidth();        int bgHeight = background.getHeight();        //第二章图片的宽高        int fgWidth = foreground.getWidth();        int fgHeight = foreground.getHeight();        //创建一个新的bitmao  高度等于两张高度的总和 用来竖列拼接        Bitmap newmap = Bitmap.createBitmap(bgWidth, bgHeight + fgHeight,                android.graphics.Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(newmap);        //画上第一张图片        canvas.drawBitmap(background, 0, 0, null);        //从第一张图片的下边开始画入第二张图片        canvas.drawBitmap(foreground, 0, bgHeight, null);        return newmap;    }```Bitmap旋转一定角度```java    public static Bitmap rotate(Bitmap b, int degrees) {        if (degrees != 0 && b != null) {            Matrix m = new Matrix();            m.setRotate(degrees, (float) b.getWidth() / 2,                    (float) b.getHeight() / 2);            try {                Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(),                        b.getHeight(), m, true);                return b2;// 正常情况下返回旋转角度的图            } catch (OutOfMemoryError ex) {                return b;// 内存溢出返回原图            } finally {                b.recycle();// 释放资源            }        }        return b;    }

Bitmap画一个圆角图 java public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) { if (bitmap == null) { return bitmap; } try { 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); 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; } catch (OutOfMemoryError e) { // TODO: handle exception System.gc(); return null; } } 从view 得到图片 java public static Bitmap getBitmapFromView(View view) { view.destroyDrawingCache(); view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.setDrawingCacheEnabled(true); Bitmap bitmap = view.getDrawingCache(true); return bitmap; } 添加水印 java public static Bitmap watermarkBitmap(Bitmap src, Bitmap watermark, String title) { if (src == null) { return null; } int w = src.getWidth(); int h = src.getHeight(); // 需要处理图片太大造成的内存超过的问题,这里我的图片很小所以不写相应代码了 Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图 Canvas cv = new Canvas(newb); cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src Paint paint = new Paint(); // 加入图片 if (watermark != null) { int ww = watermark.getWidth(); int wh = watermark.getHeight(); paint.setAlpha(50); cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, paint);// 在src的右下角画入水印 } // 加入文字 if (title != null) { String familyName = "宋体"; Typeface font = Typeface.create(familyName, Typeface.BOLD); TextPaint textPaint = new TextPaint(); textPaint.setColor(Color.RED); textPaint.setTypeface(font); textPaint.setTextSize(22); // 这里是自动换行的 StaticLayout layout = new StaticLayout(title, textPaint, w, Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true); layout.draw(cv); // 文字就加左上角算了 // cv.drawText(title,0,40,paint); } cv.save(Canvas.ALL_SAVE_FLAG);// 保存 cv.restore();// 存储 return newb; } 等比例压缩图片 ```java public static Bitmap getBitmap(Bitmap bitmap, int screenWidth, int screenHight) { int w = bitmap.getWidth(); int h = bitmap.getHeight();

    Matrix matrix = new Matrix();    float scale = (float) screenWidth / w;    float scale2 = (float) screenHight / h;    //取比例小的值 可以把图片完全缩放在屏幕内    scale = scale < scale2 ? scale : scale2;    // 都按照宽度scale 保证图片不变形.根据宽度来确定高度    matrix.postScale(scale, scale);    // w,h是原图的属性.    return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);}

以最省内存的方式读取本地资源的图片java public static Bitmap ReadBitmapById(Context context, int drawableId, int screenWidth, int screenHight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Config.ARGB_8888; options.inInputShareable = true; options.inPurgeable = true; InputStream stream = context.getResources().openRawResource(drawableId); Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options); return getBitmap(bitmap, screenWidth, screenHight); }```

相关栏目:

用户点评