пятница, 8 октября 2010 г.

Windows Phone 7. Работа с камерой

В этой статье расскажу о том, как можно получать изображения с камеры в Windows Phone 7. Нужно понимать, что невозможно получить доступ к камере напрямую. Можно только воспользоваться стандартной утилитой, которая позволяет сделать фотографию и передать ее обратно в приложение. Такое поведение утилит в Windows Phone 7 носит название задач выбора (choosers). Помимо этого есть задачи выполнения (launchers), которые ведут себя так же, как и задачи выбора, но не передают никаких данных обратно в приложение. Благодаря им можно из вашего приложения вызывать адресную книгу, прерывать ваше приложение телефонным вызовом и т.д. Обо всем этом подробнее поговорим в следующих статьях.

Давайте попробуем получить изображение с камеры. Для этого создадим новый проект Windows Phone Application, назовем его, например, WindowsPhoneCameraApplication. Изменим заголовки и добавим элемент Image с именем cameraImage на страницу:

clip_image002

Пусть по инициализации приложения мы будем получать возможность сделать снимок, после чего он автоматически отображался бы в cameraImage.

Для работы с камерой нам понадобится пространство имен Microsoft.Phone.Tasks, в котором содержится chooser CameraCaptureTask.

Напишем такой код:

    public partial class MainPage : PhoneApplicationPage
    {
        CameraCaptureTask camera;

        public MainPage()
        {
            InitializeComponent();

            camera = new CameraCaptureTask();
            camera.Completed += SendToCameraImage;
            camera.Show();
        }

        void SendToCameraImage(object sender, PhotoResult agrs)
        {
            if (agrs.TaskResult == TaskResult.OK)
            {
                var bmp = new BitmapImage();
                bmp.SetSource(agrs.ChosenPhoto);
                cameraImage.Source = bmp;
            }
        }
    }


Мы используем обработчик SendToCameraImage по событию завершения работы камеры для того, чтобы сохранить полученный снимок в формате bmp из потока, содержащегося в ChosenPhoto. Метод Show просто инициализирует chooser по работе с камерой.

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

Попробуем запустить без отладки, нажав Ctrl+F5:

clip_image004

Важным является то, что при запуске приложения по работе с камерой наше приложение переходит в состояние захоронения. То есть сохраняется состояние программы, для того, чтобы запустить ее после получения снимка с камеры. Именно по этой причине во время запуска с отладчиком при запуске  утилиты по работе с камерой Visual Studio рапортует о завершении приложения и возвращается в режим редактирования. Как можно продолжить отладку после завершения работы с камерой? Сделав снимок и нажав кнопку «Accept», нужно в течение 10 секунд нажать на кнопку F5, и Visual Studio снова подключится к приложению.

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

1 комментарий: