Главная » Разработка для Android » Использование камеры и создание снимков

0

Вместе с ростом популярности цифровых камер (особенно  внутри мо- бильных телефонов), цены на них значительно снизились,  а сами камеры стали намного компактнее. Сейчас трудно найти мобильный телефон без камеры, и устройства  на базе Android не исключение.

Модель G1 выпущена в 2008 г., оснащалась она камерой в 3,2 мегапик- села. На сегодняшний день некоторые  устройства  оснащены  5-мегапик- сельными  камерами,  а одна модель — сенсором  с разрешением 8,1 мега- пиксела.

В следующих разделах  описан механизм,  который  управляет  камерой и делает снимки внутри приложения.

Использование Намерений для создания снимков

Самый  простой  способ сделать снимок с помощью камеры — исполь- зовать статическую константу ACTION_IMAGE_CAPTURE из объекта MediaStore для создания Намерения, которое потом нужно передать методу startActivityForResult.

startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);

Данный  код запустит  Активность для управления камерой,  позволяя таким образом пользователям вручную изменять  настройки изображения (это освобождает  вас от необходимости создавать  свое собственное  при- ложение для этих нужд).

Процесс создания снимков предусматривает два режима.

• Миниатюра. По умолчанию фотография возвращается в виде объекта Bitmap, содержащего миниатюру. Этот объект находится в параметре data, передаваемом в метод onActivityResult. Как показано в листин- ге 11.11, чтобы получить  миниатюру  в виде объекта Bitmap,  нужно вызвать метод getParcelableExtra из Намерения, передав ему строковое значение data.

• Полноценное  изображение. Если вы укажете исходящий  путь URI с помощью параметра  MediaStore.EXTRA_OUTPUT в запущенном Намерении, полноразмерное изображение, снятое камерой, сохранится в заданном месте. В таком случае в метод onActivityResult не будет передана миниатюра, а итоговое Намерение продемонстрирует значе- ние null.

В листинге  11.11 показано, как при создании  снимка получать  миниа- тюру или полноценное  изображение,  используя Намерение.

Листинг 11.11. Создание снимка с помощью Намерения

private static int TAKE_PICTURE = 1;

private Uri outputFileUri;

private void getThumbailPicture() {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent, TAKE_PICTURE);

}

private void saveFullImage() {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

File file = new File(Environment.getExternalStorageDirectory(), "test.jpg");

outputFileUri = Uri.fromFile(file);

intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(intent, TAKE_PICTURE);

}

@Override

protected void onActivityResult(int requestCode,

int resultCode, Intent data) {

if (requestCode == TAKE_PICTURE) { Uri imageUri = null;

// Check if the result includes a thumbnail Bitmap if (data != null) {

if (data.hasExtra("data")) {

Bitmap thumbnail = data.getParcelableExtra("data");

// TODO Какие-то действия с миниатюрой

}

}

else {

// TODO Какие-то действия с полноценным изображением,

// сохраненным по адресу outputFileUri

}

}

}

Сделав  снимок, можете добавить  его в источник  MediaStore, как по- казано далее в этой главе, или обработать его, чтобы использовать внутри своего приложения, прежде чем удалить.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии