2012-03-14 7 views
12

Używam intencji aparatu do robienia zdjęć. To jest mój kod i działa świetnie:Sesja kamery zwraca mały obraz

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

mój onActivityResult wygląda następująco:

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
    if (resultCode == RESULT_OK) { 
     Bundle extras = data.getExtras(); 
     Bitmap photo = (Bitmap) extras.get("data"); 
    } 
} 

Problem polega na tym, że podczas gdy zdjęcie wykonane przez kamerę jest 480 * 800 (używam HTC Desire), zwrócona bitmapa to tylko 194 * 324!

Każdy pomysł, dlaczego tak się dzieje i jak go rozwiązać?

Dzięki!

Odpowiedz

0

Jeśli chcemy uzyskać obraz wysokiej jakości z kamery „T mieć wybór, ale aby zapisać go do pliku, a następnie użyć:

  1. Więc przede wszystkim, jak wcześniej musimy stworzyć static int, który będzie nasz requestCode:

publiczne statyczny ostateczna int CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE = 1777;

  1. Następnie ogień ponownie zamiar rozpocząć działalność na skutek:

Intent zamiarem = new Intent ("android.media.action.IMAGE_CAPTURE"); Plik file = nowy Plik (Environment.getExternalStorageDirectory() + File.separator + "image.jpg"); intent.putExtra (MediaStore.EXTRA_OUTPUT, Uri.fromFile (plik)); startActivityForResult (intent, CAPTURE_IMU_FULLSIZE_ACTIVITY_REQUEST_CODE);

Tutaj faktycznie przekazujemy URI jako dodatek do intencji w celu zapisania obrazu.

  1. Wreszcie otrzymamy wynik w onActivityResult:

     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
         { 
          //Check that request code matches ours: 
          if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE) 
          { 
           //Get our saved file into a bitmap object: 
    
           File file = new File(Environment.getExternalStorageDirectory()+File.separator + 
         "image.jpg"); 
           Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700); 
          } 
        } 
    

metoda decodeSampledBitmapFromFile jest:

public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) 
{ // BEST QUALITY MATCH 

    //First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    // Calculate inSampleSize, Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    options.inPreferredConfig = Bitmap.Config.RGB_565; 
    int inSampleSize = 1; 

    if (height > reqHeight) 
    { 
     inSampleSize = Math.round((float)height/(float)reqHeight); 
    } 
    int expectedWidth = width/inSampleSize; 

    if (expectedWidth > reqWidth) 
    { 
     //if(Math.round((float)width/(float)reqWidth) > inSampleSize) // If bigger SampSize.. 
     inSampleSize = Math.round((float)width/(float)reqWidth); 
    } 

    options.inSampleSize = inSampleSize; 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 

    return BitmapFactory.decodeFile(path, options); 
} 

dodać uprawnienia aparatu dowiemy się z do plik manifestu:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Nadzieja Pomogłoby to każdemu, kto szuka odpowiedniego rozwiązania. Ponieważ działało dla mnie w 100%.

Powiązane problemy