示例#1
0
        //Code for initialization, capture completed, image availability events; also setting the source for the viewfinder.
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            // Check to see if the camera is available on the phone.
            if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true) ||
                (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) == true))
            {
                // Initialize the camera, when available.
                if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing))
                {
                    // Use front-facing camera if available.
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.FrontFacing);
                }
                else
                {
                    // Otherwise, use standard camera on back of phone.
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);
                }

                // Event is fired when the PhotoCamera object has been initialized.
                cam.Initialized += new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);

                // Event is fired when the capture sequence is complete.
                cam.CaptureCompleted += new EventHandler <CameraOperationCompletedEventArgs>(cam_CaptureCompleted);

                // Event is fired when the capture sequence is complete and an image is available.
                cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);

                // Event is fired when the capture sequence is complete and a thumbnail image is available.
                cam.CaptureThumbnailAvailable += new EventHandler <ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);

                //Set the VideoBrush source to the camera.
                viewfinderBrush.SetSource(cam);
            }
            else
            {
                // The camera is not supported on the phone.
                this.Dispatcher.BeginInvoke(delegate()
                {
                    // Write message.
                    // txtDebug.Text = "A Camera is not available on this phone.";
                });

                // Disable UI.
                //ShutterButton.IsEnabled = false;
            }
        }
示例#2
0
 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
 {
     if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true)
     {
         cam = new PhotoCamera(CameraType.Primary);
         cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);
         viewfinderBrush.SetSource(cam);
     }
     else
     {
         if ((MessageBox.Show("A Camera is not available on this device.", "Quit", MessageBoxButton.OK) == MessageBoxResult.OK))
         {
             timer.Stop();
             App.Quit();
         }
     }
 }
示例#3
0
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
            {
                return;
            }

            SystemTray.IsVisible = true;
            _phoneHeight         = Application.Current.Host.Content.ActualHeight;
            _phoneWidth          = Application.Current.Host.Content.ActualWidth;

            if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true) ||
                (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) == true))
            {
                if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing))
                {
                    cam = new PhotoCamera(CameraType.FrontFacing);
                }
                else
                {
                    cam = new PhotoCamera(CameraType.Primary);
                }

                _cameraHeight = cam.AvailableResolutions.FirstOrDefault().Height;
                _cameraWidth  = cam.AvailableResolutions.FirstOrDefault().Width;

                cam.CaptureCompleted      += new EventHandler <CameraOperationCompletedEventArgs>(cam_CaptureCompleted);
                cam.CaptureImageAvailable += new EventHandler <ContentReadyEventArgs>(cam_CaptureImageAvailable);
                viewfinderBrush.SetSource(cam);
                OnOrientationChanged(new OrientationChangedEventArgs(Orientation));

                bmi = new BitmapImage(new Uri("/Images/Levels/L2.JPG", UriKind.Relative));
                this.grimacePattern.Source = bmi;

                startDate = DateTime.Now;

                timer.Tick    += new EventHandler(timer_Tick);
                timer.Interval = new TimeSpan(0, 0, 1);
                timer.Start();
            }
            else
            {
                Message = "A Camera is not available on this phone.";
            }
        }
        //Code for initialization, capture completed, image availability events; also setting the source for the viewfinder.
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            MDEDB = new MDEDataContext();
            int meetingID = int.Parse(NavigationContext.QueryString["meetingID"]);

            meeting = new ObservableCollection <Meeting>(from Meeting m in MDEDB.Meetings where m.ID == meetingID select m)[0];

            // Check to see if the camera is available on the phone.
            if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true) ||
                (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) == true))
            {
                // Initialize the camera, when available.
                if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing))
                {
                    // Use front-facing camera if available.
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.FrontFacing);
                }
                else
                {
                    // Otherwise, use standard camera on back of phone.
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);
                }

                // Event is fired when the PhotoCamera object has been initialized.
                cam.Initialized += new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);

                // Event is fired when the capture sequence is complete and an image is available.
                cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);

                //Set the VideoBrush source to the camera.
                viewfinderBrush.SetSource(cam);
            }
            else
            {
                // The camera is not supported on the phone.
                this.Dispatcher.BeginInvoke(delegate()
                {
                    // Write message.
                    txtDebug.Text = "A Camera is not available on this phone.";
                    // Disable UI.
                    ShutterButton.IsEnabled = false;
                });
            }
        }
示例#5
0
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            List <BarcodeItem> main = new List <BarcodeItem>(AppContext.appContext.itemList);

            this.FirstListBox.ItemsSource = main;
            if (this.camera != null)
            {
                if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true)
                {
                    this.camera                      = new PhotoCamera(CameraType.Primary);
                    this.camera.Initialized         += OnPhotoCameraInitialized;
                    CameraButtons.ShutterKeyPressed += OnButtonFullPress;
                    // The event is fired when the viewfinder is tapped (for focus).
                    CodeScannerCanvas.Tap             += new EventHandler <GestureEventArgs>(FocusTapped);
                    this.camera.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(CameraPictureReady);
                    viewfinderBrush.SetSource(this.camera);
                }
            }
        }
