我的工作我的第一个Android应用程序。它正在使用来自camera1 api的相机预览(我知道它已被弃用,但我找不到易于理解的camera2资源)。
应用程序是非常困难并且是我的上述电平由于照相机API是不容易使用。但是我大部分时间在那里。
我的问题是,我的相机预览总是保存照片上的景观模式,与取向无关。我查了一下,在实现Exif接口,矩阵和位图时遇到了很多麻烦。
这是我当前正在使用的代码。
public static File getPictureFile(int mediaType) {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Camera App");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("Camera App", "Failed to create directory");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (mediaType == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
public void takePicturePreview() {
Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getPictureFile(MEDIA_TYPE_IMAGE);
if (pictureFile ==null) {
Log.d(TAG, "Error creating media file, check storage permissions");
return;
}
//ROTATION NEEDS TO OCCUR HERE
//String filePath = pictureFile.getPath();
//Bitmap bitmap = BitmapFactory.decodeFile(filePath);
/*ExifInterface exif = null;
try {
exif = new ExifInterface(filePath);
} catch (IOException e) {
e.printStackTrace();
}*/
//int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
//Matrix matrix = new Matrix();
//matrix.postRotate(orientation);
//bitmap = Bitmap.createBitmap(bitmap, 0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
//bitmap.compress(Bitmap.CompressFormat.JPEG,85,fos);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
};
mCamera.takePicture(null, null, mPicture);
}
注释中的所有内容都是我尝试使用的测试代码,但是没有任何效果。因此,我尝试使用BitmapFactory,Exifinterface来获取方向,然后使用矩阵对其进行旋转,然后创建并保存该位图,但是它崩溃了。
在这一点上,整个exifinterace,位图对我来说还不清楚,真的很难理解发生了什么。
任何人都可以给我任何提示或帮助,以允许我的应用以正确的方向保存照片吗?
答案 0 :(得分:0)
如果使用旧的相机API,则需要在调用Camera.takePicture()之前调用Parameters.setRotation和Camera.setParameters()。
文档包括有关如何获取当前设备方向的示例代码。