Android-изображение с камеры в очень маленьком размере - PullRequest
5 голосов
/ 06 сентября 2011

Я пытаюсь захватить изображение с камеры, сжать его и сохранить на SD-карте.Если я напрямую сохраню его на SD-карту, используя код, указанный ниже, я получу полное изображение.Но если я попытаюсь загрузить изображение в систему, я получу очень маленький размер изображения, например 320 на 240, вместо полного 5-мегапиксельного изображения.

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
    startActivityForResult(intent, CAMERA_PIC_REQUEST);  

, где getImageURI () равно

    private Uri getImageUri() {
    // Store image in dcim
    file = new File(Environment.getExternalStorageDirectory() + "/DCIM","itshelp.jpg");
    imgUri = Uri.fromFile(file);
    file.deleteOnExit();
       Log.e("syS","file is at "+imgUri);
    return imgUri;
}

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

    public void imageFromCamera() { //code to retrieve image
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivityForResult(intent, CAMERA_PIC_REQUEST);  
    }

и в моем startActivitForResult у меня есть следующее:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
        Bitmap bm = (Bitmap) data.getExtras().get("data"); 
        Log.e("sys", "width is "+bm.getWidth()); //im gettting an extremely small width here

        OutputStream outStream = null;
        file = new File(Environment.getExternalStorageDirectory() + "/DCIM","itshelp.png");
        try {
         outStream = new FileOutputStream(file);
         bm.compress(Bitmap.CompressFormat.JPEG, 70, outStream);
         outStream.flush();
         outStream.close();

         Log.i("Hub", "OK, Image Saved to SD");
         Log.i("Hub", "height = "+ bm.getHeight() + ", width = " + bm.getWidth());

        } catch (FileNotFoundException e) {

         e.printStackTrace();
         Log.i("Hub", "FileNotFoundException: "+ e.toString());

        } catch (IOException e) {

         e.printStackTrace();
         Log.i("Hub", "IOException: "+ e.toString());
        }



    }

1 Ответ

4 голосов
/ 07 сентября 2011

Когда вы вызываете намерение камеры без MediaStore.EXTRA_OUTPUT, камера возвращает только маленький эскиз, так как пакет намерений не предназначен для прохождения больших блоков памяти.Из документации SDK для MediaStore :

Стандартное намеренное действие, которое можно отправить, чтобы приложение камеры захватило изображение и вернуло его.Звонящий может передать дополнительный EXTRA_OUTPUT, чтобы указать, где будет записано это изображение.Если EXTRA_OUTPUT отсутствует, то изображение небольшого размера возвращается в качестве растрового объекта в дополнительное поле.Это полезно для приложений, которым нужно только небольшое изображение.Если присутствует EXTRA_OUTPUT, то полноразмерное изображение будет записано в значение Uri EXTRA_OUTPUT.

...