示例#6
0
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            //Check to see if camera is available on device
            if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true))
            {
                // Initialize the camera, when available

                //Use standard camera on back of device
                cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);

                // Event is fired when the PhotoCamera object has been initialized.
                cam.Initialized += new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);

                // Event is fired when the capture sequence is complete.
                cam.CaptureCompleted += new EventHandler <CameraOperationCompletedEventArgs>(cam_CaptureCompleted);

                // Event is fired when the capture sequence is complete and an image is available.
                cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);

                // Event is fired when the capture sequence is complete and a thumbnail image is available.
                cam.CaptureThumbnailAvailable += new EventHandler <ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);

                //Event fired when shutter button receives a full press
                CameraButtons.ShutterKeyPressed += OnButtonFullPress;

                //Set VideoBrush source to camera
                viewfinderBrush.SetSource(cam);
            }
            else
            {
                //Camera not supported
                this.Dispatcher.BeginInvoke(delegate()
                {
                    //Write message to UI
                    txtDebug.Text = "A Camera is not available on this device.";
                });

                //Disable UI
                ShutterButton.IsEnabled = false;
                FlashButton.IsEnabled   = false;
                ResButton.IsEnabled     = false;
            }
        }
        public void InitializeCamera()
        {
            _cameraInitializedEvent.Reset();

            // 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.
                _camera = new Microsoft.Devices.PhotoCamera();

                //Event is fired when the PhotoCamera object has been initialized
                Camera.Initialized +=
                    new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(CameraInitialized);
                Camera.CaptureImageAvailable += CameraOnCaptureImageAvailable;
                Camera.CaptureCompleted      += CameraOnCaptureCompleted;

                //Set the VideoBrush source to the camera
                viewfinderBrush = new VideoBrush();
                viewfinderBrush.SetSource(Camera);
                videoRectangle.Fill = viewfinderBrush;



                // initialize the shutter sound
                // Audio
                Stream stream = TitleContainer.OpenStream("shutter.wav");
                _cameraShutterSound = SoundEffect.FromStream(stream);

                CameraButtons.ShutterKeyPressed -= CameraButtonsOnShutterKeyPressed;
                if (_photoOnPress)
                {
                    CameraButtons.ShutterKeyPressed += CameraButtonsOnShutterKeyPressed;
                }
            }
            else
            {
                // The camera is not supported on the device.
                MessageBox.Show(
                    "Sorry, this sample requires a phone camera and no camera is detected. This application will not show any camera output.");
            }
        }
示例#8
0
        //Code for initialization, capture completed, image availability events; also setting the source for the viewfinder.
        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))
            {
                // use standard camera on back of device.
                cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);

                // Event is fired when the PhotoCamera object has been initialized.
                cam.Initialized += new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);

                // The event is fired when auto-focus is complete.
                cam.AutoFocusCompleted += new EventHandler <CameraOperationCompletedEventArgs>(cam_AutoFocusCompleted);

                // The event is fired when the viewfinder is tapped (for focus).
                viewfinderCanvas.Tap += new EventHandler <GestureEventArgs>(focus_Tapped);


                //Set the VideoBrush source to the camera.
                viewfinderBrush.SetSource(cam);

                pumpFrames   = true;
                FramesThread = new System.Threading.Thread(PumpFrames);

                // Start pump.
                FramesThread.Start();
            }
            else
            {
                // The camera is not supported on the device.
                this.Dispatcher.BeginInvoke(delegate()
                {
                    // Write message.
                    txtDebug.Text = "A Camera is not available on this device.";
                });

                // Disable UI.
                AFButton.IsEnabled  = false;
                ResButton.IsEnabled = false;
            }
        }
示例#9
0
 // Constructor
 public MainPage()
 {
     InitializeComponent();
     AccelerometerSensor = new Accelerometer();
     AccelerometerSensor.CurrentValueChanged += new EventHandler <SensorReadingEventArgs <AccelerometerReading> >(AccelerometerSensor_ReadingChanged);
     AccelerometerStartup();
     if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true))
     {
         viewfinderCanvas.Visibility = Visibility.Visible;
         var cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);
         if (Orientation == PageOrientation.PortraitUp || Orientation == PageOrientation.PortraitDown || Orientation == PageOrientation.Portrait)
         {
             // Rotate for LandscapeRight orientation.
             viewfinderBrush.RelativeTransform =
                 new CompositeTransform()
             {
                 CenterX = 0.5, CenterY = 0.5, Rotation = 90
             };
         }
         viewfinderBrush.SetSource(cam);
     }
 }
示例#10
0
        public CameraPage()
        {
            InitializeComponent();

            CameraButtons.ShutterKeyPressed += OnButtonFullPress;

            if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
            {
                myCam = new PhotoCamera(CameraType.Primary);

                ViewfinderCanvas.Height = myCam.Resolution.Height;
                ViewfinderCanvas.Width  = myCam.Resolution.Width;

                ViewfinderBrush.SetSource(myCam);
                //myCam.Initialized += cam_Initialized;
                myCam.CaptureCompleted += myCam_CaptureCompleted;
            }
            else
            {
                MessageBox.Show("A Camera is not available on this device.", "Error!", MessageBoxButton.OK);
            }
        }
