【问题标题】:android force camera to take photo in landscape modeandroid强制相机以横向模式拍照
【发布时间】:2012-06-15 05:10:26
【问题描述】:

我想强制默认的安卓相机只在横向模式下拍照。 我试过以下:

         Intent cameraIntent=new Intent("android.media.action.IMAGE_CAPTURE");
         File photo = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "Pic.jpg");
         cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
         cameraIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
         startActivity(cameraIntent);

但这仅适用于 2.1,不适用于以后。 我只想让照片图像以横向模式保存。我不想使用任何图像处理,例如矩阵或自定义相机。

注意:我从方向固定为“portrait”的活动中调用此意图

【问题讨论】:

  • 我有同样的问题,¿你是怎么解决的?

标签: android android-camera-intent


【解决方案1】:

在androidmanifest.xml中

<activity android:name="activity_name" android:screenOrientation="landscape" />

此活动将是您的图像捕捉活动。

【讨论】:

【解决方案2】:

使用ACTION_IMAGE_CAPTURE Intent,您对实际驱动相机的应用程序的控制有限。您可以期望它符合 Intent contract,但仅此而已。

可以发送的标准 Intent 操作让相机应用程序捕获图像并将其返回。

调用者可能会传递一个额外的 EXTRA_OUTPUT 来控制此图像的写入位置。如果 EXTRA_OUTPUT 不存在,则在额外字段中将小尺寸图像作为位图对象返回。这对于只需要小图像的应用程序很有用。如果存在 EXTRA_OUTPUT,则将全尺寸图像写入 EXTRA_OUTPUT 的 Uri 值。从 LOLLIPOP 开始,这个 uri 也可以通过 setClipData(ClipData) 提供。如果使用这种方法,您仍然必须通过 EXTRA_OUTPUT 字段提供 uri 以与旧应用程序兼容。如果你没有设置 ClipData,它会在调用 startActivity(Intent) 时为你复制到那里。

注意:如果您的应用程序以 M 及以上为目标并声明使用未授予的 CAMERA 权限,则尝试使用此操作将导致 SecurityException。

如果您有兴趣,您可以从此意图接收图像并将其强制旋转为横向。请注意,今天的许多相机应用程序都只能生成风景照片。

【讨论】:

  • 从该意图接收图像后,我应该如何强制将其旋转为横向?您能否通过提供相同的代码来更新您的答案。我想将景观图像设置为我的 ImageView 的背景。
  • 要正确显示图像,只需将其 Exif 方向标志应用到图像视图(例如,ExifInterface.ORIENTATION_ROTATE_90imageView.setRotation(90))就足够了。或者,您可以旋转位图本身,选择答案here 之一。您可以将此位图保存到磁盘或发送到云端,所有查看者都会正确显示。后一种方法的缺点是它可能很长,并且很容易导致内存不足。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多