我正在开发一个应用程序,其中我必须在服务中每秒拍摄一张照片,而无需启动相机预览。
我在服务中编写了以下代码,并且能够拍照。
if (cameraId < 0) {
Log.d(TAG, "No camera found");
}
else
{
camera = Camera.open(cameraId);
camera.startPreview();
}
camera.takePicture(null, null, bitmapHandler);
在bitmapHandler类中,我在
中获取捕获图像数据。@Override
public void onPictureTaken(byte[] data, Camera camera) {
.
.
.
}
我尝试过的方法:当以人像模式拍摄图像时,我将位图旋转了90,但仍然无法找到以哪种模式拍摄图像。
Camera API是否可以知道或控制旋转角度?
答案 0 :(得分:0)
我正在使用fixImageOrientation函数,参数是图像本身以及图像文件的路径(作为第二个参数,我传递了相机活动存储临时图像文件的路径)
public static Bitmap rotateImage(Bitmap bmp, float angle)
{
Matrix matrix = new Matrix();
matrix.postRotate(angle);
System.out.println("Rotating image " + Float.toString(angle) + " degrees, rotateImage()");
return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
}
public static Bitmap fixImageOrientation(Bitmap bmp, String path)
{
ExifInterface ei;
boolean changed = true;
try {
ei = new ExifInterface(path);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
if (orientation == ExifInterface.ORIENTATION_ROTATE_90)
bmp = rotateImage(bmp, 90);
else if (orientation == ExifInterface.ORIENTATION_ROTATE_180)
bmp = rotateImage(bmp, 180);
else if (orientation == ExifInterface.ORIENTATION_ROTATE_270)
bmp = rotateImage(bmp, 270);
else
changed = false;
} catch (IOException e){
System.out.println("IOException, image probably has no exif data, fixImageOrientation()");
e.printStackTrace();
}
if (changed)
{
System.out.println("Image orientation fixed, fixImageOrientation()");
}
else
{
System.out.println("Image orientation did not change, fixImageOrientation()");
}
return bmp;
}