示例#11
0
        //Code for initialization, capture completed, image availability events; also setting the source for the viewfinder.
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            try
            {
                if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
                {
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);

                    cam.Initialized += new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);
                    //cam.CaptureCompleted += new EventHandler<CameraOperationCompletedEventArgs>(cam_CaptureCompleted);
                    cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);
                    cam.AutoFocusCompleted    += new EventHandler <CameraOperationCompletedEventArgs>(cam_AutoFocusCompleted);

                    viewfinderCanvas.Tap += new EventHandler <System.Windows.Input.GestureEventArgs>(focus_Tapped);

                    CameraButtons.ShutterKeyHalfPressed += OnButtonHalfPress;
                    CameraButtons.ShutterKeyPressed     += OnButtonFullPress;
                    CameraButtons.ShutterKeyReleased    += OnButtonRelease;

                    viewfinderBrush.SetSource(cam);
                }
            }
            catch (Exception ex) { LittleWatson.ReportException(ex); }
        }
示例#12
0
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            //this.Height = Application.Current.Host.Content.ActualHeight;
            //this.Width = Application.Current.Host.Content.ActualWidth;
            //LayoutRoot.Height = Application.Current.Host.Content.ActualHeight;
            //LayoutRoot.Width = Application.Current.Host.Content.ActualWidth;

            PageOrientation po = ((PhoneApplicationFrame)(Application.Current.RootVisual)).Orientation;

            var landscapeRotation = 90;

            if (po == PageOrientation.Landscape)
            {
                LayoutRoot.Width  = Application.Current.Host.Content.ActualHeight;
                LayoutRoot.Height = Application.Current.Host.Content.ActualWidth;
                viewFeed.Width    = Application.Current.Host.Content.ActualHeight;
                viewFeed.Height   = Application.Current.Host.Content.ActualWidth;

                // CompositeTransform.Rotation = _photoCamera.SensorRotationInDegrees - 90;
                landscapeRotation = 0;
            }
            else if (po == PageOrientation.LandscapeRight)
            {
                LayoutRoot.Width  = Application.Current.Host.Content.ActualHeight;
                LayoutRoot.Height = Application.Current.Host.Content.ActualWidth;
                viewFeed.Width    = Application.Current.Host.Content.ActualHeight;
                viewFeed.Height   = Application.Current.Host.Content.ActualWidth;

                //CompositeTransform.Rotation = PhotoCaptureDeviceProp.SensorRotationInDegrees + 90;
                landscapeRotation = 180;
            }
            else if (po == PageOrientation.PortraitUp)
            {
                LayoutRoot.Height = Application.Current.Host.Content.ActualHeight;
                LayoutRoot.Width  = Application.Current.Host.Content.ActualWidth;
                viewFeed.Height   = Application.Current.Host.Content.ActualHeight;
                viewFeed.Width    = Application.Current.Host.Content.ActualWidth;

                landscapeRotation = 90;
                //CompositeTransform.Rotation = PhotoCaptureDeviceProp.SensorRotationInDegrees;
            }
            else if (po == PageOrientation.PortraitDown)
            {
                LayoutRoot.Height = Application.Current.Host.Content.ActualHeight;
                LayoutRoot.Width  = Application.Current.Host.Content.ActualWidth;
                viewFeed.Height   = Application.Current.Host.Content.ActualHeight;
                viewFeed.Width    = Application.Current.Host.Content.ActualWidth;

                //CompositeTransform.Rotation = PhotoCaptureDeviceProp.SensorRotationInDegrees + 180;
                landscapeRotation = -90;
            }

            if (_photoCamera != null)
            {
                _videoBrush.RelativeTransform =
                    new CompositeTransform()
                {
                    CenterX = 0.5, CenterY = 0.5, Rotation = landscapeRotation
                };

                _videoBrush.Stretch = Stretch.Fill;
            }

            // Check to see if the camera is available on the phone.
            if (PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true)
            {
                _photoCamera = new PhotoCamera(CameraType.Primary);

                // Event is fired when the PhotoCamera object has been initialized.
                //_photoCamera.Initialized += PhotoCameraOnInitialized;

                _videoBrush = new VideoBrush();
                _videoBrush.RelativeTransform = new CompositeTransform()
                {
                    CenterX = 0.5, CenterY = 0.5, Rotation = landscapeRotation
                };
                _videoBrush.Stretch = Stretch.Fill;

                _videoBrush.SetSource(_photoCamera);
                viewFeed.Fill = _videoBrush;
            }
            else
            {
                // The camera is not supported on the phone.
                MessageBox.Show("A Camera is not available on this phone.");
            }
        }
