Опубликован: 14.08.2012 | Доступ: свободный | Студентов: 880 / 20 | Оценка: 5.00 / 5.00 | Длительность: 09:59:00
Специальности: Программист
Самостоятельная работа 24:

Графика, управление объектами

31.3. Захват изображения с камеры

Рассмотрим методику захвата изображений с камеры телефона. Создадим новую страницу, назовём её Camera.xaml. Добавим на страницу кнопку с подписью Сделать фото и элемент управления Image. Код элементов представлен в листинге 31.5

<image number="31.4" Height="326" HorizontalAlignment="Left" Margin="0,50,0,0" 
Name="image1" Stretch="Uniform" VerticalAlignment="Top" Width="450" />
            <Button Content="Сделать фото" Height="80" HorizontalAlignment="Left" Margin="86,446,0,0"
             Name="button1" VerticalAlignment="Top" Width="283" Click="button1_Click" />
Листинг 31.4. Код элементов, используемых для захвата изображения

Мы собираемся вызывать подсистему управления камерой из обработчика события нажатия на кнопку.

Для выполнения операции по захвату изображения нам понадобится класс CameraCaptureTask, для работы с ним понадобится пространство имен Microsoft.Phone.Tasks. В листинге 31.5 показан код файла Camera.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Windows.Media.Imaging;
using Microsoft.Phone.Tasks;

namespace P24_1
{
    public partial class Camera : PhoneApplicationPage
    {
        CameraCaptureTask camera = new CameraCaptureTask();
        public Camera()
        {
            InitializeComponent();
            camera.Completed += new EventHandler<PhotoResult>(camera_Completed);
        }

        void camera_Completed(object sender, PhotoResult e)
        {
            if (e.TaskResult == TaskResult.OK) 
            { 
                BitmapImage bmp = new BitmapImage(); 
                bmp.SetSource(e.ChosenPhoto); 
                image1.Source = bmp; 
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            camera.Show();
        }
    }
}
Листинг 31.5. Код файла Camera.xaml.cs

Здесь мы создаем новый объект camera типа CameraCaptureTask и пользуемся его методом Show() для того, чтобы отобразить подсистему управления камерой при нажатии на кнопку button1.

В конструкторе класса мы подключаем обработчик события Completed для объекта camera. Это событие происходит, когда мы завершаем съемку.

В обработчике, если изображение получено, мы создаем на его основе объект типа BitmapImage, после чего задаем свойство Source для изображения, что приводит, в итоге, к выводу изображения с камеры в элемент управления image1.

Этот пример можно испытать на эмуляторе, однако, лучше испытывать его на устройстве. Причем, после запуска приложения на устройстве его нужно отключить от компьютера, иначе, при запущенной программе Zune, интерфейс камеры не доступен, как и некоторые другие возможности). На рис. 31.9 вы можете видеть снимок, сделанный камерой. После нажатия на кнопку Принять он отобразится в нашем элементе управления (рис. 31.10.)

Результат съемки

Рис. 31.9. Результат съемки
Отображение результатов съемки в приложении

Рис. 31.10. Отображение результатов съемки в приложении

Рассмотрим теперь методику манипуляции изображениями на экране.

Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто