Android Camera(四)

保存媒體文件

由用戶創建的像圖片和視頻這樣的媒體文件,應該保存到設備的外部存儲目錄中(SD卡)以節省系統空間,並且允許用戶在本設備以外能夠訪問這些文件。在設備上有很多肯能的保存媒體文件的目錄位置,但是作為開發者應該隻考慮兩個標準的位置:

Evironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES):這個方法會返回一個標準的、共享的且推薦使用的目錄位置。這個目錄是共享的(公共的),因此其他應用程序能夠很容易的在該位置發現、讀取、改變和刪除被保存的文件。如果你的應用程序被卸載,保存在該位置的媒體文件將不會被刪除。要避免對用戶既存的圖片和視頻的幹擾,你應該像下面代碼所示的那樣,在這個目錄內部給你的應用程序創建一個子目錄。這個方法在Android2.2(API Level8)以後的版本中有效,對於早期API版本的等同調用,請看“保存共享文件”

Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES):這個方法返回一個跟你的應用程序關聯的用於保存圖片和視頻的位置。如果你的應用程序被卸載,保存在這個位置的任何文件都會被刪除。這個位置的文件的安全性並不是被強制的,其他的應用程序可以讀取、改變和刪除它們。

下列示例代碼演示瞭如何給媒體文件創建一個File或Uri對象,它們能夠被用於調用設備Camera的Intent對象,或者作為構建Camera應用程序的一部分。

public static final int MEDIA_TYPE_IMAGE = 1;

public static final int MEDIA_TYPE_VIDEO = 2;

 

/** Create a file Uri for saving an image or video */

private static Uri getOutputMediaFileUri(int type){

      return Uri.fromFile(getOutputMediaFile(type));

}

 

/** Create a File for saving an image or video */

private static File getOutputMediaFile(int type){

    // To be safe, you should check that the SDCard is mounted

    // using Environment.getExternalStorageState() before doing this.

 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(

              Environment.DIRECTORY_PICTURES), "MyCameraApp");

    // This location works best if you want the created images to be shared

    // between applications and persist after your app has been uninstalled.

 

    // Create the storage directory if it does not exist

    if (! mediaStorageDir.exists()){

        if (! mediaStorageDir.mkdirs()){

            Log.d("MyCameraApp", "failed to create directory");

            return null;

        }

    }

 

    // Create a media file name

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

    File mediaFile;

    if (type == MEDIA_TYPE_IMAGE){

        mediaFile = new File(mediaStorageDir.getPath() + File.separator +

        "IMG_"+ timeStamp + ".jpg");

    } else if(type == MEDIA_TYPE_VIDEO) {

        mediaFile = new File(mediaStorageDir.getPath() + File.separator +

        "VID_"+ timeStamp + ".mp4");

    } else {

        return null;

    }

 

    return mediaFile;

}

註意:Environment.getExternalStoragePublicDirectory()是在Android2.2(API Level 8)以後才有效,如果你的目標設備是更早的Android版本,要使用Environment.getExternalStorageDirectory()來替代。

Camera功能:

Android提供瞭一個Camera應用程序能夠控制的寬泛的Camera功能數組,如圖片格式、閃光燈模式、聚焦設置等等。本節列出瞭通用的Camera功能,並簡要的討論如何使用它們。大多數的Camera功能能夠通過Camera.Parameters對象來訪問和設置。但是,有幾個重要的功能需要比Camera.Parameters更簡化的設置。這些功能被包含下文的以下章節中:

1.  測光和調焦

2.  面部識別

3.  延時攝影

關於如何通過Camera.Parameters來使用這些控制功能的一般性信息,請看“使用Camera功能”。對於如何通過Camera參數對象來使用這些控制功能的更詳細信息,下表中的功能項會鏈接到指定的API文檔。

表1.這些Camera功能按照它們被引入Android API Level的版本來排序

功能
 API Level
 介紹
 
Face Detection
 14
 標識圖片內部的人臉,並使用這個標識來調焦、測光和白平衡處理。
 
Metering Areas
 14
 在圖片內指定多個點,用於計算白平衡
 
Focus Areas
 14
 在圖片內設置多個點,用於調焦
 
White Balance Lock
 14
 自動的停止或啟動白平衡調整
 
Exposure Lock
 14
 自動的停止或啟動曝光調整
 
Video Snapshot
 14
 獲取視頻中的一張照片(幀獲取)
 
Time Lapse Video
 11
 用設置延遲的幀來記錄延時視頻
 
Multiple Cameras
 9
 在一個設備上支持多個Camera,包括前面和背面的Camera
 
Focus Distance
 9
 報告Camera和作為焦點對象之間的距離
 
Zoom
 8
 設置圖像的縮放率
 
Exposure Compensation
 8
 增加或減少曝光級別
 
GPS Data
 5
 在圖像中包含或忽略地理位置數據
 
White Balance
 5
 設置白平衡模式,它會影響采集圖像中的顏色值
 
Focus Mode
 5
 設置Camera的調焦模式,如自動、固定、微距或無限遠
 
Scene Mode
 5
 預設一種特定的攝影環境,如夜晚、沙灘、雪地、黃昏等場景
 
JPEG Quality
 5
 設定JPEG圖像的壓縮級別,它會增加或減少圖像輸出的文件質量和尺寸
 
Flas Mode
 5
 切換閃光燈,或使用自動設置
 
Color Effects
 5
 設置采集圖像的顏色效果,如黑白效果、棕褐色調或取反色。
 
Anti-Banding
 5
 減少由於JPEG壓縮所帶來的顏色漸變的影響
 
Picture Format
 1
 指定圖片的文件格式
 
Picture Size
 1
 指定保存圖片的像素尺寸
 

 

註意:由於硬件的不同和軟件的實現,這些功能不是所有的設備都支持的。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。