2016-06-29 169 views
1

我試圖使用默認相機與意圖爲圖像和視頻捕獲。 當我轉向前置攝像頭並拍攝圖像或視頻預覽(拍攝的圖像或視頻)時,會發生顛倒。所以現在我想把preScalefrontCamera。但不知道在哪裏可以找到相機ID在默認相機如何檢查前置攝像頭ID?捕獲的圖像也是來自前置攝像頭的鏡像。

注意:這不是自定義相機。

問題是:從前置攝像頭獲取的圖像獲取圖像是鏡像。看看有沒有問題?我沒有得到! Thx

即使在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; 
    } 

回答

0

我試圖使用默認的攝像頭意圖兩個圖像和視頻捕捉

Android中沒有單一的「Intent」默認相機。有數以千計的Android設備型號。這些附帶數百個不同的「意向」默認相機應用程序。用戶可以從Play商店或其他地方安裝其他帶有Intent應用的「默認相機」。這些應用程序中的任何一個都可以是用戶選擇用來拍攝照片(ACTION_IMAGE_CAPTURE)或錄製視頻(ACTION_VIDEO_CAPTURE)。

當我翻到前面的相機,捕捉圖像或視頻預覽(拍攝的圖像或視頻)反轉

我要去猜測,通過「倒」,你的意思是「旋轉」。

有數百種不同的可能的相機應用程序。許多人會通過元數據保存圖像或視頻,以告訴觀看者應用程序旋轉圖像(例如,JPEG照片可能有一個方向EXIF標頭)。有些人不會選擇自己旋轉內容。

此外,任何攝像頭(前置,後置,外置)的圖像或視頻均可旋轉。

因此,您不應該假設旋轉與用戶使用的特定相機相關聯。相反,檢查實際內容並作出相應的反應。 This sample project演示了這個旋轉JPEG圖像,使用幾種不同的技術。

所以現在我想把preScale放在frontCamera中。

你無法控制這個。

但不知道在哪裏可以找到相機ID在默認相機。

你無法控制這個。

+1

倒轉意味着變得鏡像 –

+0

@HarshBhavsar:無論如何,你無法強迫第三方相機應用程序使用特定的硬件攝像頭(前置/後置/等)。您無法檢測使用了哪臺相機。您無法確定相機應用內的用戶是否翻轉了圖像,裁剪了它,否則會影響圖像的結果。 – CommonsWare

+0

@CommomsWare編輯的問題!我希望你找到一些東西! –

相關問題