Изменение настроек камеры в зависимости от активности другого приложения

StackOverflow https://stackoverflow.com/questions/7328721

Вопрос

У меня есть приложение для Android, которое вызывает родное приложение камеры, чтобы сделать снимок, и возвращает изображение для дальнейших манипуляций.Моя проблема в том, что я сталкиваюсь с утечкой памяти, если камера установлена на 2 (+) мегапикселя.В идеале я хочу, чтобы он был установлен на самый низкий уровень (VGA), поскольку качество изображения в этом приложении не имеет значения.

Есть ли способ из моего приложения изменить настройки приложения камеры собственного устройства?Вот код, который я использую:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            mImageCaptureUri = 
            Uri.fromFile(new file(Environment.getExternalStorageDirectory(),
            "fname_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

Будем признательны за любую помощь.

Это было полезно?

Решение

К сожалению, нет способа сообщить приложению камеры, с каким разрешением изображения вы хотите сделать снимок.

Но, тем не менее, вы можете что-то сделать с этим самостоятельно в своем приложении, используя некоторые функции растрового изображения, такие как (2-й вариант больше подходит для ваших нужд)

  • Понижающая дискретизация.Размер выборки должен быть больше 1.Попробуйте 2 и 4.

    BitmapFactoryOptions.inSampleSize = sampleSize;

  • Создание нового растрового изображения с размером, который вам требуется от исходного растрового изображения..

    // calculate the change in scale 
    float scaleX = ((float) newWidth_that_you_want) / originalBitmap.width();
    float scaleY = ((float) newHeight_that_you_want) / originalBitmap.height();
    
    // createa matrix for the manipulation
    Matrix matrix = new Matrix();
    matrix.postScale(scaleX , scaleY );
    
    Bitmap newBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, width, height, matrix, true);
    //since you don't need this bitmap anymore, mark it so that GC can reclaim it.
    //note: after recycle you should not use the originalBitmap object anymore.
    //if you do then it will result in an exception.
    originalBitmap.recycle();
    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top