| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

Android Bitmap 图片处理工具类

将Drawable转为Bitmap

public 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[]

 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中

 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取图片

 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;    }   }

网络获取图片

public 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旋转一定角度

 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画一个圆角图

 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 得到图片

 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;   }

添加水印

 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;   }

等比例压缩图片

      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);   }
以最省内存的方式读取本地资源的图片

        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);   }


</div> </div> </div>