国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android圖片處理工具類BitmapUtils

2019-12-12 01:24:57
字體:
供稿:網(wǎng)友

Android圖片的處理工具類BitmapUtils,供大家參考,具體內(nèi)容如下

項目中經(jīng)常會用到圖片,所以在這先簡單的總結(jié)一下。閑言少敘,上代碼。

package com.lvstudio.myapp.utils;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.PixelFormat;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.DisplayMetrics;import android.view.WindowManager;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;/** * Created by LvStudio on 2016/11/7. */public class BitmapUtils {  /**   * 屏幕分辨率和指定清晰度的圖片壓縮方法   *   * @param context   * @param image  Bitmap圖片   * @return   */  public static Bitmap comp(Context context, Bitmap image) {    int maxLength = 1024 * 1024; // 預定的圖片最大內(nèi)存,單位byte    // 壓縮大小    ByteArrayOutputStream baos = new ByteArrayOutputStream();    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 質(zhì)量壓縮方法,這里100表示不壓縮,把壓縮后的數(shù)據(jù)存放到baos中    int options = 100;    while (baos.toByteArray().length > maxLength) { // 循環(huán)判斷,大于繼續(xù)壓縮      options -= 10;// 每次都減少10      baos.reset();// 重置baos即清空baos      image.compress(Bitmap.CompressFormat.JPEG, options, baos);//PNG 壓縮options%    }    // 壓縮尺寸    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());    BitmapFactory.Options opts = new BitmapFactory.Options(); // 選項對象(在加載圖片時使用)    opts.inJustDecodeBounds = true; // 修改選項, 只獲取大小    BitmapFactory.decodeStream(bais, null, opts);// 加載圖片(只得到圖片大小)    // 獲取屏幕大小,按比例壓縮    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);    int scaleX = opts.outWidth / manager.getDefaultDisplay().getWidth(); // X軸縮放比例(圖片寬度/屏幕寬度)    int scaleY = opts.outHeight / manager.getDefaultDisplay().getHeight(); // Y軸縮放比例    int scale = scaleX > scaleY ? scaleX : scaleY; // 圖片的縮放比例(X和Y哪個大選哪個)    opts.inJustDecodeBounds = false; // 修改選項, 不只解碼邊界    opts.inSampleSize = scale > 1 ? scale : 1; // 修改選項, 加載圖片時的縮放比例    return BitmapFactory.decodeStream(bais, null, opts); // 加載圖片(得到壓縮后的圖片)  }  /**   * 屏幕分辨率和指定清晰度的圖片壓縮方法   *   * @param context   * @param path  圖片的路徑   * @return   */  public static Bitmap comp(Context context, String path) {    return compressImage(getUsableImage(context, path));  }  /**   * 獲取屏幕分辨率的Bitmap   *   * @param context   * @param path  圖片的路徑   * @return   */  public static Bitmap getUsableImage(Context context, String path) {    BitmapFactory.Options opts = new BitmapFactory.Options(); // 選項對象(在加載圖片時使用)    opts.inJustDecodeBounds = true; // 修改選項, 只獲取大小    BitmapFactory.decodeFile(path, opts); // 加載圖片(只得到圖片大小)    DisplayMetrics metrics = new DisplayMetrics();    metrics = context.getApplicationContext().getResources().getDisplayMetrics();    int scaleX = opts.outWidth / metrics.widthPixels; // X軸縮放比例(圖片寬度/屏幕寬度)    int scaleY = opts.outHeight / metrics.heightPixels; // Y軸縮放比例    int scale = scaleX > scaleY ? scaleX : scaleY; // 圖片的縮放比例(X和Y哪個大選哪個)    opts.inJustDecodeBounds = false; // 修改選項, 不只解碼邊界    opts.inSampleSize = scale > 1 ? scale : 1; // 修改選項, 加載圖片時的縮放比例    return BitmapFactory.decodeFile(path, opts); // 加載圖片(得到縮放后的圖片)  }  /**   * 壓縮圖片清晰度,到指定大小   *   * @param image   * @return   */  public static Bitmap compressImage(Bitmap image) {    int maxLength = 1024 * 1024; // (byte)    ByteArrayOutputStream baos = new ByteArrayOutputStream();    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 質(zhì)量壓縮方法,這里100表示不壓縮,把壓縮后的數(shù)據(jù)存放到baos中    int options = 100;    while (baos.toByteArray().length > maxLength) { // 循環(huán)判斷如果壓縮后圖片是否大于1mb,大于繼續(xù)壓縮      options -= 10;// 每次都減少10      baos.reset();// 重置baos即清空baos      image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 這里壓縮options%,把壓縮后的數(shù)據(jù)存放到baos中    }    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把壓縮后的數(shù)據(jù)baos存放到ByteArrayInputStream中    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream數(shù)據(jù)生成圖片    return bitmap;  }  /**   * 指定分辨率和清晰度的圖片壓縮方法   *   * @param fromFile   * @param toFile   * @param reqWidth   * @param reqHeight   * @param quality   */  public static void transImage(String fromFile, String toFile, int reqWidth, int reqHeight, int quality) {    Bitmap bitmap = BitmapFactory.decodeFile(fromFile);    int bitmapWidth = bitmap.getWidth();    int bitmapHeight = bitmap.getHeight();    // 縮放的尺寸    float scaleWidth = (float) reqWidth / bitmapWidth;    float scaleHeight = (float) reqHeight / bitmapHeight;    Matrix matrix = new Matrix();    matrix.postScale(scaleWidth, scaleHeight);    // 產(chǎn)生縮放后的Bitmap對象    Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, false);    // 保存到文件    bitmap2File(toFile, quality, resizeBitmap);    if (!bitmap.isRecycled()) {      // 釋放資源,以防止OOM      bitmap.recycle();    }    if (!resizeBitmap.isRecycled()) {      resizeBitmap.recycle();    }  }  /**   * Bitmap轉(zhuǎn)換為文件   *   * @param toFile   * @param quality   * @param bitmap   * @return   */  public static File bitmap2File(String toFile, int quality, Bitmap bitmap) {    File captureFile = new File(toFile);    FileOutputStream out = null;    try {      out = new FileOutputStream(captureFile);      if (bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out)) {        out.flush();        out.close();      }    } catch (FileNotFoundException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    }    return captureFile;  }  /**   * Drawable轉(zhuǎn)換為Bitmap   *   * @param drawable   * @return   */  public static Bitmap drawableToBitamp(Drawable drawable) {    int w = drawable.getIntrinsicWidth();    int h = drawable.getIntrinsicHeight();    Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888        : Bitmap.Config.RGB_565;    Bitmap bitmap = Bitmap.createBitmap(w, h, config);    // 注意,下面三行代碼要用到,否在在View或者surfaceview里的canvas.drawBitmap會看不到圖    Canvas canvas = new Canvas(bitmap);    drawable.setBounds(0, 0, w, h);    drawable.draw(canvas);    return bitmap;  }  // Bitmap、Drawable、InputStream、byte[] 之間轉(zhuǎn)換  /**********************************************************/  // 1. Bitmap to InputStream  public static InputStream bitmap2Input(Bitmap bitmap, int quality) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG, quality, baos);    return new ByteArrayInputStream(baos.toByteArray());  }  public static InputStream bitmap2Input(Bitmap bitmap) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);    return new ByteArrayInputStream(baos.toByteArray());  }  // 2. Bitmap to byte[]  public static byte[] bitmap2ByteArray(Bitmap bitmap, int quality) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG, quality, baos);    return baos.toByteArray();  }  public static byte[] bitmap2ByteArray(Bitmap bitmap) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);    return baos.toByteArray();  }  // 3. Drawable to byte[]  public static byte[] drawable2ByteArray(Drawable drawable) {    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();    ByteArrayOutputStream out = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);    return out.toByteArray();  }  // 4. byte[] to Bitmap  public static Bitmap byteArray2Bitmap(byte[] bytes) {    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);  }}

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沧州市| 伊通| 宜良县| 渭南市| 平江县| 宁化县| 台安县| 大邑县| 宕昌县| 晋城| 柳林县| 土默特左旗| 东方市| 阿坝县| 彩票| 孝感市| 房产| 丽水市| 镇远县| 云林县| 桐乡市| 广饶县| 绥江县| 棋牌| 洪湖市| 远安县| 商城县| 阳新县| 汕尾市| 博罗县| 新乡市| 沂南县| 威海市| 兴安盟| 本溪市| 上虞市| 丰镇市| 沭阳县| 伊春市| 平谷区| 万源市|