在我的Android应用程序中,我正在使用Android default camera
为此目的捕获照片我已使用下面的代码。在捕获了一张照片后,我已经将图像显示为全屏模式中的另一个活动。如果我在{{{ 1}}模式我可以将整个图像设置为全屏模式。它表现良好,在显示图像后,我可以执行我的操作。但是如果我从portrait
拍摄了一张照片,拍摄的图像将在屏幕中设置为拉伸。所以我想用肖像模式捕捉照片,而不是在风景中。所以我怎么能锁定相机应用程序只为肖像。
landscape
AndroidManifest.xml
String fileName = "Camera_Example.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
startActivityForResult(intent,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
人像拍摄照片
纵向拍摄照片全屏
横向捕捉照片
横向拍摄照片全屏
答案 0 :(得分:3)
我怎么可以锁定相机应用程序只为肖像
你不是。你没有写相机应用程序,因为有数百甚至数千个相机应用程序。由相机应用程序和用户来处理方向。
此外:
在许多设备上,您将在纵向模式下遇到同样的问题
您的风景照片似乎也被拉伸了,但不是那么大
但是如果我从风景中拍摄了一张照片,拍摄的图像会在屏幕上显示拉伸
你有一个问题,也许是两个问题:
您没有考虑照片的方向,因此您正在加载风景照片,就像它是肖像一样。
您的ImageView
或其父级可能配置错误。如果您想要保持照片的宽高比,和,您希望ImageView
填充某个区域,那么ImageView
需要具有相同的宽高比。
如果确实只想以纵向模式拍照,除了解决问题外,您还需要自己使用android.hardware.Camera
,而不是启动第三方相机应用我在上面提到过。
答案 1 :(得分:-1)
请尝试使用以下代码旋转相机:
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
camera = Camera.open();
camera.setDisplayOrientation(90); // camera portrait oriantation
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}