最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android BitmapUtils工具類使用詳解

 更新時間:2018年07月27日 17:04:03   作者:xi陽  
這篇文章主要為大家詳細介紹了Android BitmapUtils工具類的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android BitmapUtils工具類的具體代碼,供大家參考,具體內(nèi)容如下

public final class BitmapUtils {
  public static final String TAG = "BitmapUtil";
  private static int sShotScreenWidth = 480;
  private static int sShotScreenHeight = 720;
  private static int sShotScreenSize = sShotScreenWidth * sShotScreenHeight;

  @SuppressLint("StaticFieldLeak")
  private static Context mContext;
  @SuppressLint("StaticFieldLeak")
  private static Activity mActivity;

  public void init(Context context,Activity ac) {
    mContext=context;
    mActivity=ac;

    DisplayMetrics dm = new DisplayMetrics();
    ac.getWindowManager().getDefaultDisplay().getMetrics(dm);
    //獲取屏幕分辨率
    sShotScreenWidth = dm.widthPixels;
    sShotScreenHeight = dm.heightPixels;
    sShotScreenSize = sShotScreenWidth * sShotScreenHeight;
  }

  /**
   * 圖片合成
   * 
   * @param bitmap 位圖1
   * @param mark 位圖2
   * @return Bitmap
   */
  public static Bitmap createBitmap(Bitmap bitmap, Bitmap mark) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    int mW = mark.getWidth();
    int mH = mark.getHeight();
    Bitmap newbitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 創(chuàng)建一個長寬一樣的位圖