示例#13
0
        //Code for initialization, capture completed, image availability events; also setting the source for the viewfinder.
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            string msg = "";

            if (NavigationContext.QueryString.TryGetValue("msg", out msg))
            {
                patientid = msg;
            }

            // Check to see if the camera is available on the device.
            if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true) || (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) == true))
            {
                // Initialize the camera, when available.
                if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing))
                {
                    // Otherwise, use standard camera on back of device.
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.Primary);
                }
                else
                {
                    // Use front-facing camera if available.
                    cam = new Microsoft.Devices.PhotoCamera(CameraType.FrontFacing);
                }

                // Event is fired when the PhotoCamera object has been initialized.
                cam.Initialized += new EventHandler <Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);

                // Event is fired when the capture sequence is complete.
                cam.CaptureCompleted += new EventHandler <CameraOperationCompletedEventArgs>(cam_CaptureCompleted);

                // Event is fired when the capture sequence is complete and an image is available.
                cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);

                // Event is fired when the capture sequence is complete and a thumbnail image is available.
                cam.CaptureThumbnailAvailable += new EventHandler <ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);

                // The event is fired when auto-focus is complete.
                cam.AutoFocusCompleted += new EventHandler <CameraOperationCompletedEventArgs>(cam_AutoFocusCompleted);

                // The event is fired when the viewfinder is tapped (for focus).
                viewfinderCanvas.Tap += new EventHandler <GestureEventArgs>(focus_Tapped);

                // The event is fired when the shutter button receives a half press.
                CameraButtons.ShutterKeyHalfPressed += OnButtonHalfPress;

                // The event is fired when the shutter button receives a full press.
                CameraButtons.ShutterKeyPressed += OnButtonFullPress;

                // The event is fired when the shutter button is released.
                CameraButtons.ShutterKeyReleased += OnButtonRelease;

                //Set the VideoBrush source to the camera.
                viewfinderBrush.SetSource(cam);

                viewfinderCanvas.Visibility = Visibility.Visible;
                imageCanvas.Visibility      = Visibility.Collapsed;
                ShutterButton.Visibility    = Visibility.Visible;
                ShutterButton.IsEnabled     = true;
                ConfirmButton.Visibility    = Visibility.Collapsed;
                ConfirmButton.IsEnabled     = false;
            }
            else
            {
                // The camera is not supported on the device.
                this.Dispatcher.BeginInvoke(delegate()
                {
                    // Write message.
                    txtDebug.Text = "A Camera is not available on this device.";
                });

                // Disable UI.
                ShutterButton.IsEnabled = false;
                FlashButton.IsEnabled   = false;
                AFButton.IsEnabled      = false;
                ResButton.IsEnabled     = false;
            }
        }
示例#14
0
 /// <summary>
 /// Determines whether a particular camera type is supported on the device.
 /// </summary>
 /// <param name="type">The type.</param>
 /// <returns>
 ///     <c>true</c> if the specified camera type is supported; otherwise, <c>false</c>.
 /// </returns>
 public override bool IsCameraTypeSupported(CameraType type)
 {
     return(PhotoCamera.IsCameraTypeSupported(Enum <Microsoft.Devices.CameraType> .ConvertFromOtherEnumValue(type)));
 }
示例#15
0
        /**
         * Initializing the ioctls.
         */
        public void Init(Ioctls ioctls, Core core, Runtime runtime)
        {
            mCamera     = new PhotoCamera(mCameraType);
            mVideoBrush = new VideoBrush();

            runtime.RegisterCleaner(delegate()
            {
                if (null != mCamera)
                {
                    mCamera.Dispose();
                    mCamera = null;
                }
            });

            mRuntime = runtime;

            PhoneApplicationPage currentPage = (((PhoneApplicationFrame)Application.Current.RootVisual).Content as PhoneApplicationPage);

            // set the initial camera orientation in respect to the current page orientation
            SetInitialCameraOrientation(currentPage);
            // handle current page orientation and adjust the camera orientation accordingly
            HandleDeviceOrientation(currentPage);

            /**
             * Stores an output format in fmm parameter.
             * @param _index int the index of the required format.
             * @param _fmt int the momory address at which to write the output format dimensions.
             *
             * Note: the _index should be greater than 0 and smaller than the number of camera formats.
             */
            ioctls.maCameraFormat = delegate(int _index, int _fmt)
            {
                System.Windows.Size dim;
                if (GetCameraFormat(_index, out dim) == false)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_FAILED);
                }

                core.GetDataMemory().WriteInt32(_fmt + MoSync.Struct.MA_CAMERA_FORMAT.width,
                                                (int)dim.Width);
                core.GetDataMemory().WriteInt32(_fmt + MoSync.Struct.MA_CAMERA_FORMAT.height,
                                                (int)dim.Height);

                return(MoSync.Constants.MA_CAMERA_RES_OK);
            };

            /**
             * Returns the number of different output formats supported by the current device's camera.
             * \< 0 if there is no camera support.
             * 0 if there is camera support, but the format is unknown.
             */
            ioctls.maCameraFormatNumber = delegate()
            {
                // if the camera is not initialized, we cannot access any of its properties
                if (!isCameraInitialized)
                {
                    // because the cammera is supported but not initialized, we return 0
                    return(0);
                }

                IEnumerable <System.Windows.Size> res = mCamera.AvailableResolutions;
                if (res == null)
                {
                    return(0);
                }
                IEnumerator <System.Windows.Size> resolutions = res.GetEnumerator();
                resolutions.MoveNext();
                int number = 0;
                while (resolutions.Current != null)
                {
                    number++;
                    resolutions.MoveNext();
                    if (resolutions.Current == new System.Windows.Size(0, 0))
                    {
                        break;
                    }
                }
                return(number);
            };

            /**
             * Starts the viewfinder and the camera
             */
            ioctls.maCameraStart = delegate()
            {
                if (isCameraSnapshotInProgress)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_SNAPSHOT_IN_PROGRESS);
                }

                InitCamera();

                MoSync.Util.RunActionOnMainThreadSync(() =>
                {
                    mCameraPrev.StartViewFinder();
                });

                return(0);
            };

            /**
             * stops the view finder and the camera.
             */
            ioctls.maCameraStop = delegate()
            {
                if (isCameraSnapshotInProgress)
                {
                    // We need to post snapshot failed if the camera was stopped during snapshot operation
                    postSnapshotEvent(snapshotPlaceHolder, mCamera.Resolution,
                                      MoSync.Constants.MA_IMAGE_REPRESENTATION_UNKNOWN, MoSync.Constants.MA_CAMERA_RES_FAILED);
                    isCameraSnapshotInProgress = false;
                }

                MoSync.Util.RunActionOnMainThreadSync(() =>
                {
                    mCameraPrev.StopViewFinder();
                });

                return(0);
            };

            /**
             * Adds a previewWidget to the camera controller in devices that support native UI.
             */
            ioctls.maCameraSetPreview = delegate(int _widgetHandle)
            {
                // if the camera is not initialized, we need to initialize it before
                // setting the preview
                if (!isCameraInitialized)
                {
                    InitCamera();
                }

                IWidget w = runtime.GetModule <NativeUIModule>().GetWidget(_widgetHandle);
                if (w.GetType() != typeof(MoSync.NativeUI.CameraPreview))
                {
                    return(MoSync.Constants.MA_CAMERA_RES_FAILED);
                }
                mCameraPrev = (NativeUI.CameraPreview)w;
                mCameraPrev.SetViewFinderContent(mVideoBrush);

                return(MoSync.Constants.MA_CAMERA_RES_OK);
            };

            /**
             * Returns the number of available Camera on the device.
             */
            ioctls.maCameraNumber = delegate()
            {
                if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) && PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
                {
                    return(2);
                }
                else if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) || PhotoCamera.IsCameraTypeSupported(CameraType.Primary))
                {
                    return(1);
                }
                return(0);
            };

            /**
             * Captures an image and stores it as a new data object in the
             * supplied placeholder.
             * @param _formatIndex int the required format.
             * @param _placeHolder int the placeholder used for storing the image.
             */
            ioctls.maCameraSnapshot = delegate(int _formatIndex, int _placeHolder)
            {
                if (isCameraSnapshotInProgress)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_SNAPSHOT_IN_PROGRESS);
                }

                // If MA_CAMERA_SNAPSHOT_MAX_SIZE is sent via _formatIndex then we
                // need to select the biggest available snapshot size/resolution.
                if (MoSync.Constants.MA_CAMERA_SNAPSHOT_MAX_SIZE == _formatIndex)
                {
                    _formatIndex = (int)ioctls.maCameraFormatNumber() - 1;
                }
                AutoResetEvent are = new AutoResetEvent(false);

                System.Windows.Size dim;
                if (GetCameraFormat(_formatIndex, out dim) == false)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_FAILED);
                }

                mCamera.Resolution = dim;

                if (mCameraSnapshotDelegate != null)
                {
                    mCamera.CaptureImageAvailable -= mCameraSnapshotDelegate;
                }
                mCameraSnapshotDelegate = delegate(object o, ContentReadyEventArgs args)
                {
                    MoSync.Util.RunActionOnMainThreadSync(() =>
                    {
                        Resource res = runtime.GetResource(MoSync.Constants.RT_PLACEHOLDER, _placeHolder);

                        Stream data = null;
                        try
                        {
                            // as the camera always takes a snapshot in landscape left orientation,
                            // we need to rotate the resulting image 90 degrees for a current PortraitUp orientation
                            // and 180 degrees for a current LandscapeRight orientation
                            int rotateAngle = 0;
                            if (currentPage.Orientation == PageOrientation.PortraitUp)
                            {
                                rotateAngle = 90;
                            }
                            else if (currentPage.Orientation == PageOrientation.LandscapeRight)
                            {
                                rotateAngle = 180;
                            }
                            // if the current page is in a LandscapeLeft orientation, the orientation angle will be 0
                            data = RotateImage(args.ImageStream, rotateAngle);
                        }
                        catch
                        {
                            // the orientation angle was not a multiple of 90 - we keep the original image
                            data = args.ImageStream;
                        }
                        MemoryStream dataMem = new MemoryStream((int)data.Length);
                        MoSync.Util.CopySeekableStreams(data, 0, dataMem, 0, (int)data.Length);
                        res.SetInternalObject(dataMem);
                    });
                    are.Set();
                };

                mCamera.CaptureImageAvailable += mCameraSnapshotDelegate;

                mCamera.CaptureImage();

                are.WaitOne();
                return(MoSync.Constants.MA_CAMERA_RES_OK);
            };

            /**
             * Captures an image and stores it as a new data object in new
             * placeholder that is sent via #EVENT_TYPE_CAMERA_SNAPSHOT event.
             * @param _placeHolder int the placeholder used for storing the image.
             * @param _sizeIndex int the required size index.
             */
            ioctls.maCameraSnapshotAsync = delegate(int _placeHolder, int _sizeIndex)
            {
                if (isCameraSnapshotInProgress)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_SNAPSHOT_IN_PROGRESS);
                }

                // If MA_CAMERA_SNAPSHOT_MAX_SIZE is sent via _sizeIndex then we
                // need to select the biggest available snapshot size/resolution.
                if (MoSync.Constants.MA_CAMERA_SNAPSHOT_MAX_SIZE == _sizeIndex)
                {
                    _sizeIndex = (int)ioctls.maCameraFormatNumber() - 1;
                }

                System.Windows.Size dim;
                if (GetCameraFormat(_sizeIndex, out dim) == false)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_FAILED);
                }

                mCamera.Resolution = dim;

                if (mCameraSnapshotDelegate != null)
                {
                    mCamera.CaptureImageAvailable -= mCameraSnapshotDelegate;
                }

                mCameraSnapshotDelegate = delegate(object o, ContentReadyEventArgs args)
                {
                    MoSync.Util.RunActionOnMainThreadSync(() =>
                    {
                        // If the camera was stopped and this delegate was still called then we do nothing here
                        // because in maCameraStop we already send the snapshot failed event.
                        if (!isCameraSnapshotInProgress)
                        {
                            return;
                        }

                        Stream data = null;
                        try
                        {
                            // as the camera always takes a snapshot in landscape left orientation,
                            // we need to rotate the resulting image 90 degrees for a current PortraitUp orientation
                            // and 180 degrees for a current LandscapeRight orientation
                            int rotateAngle = 0;

                            if (currentPage.Orientation == PageOrientation.PortraitUp)
                            {
                                // This is for the front camera.
                                if (mCamera.CameraType != CameraType.Primary)
                                {
                                    rotateAngle = 270;
                                }
                                else
                                {
                                    rotateAngle = 90;
                                }
                            }
                            else if (currentPage.Orientation == PageOrientation.LandscapeRight)
                            {
                                rotateAngle = 180;
                            }
                            // if the current page is in a LandscapeLeft orientation, the orientation angle will be 0
                            data = RotateImage(args.ImageStream, rotateAngle);
                        }
                        catch
                        {
                            // the orientation angle was not a multiple of 90 - we keep the original image
                            data = args.ImageStream;
                        }

                        Resource res         = runtime.GetResource(MoSync.Constants.RT_PLACEHOLDER, _placeHolder);
                        MemoryStream dataMem = new MemoryStream((int)data.Length);
                        MoSync.Util.CopySeekableStreams(data, 0, dataMem, 0, (int)data.Length);
                        res.SetInternalObject(dataMem);


                        postSnapshotEvent(_placeHolder, mCamera.Resolution,
                                          MoSync.Constants.MA_IMAGE_REPRESENTATION_RAW, MoSync.Constants.MA_CAMERA_RES_OK);


                        isCameraSnapshotInProgress = false;
                    });
                };

                mCamera.CaptureImageAvailable += mCameraSnapshotDelegate;
                mCamera.CaptureImage();
                snapshotPlaceHolder        = _placeHolder;
                isCameraSnapshotInProgress = true;

                return(MoSync.Constants.MA_CAMERA_RES_OK);
            };

            /**
             * Sets the property represented by the string situated at the
             * _property address with the value situated at the _value address.
             * @param _property int the property name address
             * @param _value int the value address
             *
             * Note: the fallowing properties are not available on windows phone
             *      MA_CAMERA_FOCUS_MODE, MA_CAMERA_IMAGE_FORMAT, MA_CAMERA_ZOOM,
             *      MA_CAMERA_MAX_ZOOM.
             */
            ioctls.maCameraSetProperty = delegate(int _property, int _value)
            {
                // if the camera is not initialized, we cannot access any of its properties
                if (!isCameraInitialized)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }

                String property = core.GetDataMemory().ReadStringAtAddress(_property);
                String value    = core.GetDataMemory().ReadStringAtAddress(_value);

                if (property.Equals(MoSync.Constants.MA_CAMERA_FLASH_MODE))
                {
                    if (value.Equals(MoSync.Constants.MA_CAMERA_FLASH_ON) && mCamera.IsFlashModeSupported(FlashMode.On))
                    {
                        mCamera.FlashMode = FlashMode.On;
                        mFlashMode        = FlashMode.On;
                    }
                    else if (value.Equals(MoSync.Constants.MA_CAMERA_FLASH_OFF) && mCamera.IsFlashModeSupported(FlashMode.Off))
                    {
                        mCamera.FlashMode = FlashMode.Off;
                        mFlashMode        = FlashMode.Off;
                    }
                    else if (value.Equals(MoSync.Constants.MA_CAMERA_FLASH_AUTO) && mCamera.IsFlashModeSupported(FlashMode.Auto))
                    {
                        mCamera.FlashMode = FlashMode.Auto;
                        mFlashMode        = FlashMode.Auto;
                    }
                    else
                    {
                        return(MoSync.Constants.MA_CAMERA_RES_INVALID_PROPERTY_VALUE);
                    }
                    return(MoSync.Constants.MA_CAMERA_RES_OK);
                }
                else if (property.Equals(MoSync.Constants.MA_CAMERA_FOCUS_MODE))
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }
                else if (property.Equals(MoSync.Constants.MA_CAMERA_IMAGE_FORMAT))
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }
                else if (property.Equals(MoSync.Constants.MA_CAMERA_ZOOM))
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }
                else if (property.Equals(MoSync.Constants.MA_CAMERA_MAX_ZOOM))
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }
                else
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }
            };

            /**
             * Selects a camera from the avalable ones;
             * in this eigther the back or the front camera is
             * chosen
             */
            ioctls.maCameraSelect = delegate(int _camera)
            {
                // if the camera is not initialized, we cannot access any of its properties
                if (!isCameraInitialized)
                {
                    return(MoSync.Constants.MA_CAMERA_RES_FAILED);
                }

                if (MoSync.Constants.MA_CAMERA_CONST_BACK_CAMERA == _camera)
                {
                    if (mCamera.CameraType != CameraType.Primary)
                    {
                        mCameraType = CameraType.Primary;
                        InitCamera();

                        MoSync.Util.RunActionOnMainThreadSync(() =>
                        {
                            SetInitialCameraOrientation(currentPage);
                        }
                                                              );
                    }
                }
                else if (MoSync.Constants.MA_CAMERA_CONST_FRONT_CAMERA == _camera)
                {
                    if (mCamera.CameraType != CameraType.FrontFacing)
                    {
                        mCameraType = CameraType.FrontFacing;
                        InitCamera();

                        MoSync.Util.RunActionOnMainThreadSync(() =>
                        {
                            SetInitialCameraOrientation(currentPage);
                        }
                                                              );
                    }
                }
                else
                {
                    return(MoSync.Constants.MA_CAMERA_RES_FAILED);
                }

                return(MoSync.Constants.MA_CAMERA_RES_OK);
            };

            /**
             * Retrieves the specified property value in the given buffer.
             * @param _property int the address for the property string
             * @param _value int the address for the property value string (the buffer)
             * @param _bufSize int the buffer size
             */
            ioctls.maCameraGetProperty = delegate(int _property, int _value, int _bufSize)
            {
                String property = core.GetDataMemory().ReadStringAtAddress(_property);

                if (property.Equals(MoSync.Constants.MA_CAMERA_MAX_ZOOM))
                {
                    core.GetDataMemory().WriteStringAtAddress(
                        _value,
                        "0",
                        _bufSize);
                }
                else if (property.Equals(MoSync.Constants.MA_CAMERA_ZOOM_SUPPORTED))
                {
                    core.GetDataMemory().WriteStringAtAddress(
                        _value,
                        "false",
                        _bufSize);
                }
                else if (property.Equals(MoSync.Constants.MA_CAMERA_FLASH_SUPPORTED))
                {
                    /*
                     * Since we cannot see if flash is supported because the camera may be not
                     * fully initialized when this is called, we assume that each windows phone
                     * has flash support for primary camera but not for the from camera.
                     */
                    String result = "true";
                    if (mCamera.CameraType != CameraType.Primary)
                    {
                        result = "false";
                    }

                    core.GetDataMemory().WriteStringAtAddress(
                        _value,
                        result,
                        _bufSize);
                }
                else
                {
                    return(MoSync.Constants.MA_CAMERA_RES_PROPERTY_NOTSUPPORTED);
                }
                return(0);
            };

            ioctls.maCameraRecord = delegate(int _stopStartFlag)
            {
                return(MoSync.Constants.MA_CAMERA_RES_FAILED);
            };
        }
