如何查看前置摄像头 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 意图,即从图库中选择图像并使用前置摄像头捕获图像

前置摄像头安卓。 [复制]

如何使前置摄像头拍摄的视频不是逆安卓?

如何使用 Camera2 获取前置摄像头的 ID?

IOS Swift 3:拍摄相机图片后水平翻转前置摄像头图像

相机预览很好,但前置摄像头会产生非常暗的照片