上述代碼首先檢查設(shè)備配置(通過(guò)調(diào)用Context.getResources().getConfiguration())以查看當(dāng)前的方向。如果方向不是橫向模式,那么它設(shè)置Camera.Parameters的“orientation”值為“portrait”。此外,調(diào)用Camera.Parameters的setRotation方法,并傳入90°的參數(shù)。該方法在API Level 5(2.0版)和更高版本上可用,它實(shí)際上并不執(zhí)行任何旋轉(zhuǎn);相反,它會(huì)告訴Camera對(duì)象在EXIF數(shù)據(jù)中指定該圖像應(yīng)該旋轉(zhuǎn)90°顯示。如果沒(méi)有包含該信息,那么在其他應(yīng)用程序中查看該圖像時(shí),它可能會(huì)側(cè)面顯示。
注意:以上所示的通過(guò)使用Camera.Parameters修改Camera對(duì)象旋轉(zhuǎn)的方法用于Android 2.1和更早的版本。在Android 2.2中引入了Camera類(lèi)的一個(gè)新方法setDisplayOrientation (int degrees)。該方法接受一個(gè)整數(shù),表示圖像應(yīng)該旋轉(zhuǎn)的度數(shù)。有效的度數(shù)為0、90、180和270。
大多數(shù)可以或應(yīng)該修改的參數(shù)都有與它們相關(guān)聯(lián)的特定方法。如同我們所看到的setRotation方法一樣,這些方法遵循Java的獲取器和設(shè)置器設(shè)計(jì)模式。例如,可以使用setFlashMode(Camera.Parameters.FLASH_MODE_AUTO)來(lái)設(shè)置Camera對(duì)象的閃光燈模式,同時(shí)可以使用getFlashMode()獲得它的當(dāng)前值,而無(wú)須使用通用的Parameters.set方法。
從Android 2.0開(kāi)始,存在一個(gè)可用于展示的有趣參數(shù),使用該參數(shù)可以修改顏色效果。對(duì)應(yīng)的獲取器和設(shè)置器方法是getColorEffect和setColorEffect。同時(shí)還存在一個(gè)getSupportedColorEffects方法,它返回一個(gè)String對(duì)象的列表,對(duì)應(yīng)特定設(shè)備上所支持的各種效果。事實(shí)上,這種方法對(duì)于所有具有獲取器和設(shè)置器方法的參數(shù)都存在,用于在使用某個(gè)功能之前確保所請(qǐng)求的功能是可用的。
Camera.Parameters parameters = camera.getParameters();
List<String> colorEffects = parameters.getSupportedColorEffects();
Iterator<String> cei = colorEffects.iterator();
while (cei.hasNext()) {
String currentEffect = cei.next();
Log.v("SNAPSHOT","Checking " + currentEffect);
if (currentEffect.equals(Camera.Parameters.EFFECT_SOLARIZE)) {
Log.v("SNAPSHOT","Using SOLARIZE");
parameters.setColorEffect(Camera.Parameters.EFFECT_SOLARIZE);
break;
}
}
Log.v("SNAPSHOT","Using Effect:" + parameters.getColorEffect());
camera.setParameters(parameters);