示例#16
0
        //public int BatteryPercentage { get; private set; }
        //public BatteryState BatteryState { get; private set; }

        public DeviceInfo()
        {
#if __IOS__
            this.Manufacturer    = "Apple";
            this.Model           = UIDevice.CurrentDevice.Model;
            this.OperatingSystem = String.Format("{0} {1}", UIDevice.CurrentDevice.SystemName, UIDevice.CurrentDevice.SystemVersion);
            this.DeviceId        = UIDevice.CurrentDevice.IdentifierForVendor.AsString();

            var screen = UIScreen.MainScreen.Bounds;
            this.ScreenWidth            = (int)screen.Width;
            this.ScreenHeight           = (int)screen.Height;
            this.IsFrontCameraAvailable = UIImagePickerController.IsCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front);
            this.IsRearCameraAvailable  = UIImagePickerController.IsCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear);
            this.IsSimulator            = (Runtime.Arch == Arch.SIMULATOR);

            //this.BatteryPercentage = UIDevice.CurrentDevice.BatteryLevel;
#elif __ANDROID__
            this.Manufacturer    = B.Manufacturer;
            this.Model           = B.Model;
            this.OperatingSystem = String.Format("{0} - SDK: {1}", B.VERSION.Release, B.VERSION.SdkInt);
            this.IsSimulator     = B.Product.Equals("google_sdk");

            var d = Resources.System.DisplayMetrics;
            this.ScreenWidth  = (int)(d.WidthPixels / d.Density);
            this.ScreenHeight = (int)(d.HeightPixels / d.Density);

            var pm = Forms.Context.ApplicationContext.PackageManager;

            this.IsRearCameraAvailable  = pm.HasSystemFeature(PackageManager.FeatureCamera);
            this.IsFrontCameraAvailable = pm.HasSystemFeature(PackageManager.FeatureCameraFront);

            var tel = (TelephonyManager)Forms.Context.ApplicationContext.GetSystemService(Context.TelephonyService);
            this.DeviceId = tel.DeviceId;

            //var filter = new IntentFilter(Intent.ActionBatteryChanged);
            //var battery = RegisterReceiver(null, filter);
            //var level = battery.GetIntExtra(BatteryManager.ExtraLevel, -1);
            //var scale = battery.GetIntExtra(BatteryManager.ExtraScale, -1);
            //this.BatteryPercentage = Convert.ToInt32(Math.Floor(level * 100D / scale));
