Главная » Разработка для Android » Создание фотографий

0

Сделайте снимок, вызвав метод takePicture из объекта Camera, передав ему в качестве параметров ShutterCallback и две реализации PictureCallback (одну для необработанных изображений, другую для сжатых в формат JPEG).

Каждая  из этих двух функций обратного вызова получит  массив бай- тов — изображение в соответствующем формате, тогда как ShutterCallback сработает сразу после закрытия затвора камеры.

В листинге  11.18 показан  каркас, в котором  создается  и сохраняется снимок в формате JPEG  на карту SD.

Листинг 11.18. Создание фотографии

private void takePicture() {

camera.takePicture(shutterCallback, rawCallback, jpegCallback);

}

ShutterCallback shutterCallback = new ShutterCallback() {

public void onShutter() {

// TODO Действия при закрытии затвора камеры.

}

};

PictureCallback rawCallback = new PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) {

// TODO Действия с необработанным изображением.

}

};

PictureCallback jpegCallback = new PictureCallback() {

Продолжение ?

Листинг 11.18 (продолжение)

public void onPictureTaken(byte[] data, Camera camera) {

// Сохраните изображение в формате JPEG на карту SD FileOutputStream outStream = null;

try {

outStream = new FileOutputStream("/sdcard/test.jpg");

outStream.write(data);

outStream.close();

} catch (FileNotFoundException e) { Log.d("CAMERA", e.getMessage());

} catch (IOException e) {

Log.d("CAMERA", e.getMessage());

}

}

};

Чтение и запись метаданных EXIF, хранящихся в изображении

Класс ExifInterface предоставляет механизм  для чтения  и изменения данных EXIF  (Exchangeable Image File Format) внутри  файла  в формате JPEG. Создайте новый экземпляр этого класса, передав в его конструктор полное имя файла.

ExifInterface exif = new ExifInterface(filename);

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

Чтобы  прочитать  определенный атрибут  из метаданных  EXIF,  вызо- вите метод getAttribute из объекта ExifInterface, передав ему имя нужного атрибута. Класс Exifinterface содержит статические константы вида TAG_*, которые  можно использовать для доступа к стандартным  данным EXIF. Чтобы  изменить  метаданные,  примените  метод setAttribute, передав ему в качестве параметров имя атрибута и соответствующее  значение.

В листинге 11.19 показано, как из файла, хранящегося на карте SD, мож- но узнать координаты местности, где был сделан снимок, и модель камеры (информация о ней впоследствии отредактируется).

Листинг 11.19. Чтение и изменение  метаданных EXIF

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

try {

ExifInterface exif = new ExifInterface(file.getCanonicalPath());

// Узнаем модель камеры и данные о местности

String model = exif.getAttribute(ExifInterface.TAG_MODEL);

float[] latLng = new float[2];

exif.getLatLong(latLng);

// Задаем марку камеры exif.setAttribute(ExifInterface.TAG_MAKE, "My Phone");

} catch (IOException e) {

Log.d("EXIF", e.getMessage());

}

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

По теме:

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