    Canvas cv = new Canvas(newbitmap);
    cv.drawBitmap(bitmap, 0, 0, null);// 在 0,0坐標開始畫入bitmap
    cv.drawBitmap(mark, w - mW , h - mH , null);// 在右下角畫入水印mark
    cv.save(Canvas.ALL_SAVE_FLAG);// 保存
    cv.restore();// 存儲
    return newbitmap;
  }

  /**
   * 放大縮小圖片
   * @param bitmap 位圖
   * @param w 新的寬度
   * @param h 新的高度
   * @return Bitmap
   */
  public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    Matrix matrix = new Matrix();
    float scaleWidht = ((float) w / width);
    float scaleHeight = ((float) h / height);
    matrix.postScale(scaleWidht, scaleHeight);
    return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
  }

  /**
   * 旋轉圖片
   * @param bitmap 要旋轉的圖片
   * @param angle 旋轉角度
   * @return bitmap
   */
  public static Bitmap rotate(Bitmap bitmap,int angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
        bitmap.getHeight(), matrix, true);
  }

  /**
   * 圓形圖片
   *@param source 位圖
   * @param strokeWidth 裁剪范圍 0表示最大
   * @param bl 是否需要描邊
   * @param bl 畫筆粗細
   * @param bl 顏色代碼
   * @return bitmap
   */
  public static Bitmap createCircleBitmap(Bitmap source, int strokeWidth, boolean bl,int edge,int color) {

    int diameter = source.getWidth() < source.getHeight() ? source.getWidth() : source.getHeight();
    Bitmap target = Bitmap.createBitmap(diameter, diameter, Config.ARGB_8888);
    Canvas canvas = new Canvas(target);//創(chuàng)建畫布

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    canvas.drawCircle(diameter / 2, diameter / 2, diameter / 2, paint);//繪制圓形
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//取相交裁剪
    canvas.drawBitmap(source, strokeWidth, strokeWidth, paint);
    if(bl) {
      if (color == 0) color = 0xFFFEA248;//默認橘黃色
      paint.setColor(color);
      paint.setStyle(Paint.Style.STROKE);//描邊
      paint.setStrokeWidth(edge);
      canvas.drawCircle(diameter / 2, diameter / 2, diameter / 2, paint);
    }
    return target;
  }

  /**
   * 圓角圖片
   * @param bitmap 位圖
   * @param rx x方向上的圓角半徑
   * @param ry y方向上的圓角半徑
   * @param bl 是否需要描邊
   * @param bl 畫筆粗細
   * @param bl 顏色代碼
   * @return bitmap
   */
  public static Bitmap createCornerBitmap(Bitmap bitmap,int rx,int ry,boolean bl,int edge,int color) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);//創(chuàng)建畫布

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    RectF rectF = new RectF(rect);
    canvas.drawRoundRect(rectF, rx, ry, paint);//繪制圓角矩形
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));//取相交裁剪
    canvas.drawBitmap(bitmap, rect, rect, paint);
    if(bl) {
      if (color == 0) color = 0xFFFEA248;//默認橘黃色
      paint.setColor(color);
      paint.setColor(color);
      paint.setStyle(Paint.Style.STROKE);//描邊
      paint.setStrokeWidth(edge);
      canvas.drawRoundRect(rectF, rx, ry, paint);
    }
    return output;
  }

  /**
   * 按比例裁剪圖片
   * @param bitmap 位圖
   * @param wScale 裁剪寬 0~100%
   * @param hScale 裁剪高 0~100%
   * @return bitmap
   */
  public static Bitmap cropBitmap(Bitmap bitmap, float wScale, float hScale) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();

    int wh = (int) (w * wScale);
    int hw = (int) (h * hScale);

    int retX = (int) (w * (1 - wScale) / 2);
    int retY = (int) (h * (1 - hScale) / 2);

    return Bitmap.createBitmap(bitmap, retX, retY, wh, hw, null, false);
  }

  /**
   * 獲得帶倒影的圖片方法
   * @param bitmap 位圖
   * @param region 倒影區(qū)域 0.1~1
   * @return bitmap
   */
  public static Bitmap createReflectionBitmap(Bitmap bitmap,float region) {

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    Matrix matrix = new Matrix();
    matrix.preScale(1, -1);//鏡像縮放
    Bitmap reflectionBitmap = Bitmap.createBitmap(
                         bitmap,0
                        , (int)(height*(1-region))//從哪個點開始繪制
                        , width
                        ,(int) (height*region)//繪制多高
                        , matrix, false);

    Bitmap reflectionWithBitmap = Bitmap.createBitmap(width,height+ (int) (height*region),
                              Config.ARGB_8888);
    Canvas canvas = new Canvas(reflectionWithBitmap);
    canvas.drawBitmap(bitmap, 0, 0, null);
    canvas.drawBitmap(reflectionBitmap, 0, height , null);

    LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
                        reflectionWithBitmap.getHeight()
                        , 0x70ffffff, 0x00ffffff, TileMode.CLAMP);

    Paint paint = new Paint();
    paint.setShader(shader);
    paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));//取兩層繪制交集。顯示下層。
    canvas.drawRect(0, height, width, reflectionWithBitmap.getHeight() , paint);
    return reflectionWithBitmap;
  }

  /**
   * 圖片質量壓縮
   * @param bitmap
   * @param many 百分比
   * @return
   */
  public static Bitmap compressBitmap(Bitmap bitmap, float many){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, (int)many*100, baos);
    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
    return BitmapFactory.decodeStream(isBm, null, null);
  }

  /**
   * 高級圖片質量壓縮
   *@param bitmap 位圖
   * @param maxSize 壓縮后的大小,單位kb
   */
  public static Bitmap imageZoom(Bitmap bitmap, double maxSize) {
    // 將bitmap放至數(shù)組中,意在獲得bitmap的大小(與實際讀取的原文件要大)
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    // 格式、質量、輸出流
    bitmap.compress(Bitmap.CompressFormat.PNG, 70, baos);
    byte[] b = baos.toByteArray();
    // 將字節(jié)換成KB
    double mid = b.length / 1024;
    // 獲取bitmap大小 是允許最大大小的多少倍
    double i = mid / maxSize;
    // 判斷bitmap占用空間是否大于允許最大空間 如果大于則壓縮 小于則不壓縮
    doRecycledIfNot(bitmap);
    if (i > 1) {
      // 縮放圖片 此處用到平方根 將寬帶和高度壓縮掉對應的平方根倍
      // (保持寬高不變,縮放后也達到了最大占用空間的大?。?
      return scaleWithWH(bitmap,bitmap.getWidth() / Math.sqrt(i),
              bitmap.getHeight() / Math.sqrt(i));
    }
    return null;
  }

  /***
   * 圖片縮放
   *@param bitmap 位圖
   * @param w 新的寬度
   * @param h 新的高度
   * @return Bitmap
   */
  public static Bitmap scaleWithWH(Bitmap bitmap, double w, double h) {
    if (w == 0 || h == 0 || bitmap == null) {
      return bitmap;
    } else {
      int width = bitmap.getWidth();
      int height = bitmap.getHeight();

      Matrix matrix = new Matrix();
      float scaleWidth = (float) (w / width);
      float scaleHeight = (float) (h / height);
      
      matrix.postScale(scaleWidth, scaleHeight);
      return Bitmap.createBitmap(bitmap, 0, 0, width, height,
          matrix, true);
    }
  }

  /**
   * YUV視頻流格式轉bitmap
   * @param data YUV視頻流格式
   * @return width 設置寬度
   * @return width 設置高度
   */
  public static Bitmap getBitmap(byte[] data, int width, int height) {
    Bitmap bitmap;
    YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width, height, null);
    //data是onPreviewFrame參數(shù)提供
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    yuvimage.compressToJpeg(new Rect(0, 0, yuvimage.getWidth(), yuvimage.getHeight()), 100, baos);//
    // 80--JPG圖片的質量[0-100],100最高
    byte[] rawImage = baos.toByteArray();
    BitmapFactory.Options options = new BitmapFactory.Options();
    SoftReference<Bitmap> softRef = new SoftReference<Bitmap>(BitmapFactory.decodeByteArray(rawImage, 0, rawImage
        .length, options));
    bitmap = softRef.get();
    return bitmap;
  }

  /**
   * 圖片路徑轉bitmap
   * @param file 圖片的絕對路徑
   * @return bitmap
   */
  public static Bitmap getAssetImage(String file) {
    Bitmap bitmap = null;
    AssetManager am = mActivity.getAssets();
    try {
      InputStream is = am.open(file);
      bitmap = BitmapFactory.decodeStream(is);
      is.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return bitmap;
  }

  /**
   * bitmap保存到指定路徑
   * @param file 圖片的絕對路徑
   * @param file 位圖
   * @return bitmap
   */
  public static boolean saveFile(String file, Bitmap bmp) {
    if(TextUtils.isEmpty(file) || bmp == null) return false;
    
    File f = new File(file);
    if (f.exists()) {
      f.delete();
    }else {
      File p = f.getParentFile();
      if(!p.exists()) {
        p.mkdirs();
      }
    }
    try {
      FileOutputStream out = new FileOutputStream(f);
      bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
      out.flush();
      out.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   * 回收一個未被回收的Bitmap
   *@param bitmap
   */
  public static void doRecycledIfNot(Bitmap bitmap) {
    if (!bitmap.isRecycled()) {
      bitmap.recycle();
    }
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android之聯(lián)系人PinnedHeaderListView使用介紹

    Android之聯(lián)系人PinnedHeaderListView使用介紹

    Android聯(lián)系人中的ListView是做得比較獨特的,這幾天,我把他提取出來了,寫成一個簡單的例子,留著備用,感興趣的朋友可以參考下哈
    2013-06-06
  • Android中View位置和觸摸事件詳解

    Android中View位置和觸摸事件詳解

    這篇文章主要給大家介紹了關于Android中View位置和觸摸事件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Android 實現(xiàn)圓角圖片的簡單實例

    Android 實現(xiàn)圓角圖片的簡單實例

    這篇文章主要介紹了Android 實現(xiàn)圓角圖片的簡單實例的相關資料,Android 圓角圖片的實現(xiàn)形式,包括用第三方、也有系統(tǒng),需要的朋友可以參考下
    2017-07-07
  • 如何利用Kotlin實現(xiàn)極簡回調

    如何利用Kotlin實現(xiàn)極簡回調

    這篇文章主要給大家介紹了關于如何利用Kotlin實現(xiàn)極簡回調的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • android編程之下拉刷新實現(xiàn)方法分析

    android編程之下拉刷新實現(xiàn)方法分析

    這篇文章主要介紹了android編程之下拉刷新實現(xiàn)方法,以實例形式詳細分析了Android編程中針對ListView下拉刷新的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 如何使用Flutter發(fā)布安卓應用

    如何使用Flutter發(fā)布安卓應用

    應用開發(fā)完了,當然需要發(fā)布了,下面來看看用 Flutter 開發(fā)的應用如何發(fā)布,本文只關注 Android 版本的發(fā)布
    2021-05-05
  • Flutter替換字符串中的html標簽

    Flutter替換字符串中的html標簽

    這篇文章主要為大家介紹了Flutter替換字符串中的html標簽實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • 阿里路由框架ARouter 源碼解析之Compiler

    阿里路由框架ARouter 源碼解析之Compiler

    這篇文章主要介紹了阿里路由框架ARouter 源碼解析之Compiler,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 5個Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法

    5個Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法

    本文主要介紹了5個Android開發(fā)中比較常見的內(nèi)存泄漏問題及解決辦法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Android中TextView和ImageView實現(xiàn)傾斜效果

    Android中TextView和ImageView實現(xiàn)傾斜效果

    這篇文章主要為大家詳細介紹了Android中TextView和ImageView實現(xiàn)傾斜效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

德钦县| 洞头县| 长宁区| 巴彦淖尔市| 诸暨市| 鹿邑县| 乳山市| 嵊泗县| 龙川县| 乌鲁木齐县| 中宁县| 梁河县| 松溪县| 井陉县| 东安县| 北川| 沂水县| 景谷| 海城市| 临沂市| 唐河县| 察雅县| 泽库县| 金平| 彩票| 老河口市| 盖州市| 南汇区| 南平市| 德化县| 祁门县| 灌南县| 鄂伦春自治旗| 曲松县| 佛山市| 星子县| 阿鲁科尔沁旗| 长丰县| 福建省| 双鸭山市| 连城县|