none
Kamera Task RRS feed

  • Frage

  • Hallo, ich schreibe zur Zeit eine App, in der auch ein Barcode Reader verwendet wird. Bisher hatte ich das ganze mit einem CaptureTask realisiert und lief ganz gut. Nur natürlich, konnte ich nichts an der Auflösung, Flashmode etc. ändern. Daher bin ich nun auf PhotoCamera umgestiegen. Jedoch funktioniert das ganze nicht mehr so wie es sollte.

    Anbei mal mein Quellcode. Was ich möchte: Es soll automatisch ein Bild gemacht werden, welches direkt ausgewertet wird und im Erfolgsfall einige weitere Sachen ausführt. Ich möchte, dass das Bild mittig fokusiert wird und das alle 5 Sekunden ein Bild geschossen wir & geprüft wird. So wie es jetzt ist, steigt die App oft aus, im Debugmode auf dem Device mit VS2010 steigt es nicht aus, aber auf dem Smartphone ohne Debug allerdings schon.

    using System;
    using System.Windows.Media.Imaging;
    using Microsoft.Devices;
    using Microsoft.Phone.Controls;
    using System.Windows.Threading;
    using System.Windows;
    
    namespace WP7App
    {
        public partial class Cam2 : PhoneApplicationPage
        {        
            BitmapImage bi = new BitmapImage();
            
            PhotoCamera cam = new PhotoCamera();
    
            System.Windows.Threading.DispatcherTimer dt = new DispatcherTimer();
            System.Windows.Threading.DispatcherTimer dt2 = new DispatcherTimer();
    
            public Cam2()
            {
                InitializeComponent();
    
                
    
                dt.Interval = TimeSpan.FromSeconds(5);
                dt.Tick += delegate { capute(); };
                dt.Start();
    
                dt2.Interval = TimeSpan.FromSeconds(4);
                dt2.Tick += delegate { capute2(); };
                dt2.Start();
            }
    
            
            protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
            {
                // Check to see if the camera is available on the device.
                if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true) ||
                     (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) == true))
                {
                    // Initialize the default camera.
                    cam = new Microsoft.Devices.PhotoCamera();
                             
                    //Event is fired when the PhotoCamera object has been initialized
                    cam.Initialized += new EventHandler<Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);
                    cam.CaptureImageAvailable += new EventHandler<Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);
                    //Set the VideoBrush source to the camera
                    viewfinderBrush.SetSource(cam);
                    
                }
                else
                {
                    MessageBox.Show("Es steht keine Kamera zur Verfügung");
                    NavigationService.GoBack();
                }
            }
    
            void cam_Initialized(object sender, Microsoft.Devices.CameraOperationCompletedEventArgs e)
            {
                if (e.Succeeded)
                {
                    this.Dispatcher.BeginInvoke(delegate()
                    {
                        cam.FlashMode = FlashMode.Off;
                    });
    
                }
            }
            protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
            {
                if (cam != null)
                {               
                    // Dispose of the camera to minimize power consumption and to expedite shutdown.
                    cam.Dispose();                
                }
            }
    
            private void capute2()
            {            
                if (cam != null)
                {
                    try
                    {
                        cam.FocusAtPoint(0.5, 0.5);
                    }
                    catch (Exception ex)
                    {
                        
                    }
                }
            }
            private void capute()
            {           
                if (cam != null)
                {
                    try
                    {                   
                        cam.CaptureImage();                    
                    }
                    catch (Exception ex)
                    {
                        
                    }
                }
            }
    
            void cam_CaptureImageAvailable(object sender, Microsoft.Devices.ContentReadyEventArgs e)
            {
                Dispatcher.BeginInvoke(() =>
                {
                    BitmapImage bmp = new BitmapImage();
                    bmp.CreateOptions = BitmapCreateOptions.None;
                    bmp.SetSource(e.ImageStream);
    
                    WriteableBitmap wbmp = new WriteableBitmap(bmp);
                    string recognizedBarcode = string.Empty;
                    if (BarcodeHelper.TryToRecognizeBarcode(wbmp, out recognizedBarcode))
                    {
                        FormAdd.WEITER = true;
                        FormAdd.EANNUMMER = recognizedBarcode;
                        NavigationService.GoBack();
                    }
                    else
                    {
                        FormAdd.WEITER = false;
                    }
            });
            }
        }
    }
    


    Dienstag, 4. September 2012 11:32

Antworten

  • Mittlerweile habe ich mein Problem gelöst, habe es über die cam.preview hinbekommen.

    Aber ein Problem besteht noch,  Ist es möglich, die Beleuchtung zu erhöhen? (sowas wie unter der normalen kamera, Einstellungen -> "Helligkeit".

    Dienstag, 4. September 2012 20:40

Alle Antworten