Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之大位圖二次采樣壓縮處理(源代碼分享)

Android開發之大位圖二次采樣壓縮處理(源代碼分享)

編輯:關於Android編程

圖片有各種形狀和大小。在許多情況下這些圖片是遠遠大於我們的用戶界面(UI)且占據著極大的內存空間,如果我們不對位圖進行壓縮處理,我們的程序會發生內存洩露的錯誤。

MainActivity的代碼

package com.example.g08_bitmap;

import android.os.Bundle;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private ImageView imageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) this.findViewById(R.id.imageView1);
		imageView.setImageBitmap(decodeSampledBitmapFromResource(
				getResources(), R.drawable.a, 300, 300));
	}

	public static Bitmap decodeSampledBitmapFromResource(Resources res,
			int resId, int reqWidth, int reqHeight) {
		final BitmapFactory.Options options = new BitmapFactory.Options();
		//先將inJustDecodeBounds屬性設置為true,解碼避免內存分配
		options.inJustDecodeBounds = true;
		// 將圖片傳入選擇器中
		BitmapFactory.decodeResource(res, resId, options);
		// 對圖片進行指定比例的壓縮
		options.inSampleSize = calculateInSampleSize(options, reqWidth,
				reqHeight);
		//待圖片處理完成後再進行內存的分配,避免內存洩露的發生
		options.inJustDecodeBounds = false;
		return BitmapFactory.decodeResource(res, resId, options);
	}

	// 計算圖片的壓縮比例
	public static int calculateInSampleSize(BitmapFactory.Options options,
			int reqWidth, int reqHeight) {
		// Raw height and width of image
		final int height = options.outHeight;
		final int width = options.outWidth;
		int inSampleSize = 1;

		if (height > reqHeight || width > reqWidth) {

			final int heightRatio = Math.round((float) height
					/ (float) reqHeight);
			final int widthRatio = Math.round((float) width / (float) reqWidth);
			// 選擇長寬高較小的比例,成為壓縮比例
			inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
		}
		return inSampleSize;
	}

}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved