суббота, 5 февраля 2011 г.

Windows Phone 7. Camera API

Вот уж никогда не думал, что смогу первым додуматься до чего-нибудь...
Собственно наткнулся на тему, о разработке альтернативной программы для фотографирования под WP7. По умолчанию WP7 не дает доступа к фотокамере, но тут описан способ как это обойти.
Собственно оригинальная тема на xda. Программа имеет один существенный недостаток - она умеет делать снимки только 640x480. Любопытства ради, потратил сегодня 40 минут и обошел эту проблему (никакой документации понятное дело нет - все методом тыка).

namespace CameraApp
{
    public partial class MainPage : PhoneApplicationPage
    {
        PhotoCamera camera;

        public MainPage()
        {
            InitializeComponent();
            camera = new PhotoCamera();
            cameraVisualizer.SetSource(camera);
            camera.Initialized += new EventHandler(camera_Initialized);
        }


       private void button1_Click(object sender, RoutedEventArgs e)
       {
          //список всех разрешений для камеры       
          foreach (CaptureResolution res in camera.GetAvailableResolutions())
         {
             listBox1.Items.Add(res.Height.ToString() + "x" + res.Width.ToString());
         }
         //ну и выбираем самое высокое - для моего аппарата 5MPix
         camera.SetResolution(camera.GetAvailableResolutions().Last());
         camera.CaptureImage();
       }

      void camera_Initialized(object sender, EventArgs e)
      {
          camera.ImageAcquired += new EventHandler(camera_ImageAcquired);
          camera.ImageSavedToDisk += new EventHandler(camera_ImageSavedToDisk);
      }

      void camera_ImageSavedToDisk(object sender, ContentReadyEventArgs e)
      {

          //собственно и все - неясно как до этого никто не допер
          //картинка сохраняется в IsolatedStorage приложения - дальше делай с ней что хочешь 
         this.Dispatcher.BeginInvoke(() =>
         {
               listBox1.Items.Add(e.RelativePath);//тут у нас имя файла
         });
      }

     void camera_ImageAcquired(object sender, EventArgs e)
     {
        //тут чего-нибудь можно вывести...  тоже через Dispatcher - иначе вылетит исключение 
     }

}

Собственно сразу же про это и написал (тыц)... Вот она новая - система, все приколы познаются сейчас...
ЗЫ: последствия моей работы - SHCameraApp
ЗЗЫ: автор оригинального проекта остановил разработку после моего релиза, жаль - именно он сподвиг меня на шевеление мозгами...

Комментариев нет: