Камера намерена вернуть маленькую картинку - PullRequest
14 голосов
/ 14 марта 2012

Я использую камеру, чтобы сделать снимок.Это мой код, и он отлично работает:

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

мой onActivityResult выглядит следующим образом:

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

Проблема в том, что при снимке, сделанном камерой, 480 * 800 (Я использую HTC Desire), возвращаемое растровое изображение - только 194 * 324!

Есть идеи, почему это происходит и как его решить?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 14 марта 2012

прочитайте этот ответ, чтобы получить полный размер изображения Как сделать снимок и сохранить его с помощью собственной камеры Android


, когда вы используете чтение Bitmap из доп.вы получите Thumbnail изображения

4 голосов
/ 18 мая 2014

У меня та же проблема, я нашел пример на сайте Google Android: http://developer.android.com/training/camera/photobasics.html

1 голос
/ 02 мая 2016

Если мы хотим получить высококачественное изображение из Активность камеры. У нас нет выбора, кроме как сохранить ее в файл и затем использовать:

  1. Итак, прежде всего, как и прежде, нам нужно создать статический int, который будет нашим requestCode:

публичный статический финал int CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE = 1777;

  1. Затем мы снова запускаем намерение запустить Activity для результата:

Intent intent = new Intent ("android.media.action.IMAGE_CAPTURE"); файл файл = новый Файл (Environment.getExternalStorageDirectory () + File.separator + "Image.jpg"); intent.putExtra (MediaStore.EXTRA_OUTPUT, Uri.fromFile (файл)); startActivityForResult (намерение, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE);

Здесь мы фактически передаем URI в качестве дополнительного значения для сохранения изображения.

  1. Наконец, мы получим результат в 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);
                 }
        }
    

Метод decodeSampledBitmapFromFile:

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

добавить соответствующие разрешения камеры в файл манифеста:

<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" />

Надеюсь, это поможет кому-нибудь, как найти решение. Как это работает на 100% для меня.

...