歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android圖像處理簡介の使用內置Camera應用程序進行圖像捕獲

Android中可以簡單直接地使用intent來獲取已安裝應用軟件提供的功能,它是Android的關鍵組件之一,主要作用有兩個:一是觸發其他應用程序提供的功能;二是在單個應用程序中實現Activity之間的切換。

軟件開發人員使用intent filter來聲明應用程序提供某種特定功能,這個聲明是在AndroidManifest.xml中進行的,例如,內置的Camera應用在它的manifest文件中的"Camera"標簽下進行了如下聲明:

[html]
  1. <intent-filter>  
  2.   
  3. <action android:name="android.media.action.IMAGE_CAPTURE" />  
  4.   
  5.     <action android:name="android.intent.category.DEFAULT"/>  
  6.   
  7. </intent-filter>  

要通過intent來使用Camera應用,我們只需創建一個Intent來捕獲上面聲明的filter就行,代碼如下:

[java]
  1. Intent it = new Intent("android.media.action.IMAGE_CAPTURE");  

但上面代碼顯然屬於硬編碼,字符串"android.media.action.IMAGE_CAPTURE"將來如果改變了,我們的代碼也得跟著修改,不利於維護,好在MediaStore類提供常量ACTION_IMAGE_CAPTURE供開發人員使用,這樣字符串名稱變動就在Android內部自己解決,對外的接口ACTION_IMAGE_CAPTURE不變,改進後的代碼如下:

[java]
  1. Intent it = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);  
  2.   
  3. startActivity(it);  

1)從Camera應用返回數據

只捕獲圖像而不進行存儲或其他處理是沒有任何意義的,為了獲得Camera應用捕獲到的圖像,我們只需使用startActivityForResult函數代替startActivity,同時重載Activity的函數onActivityResult即可,從Camera返回的數據我們當作Bitmap來處理,代碼如下:

[java]
  1. package hust.iprai.asce1885.promedia;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.graphics.Bitmap;  
  6. import android.os.Bundle;  
  7. import android.widget.ImageView;  
  8.   
  9. public class ImageCaptureActivity extends Activity {  
  10.       
  11.     final static int CAMERA_RESULT = 0;  
  12.     ImageView iv = null;  
  13.       
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.           
  19.         Intent it = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);  
  20.         startActivityForResult(it, CAMERA_RESULT);  
  21.     }  
  22.   
  23.     @Override  
  24.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  25.         super.onActivityResult(requestCode, resultCode, data);  
  26.           
  27.       if (RESULT_OK == resultCode) {  
  28.         // Get Extra from the intent   
  29.         Bundle extras = data.getExtras();  
  30.         // Get the returned image from extra   
  31.         Bitmap bmp = (Bitmap) extras.get("data");  
  32.               
  33.         iv = (ImageView) findViewById(R.id.ReturnedImageView);  
  34.         iv.setImageBitmap(bmp);  
  35.       }  
  36.     }  
  37. }
Copyright © Linux教程網 All Rights Reserved