Изменение настроек камеры в зависимости от активности другого приложения
-
27-10-2019 - |
Вопрос
У меня есть приложение для 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();