Windows Phone 8 Kamera Görüntü İşleme 1 - Görüntü alma

Üç bölümden oluşacak yazımızın bu ilk bölümünde geliştireceğimiz uygulama telefon ön/arka kamera görüntüsüne erişeceğiz. İkinci yazımızda ise bu görüntüyü işleyip Gri renk filtresi uygulayacağız. Gerçek zaman görüntü işleme için bir önceki yazımızda anlattığımız Yerel Kod Modülü yazma tekniğini kullanacak, görüntü filtremizi C++ ile yazıp ana uygulama sayfasından çağıracağız. Üçüncü yazımızda ise aynı filtreyi ARM işlemciye özel makine dilinde yazacağız.

Anlatımını yaptığımız bu ilk projenin kaynak kodlarına https://aka.ms/kamera adresinden erişebilirsiniz.

Güncelleme ve yeni konuları takip edebileceğiniz adres: https://twitter.com/mustafakasap

 

1) Visual Studio'da yeni bir Windows Phone Projesi oluşturalım (bkz. Resim 1)

Resim 1: Yeni Windows Phone projesi

 

2) İşlemlerin çoğunu yeni proje dosyaları içerisinde yer alan MainPage.xaml ve MainPage.xaml.cs dosyalarında yapacağız (bkz. Resim 2). Bu dosya isimlerine çift tıklayıp açalım.

Resim 2: Proje ana dosyaları.

 

3) MainPage.xaml dosyası (arayüz tasarımının bulunduğu dosya) içerisinde bulunan kod satırlarından <grid ...> </grid> arasinda yer alan satirlari siliyor, yerine aşağıdaki kodu yazıyoruz.

...

     <!--LayoutRoot is the root grid where all page content is placed-->    <Grid x:Name="LayoutRoot" Background="Transparent">        <StackPanel>            <Rectangle x:Name="rViewfinder1" Canvas.ZIndex="1" Width="240" Height="320" Margin="90,0" RenderTransformOrigin="0.5,0.5">                <Rectangle.RenderTransform>                    <CompositeTransform Rotation="90"/>                </Rectangle.RenderTransform>                <Rectangle.Fill>                    <VideoBrush x:Name="vbVideoBrush1" />                 </Rectangle.Fill>            </Rectangle>        </StackPanel>    </Grid> ...

Bu kod ile Silverlight Rectangle görsel bileşeni içerisinde VideoBrush bileşeni kullanarak kamera görüntüsünü yansıtacağız. VideoBrush bileşenine C# dilinde yazacağımız kod ile kod sayfasından erişebilmek için vbVideoBrush1 (yada istediğiniz bir ad) adını veriyoruz. Bu kod bloğu içerisinde yer alan CompositeTransform etiketi ile görüntüyü saat yönünde 90 derece çeviriyoruz.

4) MainPage.xaml.cs dosyası içerisinde aşağıdaki değişiklikleri yapıyoruz.

  4.1) Kameraya erişim ve kameradan gelen görüntüyü ekranda gösterebilmek için MainPage.xaml.cs dosyasında namespace anahtar kelimesi üzerine aşağıdaki isim uzayı satırlarını eklememiz gerekiyor.

             using Windows.Phone.Media.Capture;
             using Microsoft.Devices;

  4.2) public partial class MainPage:PhoneApplicationPage satırından hemen sonra kameraya erişim için gereken m_capture (yada belirleyeceğiniz başka ad) adındaki değişkeni tanımlıyoruz.

            PhotoCaptureDevice m_kamera;

  4.3) Ana sayfa yüklendiğinde çalıştırılması için "Loaded" metoduna asenkron olarak MainPage_Loaded adındaki metodu bağlıyoruz.

             Loaded += MainPage_Loaded;

  Bu satırı public MainPage() metodunun sonuna yazıyoruz.

  4.4) Son olarak ana sayfa yüklendiğinde çağrılacak olan MainPage_Loaded metodu içerisine aşağıdaki kodu yazıyoruz.

        asyncvoid MainPage_Loaded(object sender, RoutedEventArgs e)

               {

                    Windows.Foundation.Size p_boyut = new Windows.Foundation.Size(640, 480);

                    m_kamera = awaitPhotoCaptureDevice.OpenAsync(CameraSensorLocation.Back, p_boyut);

                    await m_kamera.FocusAsync();

                    vbVideoBrush1.SetSource(m_kamera);

                }

 

   Bu kod parçası asenkron olarak telefon arka kamerasından belirtilen çözünürlükte görüntü alıp VideoBrush bileşeni içerisinde göstermek için kullanılıyor.

 

5) Uygulamanın cihaz kamerasına erişimi için gerekli olan erişim izinlerini de verdikten sonra  (Resim 3) emülatör'de test edebiliriz.

Resim 3: Uygulama erişim izinleri.

 

 WMAppManifest.xml adındaki manifesto dosyası içerisinde bu değişiklikleri yapmadığımız takdirde uygulamamız çalışmayacak, Windows Phone Store'a gönderdiğimiz takdirde ise sertifikasyon sürecinden başarı ile geçemeyecektir.

 

 

 Güncelleme ve yeni konuları takip edebileceğiniz adres: https://twitter.com/mustafakasap