BitMap代表一張位圖,擴展名可以是.bmp或者.dib。位圖是Windows標准格式圖形文件,它將圖像定義為由點(像素)組成,每個點可以由多種色彩表示,包括2、4、8、16、24和32位色彩。例如,一幅1024×768分辨率的32位真彩圖片,其所占存儲字節數為:1024×768×32/8=3072KB
位圖文件圖像效果好,但是非壓縮格式的,需要占用較大存儲空間,不利於在網絡上傳送。jpg格式則恰好彌補了位圖文件這個缺點。
在android系統當中,bitmap是圖像處理最重要的類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、縮放等操作,並可以指定格式保存圖像文件。
下面主要介紹BitMap的用法:
1.從資源文件中獲取
1 Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.img1);
2.從SD卡中得到圖片
1 (方法1) 2 String SDCarePath=Environment.getExternalStorageDirectory().toString(); 3 String filePath=SDCarePath+"/"+"haha.jpg"; 4 Bitmap rawBitmap1 = BitmapFactory.decodeFile(filePath, null); 5 (方法2) 6 InputStream inputStream=getBitmapInputStreamFromSDCard("haha.jpg"); 7 Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream);
3.設置圖片的圓角,返回設置后的BitMap
1 public Bitmap toRoundCorner(Bitmap bitmap, int pixels) { 2 Bitmap roundCornerBitmap = Bitmap.createBitmap(bitmap.getWidth(), 3 bitmap.getHeight(), Config.ARGB_8888); 4 Canvas canvas = new Canvas(roundCornerBitmap); 5 int color = 0xff424242;// int color = 0xff424242; 6 Paint paint = new Paint(); 7 paint.setColor(color); 8 // 防止鋸齒 9 paint.setAntiAlias(true); 10 Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 11 RectF rectF = new RectF(rect); 12 float roundPx = pixels; 13 // 相當於清屏 14 canvas.drawARGB(0, 0, 0, 0); 15 // 先畫了一個帶圓角的矩形 16 canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 17 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 18 // 再把原來的bitmap畫到現在的bitmap!!!注意這個理解 19 canvas.drawBitmap(bitmap, rect, rect, paint); 20 return roundCornerBitmap; 21 }
4.將圖片高寬和的大小kB壓縮
1 //得到圖片原始的高寬 2 int rawHeight = rawBitmap.getHeight(); 3 int rawWidth = rawBitmap.getWidth(); 4 // 設定圖片新的高寬 5 int newHeight = 500; 6 int newWidth = 500; 7 // 計算縮放因子 8 float heightScale = ((float) newHeight) / rawHeight; 9 float widthScale = ((float) newWidth) / rawWidth; 10 // 新建立矩陣 11 Matrix matrix = new Matrix(); 12 matrix.postScale(heightScale, widthScale); 13 // 設置圖片的旋轉角度 14 // matrix.postRotate(-30); 15 // 設置圖片的傾斜 16 // matrix.postSkew(0.1f, 0.1f); 17 // 將圖片大小壓縮 18 // 壓縮后圖片的寬和高以及kB大小均會變化 19 Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth, 20 rawWidth, matrix, true);
5.將Bitmap轉換為Drawable Drawable轉Bitmap
1 Drawable newBitmapDrawable = new BitmapDrawable(Bitmap); 2 //如果要獲取BitMapDrawable中所包裝的BitMap對象,可以用getBitMap()方法; 3 Bitmap bitmap = newBitmapDrawable.getBitmap();
6.由於前面創建的Bitmap所占用的內存還沒有回收,而導致引發OutOfMemory錯誤,所以用下面方法判斷是否回收。
1 if(!bitmap.isRecycled()) 2 { 3 bitmap.recycle()
4 }