2016-06-29 16 views
1

Ich versuche, eine Standardkamera mit Intent sowohl für die Bild- als auch für die Videoaufnahme zu verwenden. wenn ich an der Frontkamera umschalte und die Bild- oder Videovorschau (aufgenommenes Bild oder Video) aufnehme, wird invertiert. So jetzt möchte ich setzen preScale in frontCamera. Aber wusste nicht, wo man Kamera ID in Standard Kamera finden. !!Wie überprüfe ich die Front Cam ID? Auch das aufgenommene Bild wird von der Frontkamera gespiegelt.

Hinweis: Dies ist keine benutzerdefinierte Kamera. !!

Problem ist: Captured Image von Front-Kamera bekommen Bild ist Spiegelbild. Schauen Sie hinein, wenn es ein Problem gibt? Ich habe nicht bekommen! Thx

Sogar gespeichertes aufgenommenes Bild in SDCard auch Spiegelbild! Jetzt, wie preScale oder irgendeine andere Idee, iT zu korrigieren ??

Hilfe!

photo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      captureImage(); 


     } 
    }); 

CatureImage Methode

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; 
} 

und Meine Tätigkeit Ergebnis

@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; 
    } 

Antwort

0

Ich versuche Standard-Kamera mit Absicht für Bild und Video-Capture-

zu verwenden Es gibt keine einzelne "Standardkamera mit Absicht" in Android. Es gibt Tausende von Android-Gerätemodellen. Diese werden mit Hunderten von verschiedenen "Standard-Kamera mit Intent" -Apps ausgeliefert. Benutzer können andere "Standardkamera mit Intent" -Apps aus dem Play Store oder anderen Orten installieren. Jede dieser Apps könnte das sein, was der Benutzer für die Aufnahme des Bildes (ACTION_IMAGE_CAPTURE) oder das Video (ACTION_VIDEO_CAPTURE) auswählen möchte.

, wenn ich nach vorne Kamera drehen und das Bild oder Video-Vorschau (aufgenommene Bild oder Video) erfassen wird

invertiert

ich, dass erraten werde durch „invertiert“, Sie „gedreht“ bedeuten.

Es gibt Hunderte von verschiedenen möglichen Kamera-Apps. Viele speichern das Bild oder Video mit Metadaten, die die Viewer-App anweisen, das Bild zu drehen (z. B. haben JPEG-Fotos möglicherweise einen EXIF-Header mit Ausrichtung). Einige werden es nicht tun und sich entscheiden, den Inhalt selbst zu rotieren.

Auch die Bilder oder Videos von jeder Kamera (nach vorne, nach hinten, außen) konnten gedreht werden.

Daher sollten Sie nicht davon ausgehen, dass die Rotation an die bestimmte Kamera gebunden ist, die der Benutzer verwendet. Überprüfen Sie stattdessen den tatsächlichen Inhalt und reagieren Sie entsprechend. This sample project demonstriert dies für das Drehen eines JPEG-Bildes mit ein paar verschiedenen Techniken.

So jetzt möchte ich PreScale in FrontCamera setzen.

Sie können dies nicht kontrollieren.

Aber wusste nicht, wo Kamera-ID in Standard-Kamera zu finden. !!

Sie können dies nicht kontrollieren.

+1

invertiert bedeutet bekommen Spiegelbild –

+0

@HarshBhavsar: Unabhängig davon, haben Sie keine Möglichkeit, eine Drittanbieter-Kamera-App zu zwingen, eine bestimmte Hardware-Kamera (Front-/Rückseite/etc.) Zu verwenden. Sie haben keine Möglichkeit festzustellen, welche Kamera verwendet wurde. Sie können nicht feststellen, ob der Benutzer in der Kamera-App das Bild umgedreht, zugeschnitten oder anderweitig bearbeitet hat. – CommonsWare

+0

@CommonsWare Bearbeitete Frage! Ich hoffe du findest etwas !!!! –