Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_71_ukr.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
331 Кб
Скачать
☆

Int width, int height);

public void surfaceDestroyed (SurfaceHolder holder);

    

Ми реалізуємо метод surfaceCreated (), що залишилися два методу запишемо з порожньою реалізацією.

У методі surfaceCreated () задамо вікно попереднього перегляду:

camera.setPreviewDisplay (holder);

    

Виконаємо необхідні настройки вікна попереднього перегляду (див. Лістинг 12.1).

Запустимо відображення вікна попереднього перегляду:

camera.startPreview ();

    

Прийшов час обговорити і реалізувати знімки можна робити. Для того, щоб зробити знімок необхідно викликати метод takePicture (). Виклик цього методу можна виконати з методу-обробника події натискання кнопки, тоді при натисканні на кнопку відразу буде отримана фотографія, а можна "розтягнути задоволення" і скористатися попередньою автофокусуванням.

Спочатку инициализируем кнопку і додамо слухача події натискання в методі onCreate () активності:

shotBtn = findViewById (R.id.bCameraShot);

shotBtn.setOnClickListener (new MyViewListener ());

    

В даному випадку слухачем є екземпляр внутрішнього класу MyViewListener, який реалізує інтерфейс View.OnClickListener.

class MyViewListener implements View.OnClickListener {

    @Override

    public void onClick (View v) {

        if (v == shotBtn) {

            camera.autoFocus (new MyAutoFocusCallback ());

        }

    }

}

    

У методі onClick () викликаємо обробник автофокусу, слухачем події автофокусування в даному випадку є екземпляр внутрішнього класу MyAutoFocusCallback, який реалізує інтерфейс Camera.AutoFocusCallback.

class MyAutoFocusCallback implements Camera.AutoFocusCallback {

    @Override

    public void onAutoFocus (boolean paramBoolean, Camera

                                             paramCamera) {

    if (paramBoolean) {

        // якщо вдалося сфокусуватися, робимо знімок

        paramCamera.takePicture (null, null, null,

                                      new MyPictureCallback ());

        }

    }

}

    

Метод takePicture () має чотири параметри:

Camera.ShutterCallback shutter - викликається в момент отримання зображення з матриці;

Camera.PictureCallback raw - програмі передаються для обробки raw дані (якщо підтримується апаратно);

Camera.PictureCallback postview - програмі передаються повністю оброблені дані (якщо підтримується апаратно);

Camera.PictureCallback jpg - програмі передається зображення в форматі jpg. Тут може бути організована запис зображення на карту пам'яті.

У нашому випадку останнім параметром є екземпляр класу MyPictureCallback (), який реалізує інтерфейс Camera.PictureCallback. В цьому класі реалізований єдиний метод (див. Лістинг 12.1):

public void onPictureTaken (byte [] paramArrayOfByte, Camera paramCamera) {...}

    

У лістингу 12.1 представлений код активності, що реалізує роботу з камерою і дозволяє виконувати знімки.

Щоб дозволити програмі працювати з камерою і зберігати фотографії на карті пам'яті, в маніфест необхідно додати наступні дозволи:

<uses-permission android:name="android.permission.CAMERA" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]