如何查看前置摄像头 ID?捕获的图像也是来自前置摄像头的镜像。
Posted
技术标签:
【中文标题】如何查看前置摄像头 ID?捕获的图像也是来自前置摄像头的镜像。【英文标题】:How to check front Cam ID? also getting captured image is mirror image from front camera. 【发布时间】:2016-10-31 23:27:00 【问题描述】:我正在尝试将默认相机与 Intent 一起用于图像和视频捕获。 当我转向前置摄像头并捕捉图像或视频时,预览(捕捉的图像或视频)被反转。所以现在我想把 preScale 放在 frontCamera 中。但是不知道在哪里可以找到默认相机中的相机 ID。!!
注意:这不是自定义相机。!!
问题是:从前置摄像头获取的图像是镜像。看看有没有问题?我没有得到!谢谢
即使存储在 SDCard 中的图像也是镜像!现在如何 preScale 或任何其他想法来纠正 iT?
帮助!
photo.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
captureImage();
);
CatureImage 方法
private void captureImage()
Context context = this;
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA) == false
&& packageManager
.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) == false)
Toast.makeText(CameraRolling2.this, "camera not available'",
Toast.LENGTH_SHORT).show();
return;
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent
.resolveActivity(CameraRolling2.this.getPackageManager()) != null)
File photoFile = null;
try
photoFile = createImageFile();
catch (IOException ex)
// Error occurred while creating the File
Toast.makeText(CameraRolling2.this, "Error connecting camera",
Toast.LENGTH_SHORT).show();
ex.printStackTrace();
// Continue only if the File was successfully created
if (photoFile != null)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent,
CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
showImg.setImageBitmap(null);
@SuppressLint("SimpleDateFormat")
private File createImageFile() throws IOException
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName, ".jpg", storageDir);
mCurrentPhotoPath = image.getAbsolutePath();
Log.v("createImageFile", "" + mCurrentPhotoPath);
return image;
和我的活动结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE
&& resultCode == Activity.RESULT_OK)
File imgFile = new File(mCurrentPhotoPath);
if (imgFile.exists())
BitmapFactory.Options bitmap_options = new BitmapFactory.Options();
bitmap_options.inSampleSize = 4;
bitmap_options.outHeight = 200;
bitmap_options.outWidth = 200;
Bitmap myBitmap = BitmapFactory.decodeFile(
imgFile.getAbsolutePath(), bitmap_options);
showImg.setImageBitmap(myBitmap);
if (showImg.getDrawable() == null)
Log.e("IMAGEVIEW", "NULL IMAGE");
imageflag = false;
else
Log.e("IMAGEVIEW", "IMAGE VIEW UPDATED");
imageflag = true;
if (resultCode == Activity.RESULT_CANCELED)
Toast.makeText(CameraRolling2.this, "Camera option canceled",
Toast.LENGTH_SHORT).show();
imageflag = false;
【问题讨论】:
【参考方案1】:我正在尝试将默认相机与 Intent 一起用于图像和视频捕获
android 中没有单一的“带 Intent 的默认相机”。有数千种 Android 设备型号。这些附带数百种不同的“带有 Intent 的默认相机”应用程序。用户可以从 Play 商店或其他地方安装其他“带有 Intent 的默认相机”应用程序。这些应用程序中的任何一个都可能是用户选择用来拍照 (ACTION_IMAGE_CAPTURE
) 或录制视频 (ACTION_VIDEO_CAPTURE
) 的应用程序。
当我转向前置摄像头并捕获图像或视频时,预览(捕获的图像或视频)被反转
我猜“倒置”是指“旋转”。
有数百种不同的相机应用。许多人会使用元数据保存图像或视频,这些元数据会告诉查看器应用程序旋转图像(例如,JPEG 照片可能有一个方向 EXIF 标题)。有些人不会,选择自己轮换内容。
此外,来自任何摄像头(前置、后置、外置)的图像或视频都可以旋转。
因此,您不应假设旋转与用户使用的特定相机相关联。相反,检查实际内容并做出相应的反应。 This sample project 使用几种不同的技术演示了如何旋转 JPEG 图像。
所以现在我想把 preScale 放在 frontCamera 中。
这是你无法控制的。
但不知道在默认相机中哪里可以找到相机 ID。!!
这是你无法控制的。
【讨论】:
倒置表示得到镜像 @HarshBhavsar:无论如何,您无法强制第三方相机应用程序使用特定的硬件相机(前置/后置/等)。您无法检测使用了哪个相机。您无法确定用户在相机应用程序中是否翻转、裁剪或以其他方式影响了图像的结果。 @HarshBhavsar:欢迎您直接使用相机 API,这样您就可以完全控制用户体验。现在,您将这项工作委托给第三方相机应用程序。这意味着图片和视频的外观取决于该应用的作者以及用户。 是的。知道了 !但我不知道为什么从前置摄像头(默认)捕获的图像和视频得到镜像/视频......!以上是关于如何查看前置摄像头 ID?捕获的图像也是来自前置摄像头的镜像。的主要内容,如果未能解决你的问题,请参考以下文章
具有多个选项的 Android 意图,即从图库中选择图像并使用前置摄像头捕获图像