使用Camera类(7)

上述代码首先检查设备配置(通过调用Context.getResources().getConfiguration())以查看当前的方向。如果方向不是横向模式,那么它设置Camera.Parameters的“orientation”值为“portrait”。此外,调用Camera.Parameters的setRotation方法,并传入90°的参数。该方法在API Level 5(2.0版)和更高版本上可用,它实际上并不执行任何旋转;相反,它会告诉Camera对象在EXIF数据中指定该图像应该旋转90°显示。如果没有包含该信息,那么在其他应用程序中查看该图像时,它可能会侧面显示。

注意:以上所示的通过使用Camera.Parameters修改Camera对象旋转的方法用于Android 2.1和更早的版本。在Android 2.2中引入了Camera类的一个新方法setDisplayOrientation (int degrees)。该方法接受一个整数,表示图像应该旋转的度数。有效的度数为0、90、180和270。

大多数可以或应该修改的参数都有与它们相关联的特定方法。如同我们所看到的setRotation方法一样,这些方法遵循Java的获取器和设置器设计模式。例如,可以使用setFlashMode(Camera.Parameters.FLASH_MODE_AUTO)来设置Camera对象的闪光灯模式,同时可以使用getFlashMode()获得它的当前值,而无须使用通用的Parameters.set方法。

从Android 2.0开始,存在一个可用于展示的有趣参数,使用该参数可以修改颜色效果。对应的获取器和设置器方法是getColorEffect和setColorEffect。同时还存在一个getSupportedColorEffects方法,它返回一个String对象的列表,对应特定设备上所支持的各种效果。事实上,这种方法对于所有具有获取器和设置器方法的参数都存在,用于在使用某个功能之前确保所请求的功能是可用的。

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);

读书导航