Android[高級教程] Android程序調用攝像頭

很多開發者都想在程序用來調用攝像頭,並對拍出的照片進行處理。首先先對程序的進行一下預覽


首先先對主頁面進行設計,這裏很簡單,只是加了個按鈕和一張圖片

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/camera" />




    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

</LinearLayout>

接下來就是對按鈕事件進行處理,按下按鈕的時候會調用本機攝像頭

//圖片存入地址
		imageFilePath = Environment.getExternalStorageDirectory()
				.getAbsolutePath() + "/mypicture.jpg";
		File imageFile = new File(imageFilePath);
		Uri imageFileUri = Uri.fromFile(imageFile);

		Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
		i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
		startActivityForResult(i, CAMERA_RESULT);


Intent直接調用了本機的拍照程序,並把拍的圖片存在內存卡里,接下來就是要在我們自己的程序裏顯示拍的照片了
這裏我們直接用了Activity裏的onActivityResult這個方法,這個方法是對Activity返回結果的處理

@Override
	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, intent);

		//如果拍照成功
		if (resultCode == RESULT_OK) {

			// Bundle extras = intent.getExtras();
			// Bitmap bmp = (Bitmap)extras.get("data");

			imv = (ImageView) findViewById(R.id.imageView1);

			//取得屏幕的顯示大小
			Display currentDisplay = getWindowManager().getDefaultDisplay();
			int dw = currentDisplay.getWidth();
			int dh = currentDisplay.getHeight();

			//對拍出的照片進行縮放
			BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
			bmpFactoryOptions.inJustDecodeBounds = true;
			Bitmap bmp = BitmapFactory.decodeFile(imageFilePath,
					bmpFactoryOptions);

			int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight
					/ (float) dh);
			int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth
					/ (float) dw);

			if (heightRatio > 1 && widthRatio > 1) {

				if (heightRatio > widthRatio) {

					bmpFactoryOptions.inSampleSize = heightRatio;
				} else {
					bmpFactoryOptions.inSampleSize = widthRatio;
				}

			}

			bmpFactoryOptions.inJustDecodeBounds = false;
			bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);

			imv.setImageBitmap(bmp);

		}
	}

這裏我們就完成了對本機攝像頭的調用,其實在這裏主要要學習的是startActivityForResult和onActivityResult這兩個方法,一個是調用Activity並將結果返回給調用的Activity,一個就是處理返回的數據了,好了,如果哪位想要程序的話,可以直接留郵件地址。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章