安卓相机人像方向
Posted
技术标签:
【中文标题】安卓相机人像方向【英文标题】:android camera portrait orientation 【发布时间】:2012-01-20 21:56:50 【问题描述】:我在我的应用程序中使用相机。我只是使用intent
来启动摄像头
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, 101);
捕获的图像自动进入landscape view
。我如何使camera
在portrait view
中捕获图像
【问题讨论】:
我也遇到了同样的问题,请告诉我你是怎么解决的...... @SivaK 我没有使用默认的相机应用程序,而是创建了自己的相机视图来捕捉图像 Seshu Vinay - 感谢您的回复,是否有任何示例代码或博客用于创建我们自己的相机视图 下面有一个答案,给出了一些示例代码 谢谢 - 刚才我浏览了 FoodSpotting 应用程序,它使用默认相机,以纵向拍摄照片,当照片以相同的纵向模式检索时......我会搜索它。 ..谢谢 【参考方案1】:如果设备有v2.2
或更高版本,您可以使用camera.setDisplayOrientation(90)
将相机方向旋转为纵向。在低于 v2.2 的设备中,相机将仅以横向显示,因此图像将以横向显示。检查这些帖子Using Camera in Portrait Orientation,Camera is wrong unless keyboard is open。
【讨论】:
如果不实际覆盖相机类,我认为这不会起作用 - 在这里调用意图是不够的【参考方案2】:试试这个。
Parameters param = mCamera.getParameters();
switch(mDisplay.getRotation())
case Surface.ROTATION_0:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
mCamera.setDisplayOrientation(90);
Log.d("Rotation_0", "whatever");
else
Log.d("Rotation_0", "whatever");
param.setRotation(90);
mCamera.setParameters(param);
break;
case Surface.ROTATION_90:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
mCamera.setDisplayOrientation(0);
Log.d("Rotation_0", "whatever");
else
Log.d("Rotation_90", "whatever");
param.setRotation(0);
mCamera.setParameters(param);
break;
【讨论】:
【参考方案3】:这里,此代码也适用于 android 相机应用程序[人像模式] 中支持的所有类型的方向。
int rotation = this.getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation)
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;
case Surface.ROTATION_270:
degrees = 270;
break;
【讨论】:
谢谢蒂姆·卡斯特林斯以上是关于安卓相机人像方向的主要内容,如果未能解决你的问题,请参考以下文章