#elif WINDOWS_PHONE
            this.Manufacturer    = DeviceStatus.DeviceManufacturer;
            this.Model           = DeviceStatus.DeviceName;
            this.OperatingSystem = Env.OSVersion.ToString();

            var deviceIdBytes = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
            this.DeviceId = Convert.ToBase64String(deviceIdBytes);

            this.IsRearCameraAvailable  = PhotoCamera.IsCameraTypeSupported(CameraType.Primary);
            this.IsFrontCameraAvailable = PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing);
            this.IsSimulator            = (DevEnv.DeviceType == DeviceType.Emulator);

            switch (GetScaleFactor())
            {
            case 150:
                this.ScreenWidth  = 720;
                this.ScreenHeight = 1280;
                break;

            case 160:
                this.ScreenWidth  = 768;
                this.ScreenHeight = 1280;
                break;

            case 100:
            default:
                this.ScreenWidth  = 480;
                this.ScreenHeight = 800;
                break;
            }
#endif
        }
示例#17
0
        public CameraViewModel()
        {
            SetUpCameraCommand = new RelayCommand <NavigationEventArgs>((e) =>
            {
                // Check to see if the camera is available on the phone.
                if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary) == true) ||
                    (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing) == true))
                {
                    // Initialize the camera, when available.
                    if (PhotoCamera.IsCameraTypeSupported(CameraType.FrontFacing))
                    {
                        // Use front-facing camera if available.
                        cam = new PhotoCamera(CameraType.FrontFacing);
                    }
                    else
                    {
                        // Otherwise, use standard camera on back of phone.
                        cam = new PhotoCamera(CameraType.Primary);
                    }

                    //// Event is fired when the PhotoCamera object has been initialized.
                    //cam.Initialized += new EventHandler<Microsoft.Devices.CameraOperationCompletedEventArgs>(cam_Initialized);

                    // Event is fired when the capture sequence is complete.
                    //cam.CaptureCompleted += new EventHandler<CameraOperationCompletedEventArgs>(cam_CaptureCompleted);

                    //// Event is fired when the capture sequence is complete and an image is available.
                    cam.CaptureImageAvailable += new EventHandler <Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable);

                    //// Event is fired when the capture sequence is complete and a thumbnail image is available.
                    //cam.CaptureThumbnailAvailable += new EventHandler<ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);

                    CameraBackground = new VideoBrush();
                    CameraBackground.SetSource(cam);
                    CameraBackground.Stretch = Stretch.Uniform;
                }
                else
                {
                    // TODO The camera is not supported on the phone, do something smart
                }
            });

            CleanUpCameraCommand = new RelayCommand <NavigatingCancelEventArgs>((e) =>
            {
                if (cam != null)
                {
                    // Dispose camera to minimize power consumption and to expedite shutdown.
                    cam.Dispose();

                    // Release memory, ensure garbage collection.
                    //cam.Initialized -= cam_Initialized;
                    //cam.CaptureCompleted -= cam_CaptureCompleted;
                    cam.CaptureImageAvailable -= cam_CaptureImageAvailable;
                    //cam.CaptureThumbnailAvailable -= cam_CaptureThumbnailAvailable;
                }
            });


            TakePhotoCommand = new RelayCommand(() =>
            {
                if (cam != null)
                {
                    try
                    {
                        // Start image capture.
                        cam.CaptureImage();
                    }
                    catch
                    {
                        // TODO
                    }
                }
            });
        }