示例#1
0
        private void InitCamera()
        {
            //bool success = false;
            //success = OpenCamera(0); //Try the face camera

            //if (success == false)
            //{
            //    success = OpenCamera(1); //Try the rear camera
            //}
            //variable to get the number of cameras in the device
            int cameraCount = Android.Hardware.Camera.NumberOfCameras;

            Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
            for (int camIdx = 0; camIdx < cameraCount; camIdx++)
            {
                Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
                {
                    camera = Android.Hardware.Camera.Open(camIdx);

                    cameraId = camIdx;
                    camera.SetDisplayOrientation(90);
                }
            }
            //var video = Activity.FindViewById<VideoView>(Resource.Id.videoView1);
            //camera.SetPreviewDisplay(video.Holder);
            camera.AddCallbackBuffer(ss);
            camera.SetPreviewCallbackWithBuffer(new mPreviewCallback());
            camera.StartPreview();
        }
示例#2
0
        public static void SetCameraDisplayOrientation(Activity activity, int cameraId, Android.Hardware.Camera camera)
        {
            Android.Hardware.Camera.CameraInfo info = new Android.Hardware.Camera.CameraInfo();
            Android.Hardware.Camera.GetCameraInfo(cameraId, info);
            //IWindowManager windowManager = activity.GetSystemService(activity.WindowManager).JavaCast<IWindowManager>();
            SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;
            int degrees = 0;

            switch (rotation)
            {
            case SurfaceOrientation.Rotation0: degrees = 0; break;

            case SurfaceOrientation.Rotation90: degrees = 90; break;

            case SurfaceOrientation.Rotation180: degrees = 180; break;

            case SurfaceOrientation.Rotation270: degrees = 270; break;
            }

            int result;

            if (info.Facing == Android.Hardware.Camera.CameraInfo.CameraFacingFront)
            {
                result = (info.Orientation + degrees) % 360;
                result = (360 - result) % 360;      // compensate the mirror
            }
            else
            {      // back-facing
                result = (info.Orientation - degrees + 360) % 360;
            }
            camera.SetDisplayOrientation(result);
        }
示例#3
0
        private void UpdateCameraAspect()
        {
            try
            {
                Android.Hardware.Camera.Parameters camParams = camera.GetParameters();
                Android.Hardware.Camera.CameraInfo info      = new Android.Hardware.Camera.CameraInfo();
                Android.Hardware.Camera.GetCameraInfo((int)Android.Hardware.CameraFacing.Back, info);

                Android.Hardware.Camera.Size size = GetOptimalPreviewSize(camParams.SupportedPreviewSizes, width, height);

                camParams.SetPreviewSize(size.Width, size.Height);

                int rotation = (info.Orientation + 360) % 360;

                camParams.SetRotation(rotation);

                if (camParams.SupportedFocusModes.Contains(Android.Hardware.Camera.Parameters.FocusModeContinuousPicture))
                {
                    camParams.FocusMode = Android.Hardware.Camera.Parameters.FocusModeContinuousPicture;
                }

                camera.SetParameters(camParams);
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine(e.Message);
            }
        }
示例#4
0
        // Returns orientation of camera
        private int getCameraOrientation()
        {
            Display display     = WindowManager.DefaultDisplay;
            int     orientation = 0;

            switch (display.Rotation)
            {
            case SurfaceOrientation.Rotation0:
                orientation = 0;
                break;

            case SurfaceOrientation.Rotation90:
                orientation = 90;
                break;

            case SurfaceOrientation.Rotation180:
                orientation = 180;
                break;

            case SurfaceOrientation.Rotation270:
                orientation = 270;
                break;
            }
            for (int i = 0; i < Android.Hardware.Camera.NumberOfCameras; i++)
            {
                Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                Android.Hardware.Camera.GetCameraInfo(i, cameraInfo);
                if (cameraInfo.Facing == Android.Hardware.CameraFacing.Back)
                {
                    return((cameraInfo.Orientation - orientation + 360) % 360);
                }
            }
            // If Camera.open() succeed, this point of code never reached
            return(-1);
        }
示例#5
0
        private void SetCameraDisplayOrientation()
        {
            if (_camera == null)
            {
                return;
            }

            // определ¤ем насколько повернут экран от нормального положени¤
            SurfaceOrientation rotation = _activity.WindowManager.DefaultDisplay.Rotation;
            int degrees = 0;

            switch (rotation)
            {
            case SurfaceOrientation.Rotation0:
                degrees = 0;
                break;

            case SurfaceOrientation.Rotation90:
                degrees = 90;
                break;

            case SurfaceOrientation.Rotation180:
                degrees = 180;
                break;

            case SurfaceOrientation.Rotation270:
                degrees = 270;
                break;
            }

            int result = 0;

            // получаем инфо по камере cameraId
            Android.Hardware.Camera.CameraInfo info = new Android.Hardware.Camera.CameraInfo();
            Android.Hardware.Camera.GetCameraInfo(0, info);

            // задн¤¤ камера
            if (info.Facing == Android.Hardware.CameraFacing.Back)
            {
                result = ((360 - degrees) + info.Orientation);
            }
            else if (info.Facing == Android.Hardware.CameraFacing.Front)
            {
                // передн¤¤ камера
                result  = ((360 - degrees) - info.Orientation);
                result += 360;
            }
            result = result % 360;
            try
            {
                _camera.SetDisplayOrientation(result);
            }
            catch (Java.Lang.Exception e)
            {
                e.PrintStackTrace();
            }
        }
示例#6
0
        public void SurfaceCreated(ISurfaceHolder holder)
        {
            CheckPermissions();

            try
            {
                var version = Android.OS.Build.VERSION.SdkInt;

                if (version >= BuildVersionCodes.Gingerbread)
                {
                    var numCameras = Android.Hardware.Camera.NumberOfCameras;
                    var camInfo    = new Android.Hardware.Camera.CameraInfo();
                    var found      = false;

                    for (int i = 0; i < numCameras; i++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(i, camInfo);
                        if (camInfo.Facing == CameraFacing.Back)
                        {
                            camera = Android.Hardware.Camera.Open(i);
                            found  = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        Android.Util.Log.Debug("ZXing.Net.Mobile", "Finding rear camera failed, opening camera 0...");
                        camera = Android.Hardware.Camera.Open(0);
                    }
                }
                else
                {
                    camera = Android.Hardware.Camera.Open();
                }
                if (camera == null)
                {
                    Android.Util.Log.Debug("ZXing.Net.Mobile", "Camera is null :(");
                }


                //camera = Android.Hardware.Camera.Open ();
                camera.SetPreviewDisplay(holder);
                camera.SetPreviewCallback(this);
            } catch (Exception ex) {
                ShutdownCamera();

                // TODO: log or otherwise handle this exception
                Console.WriteLine("Setup Error: " + ex);
                //throw;
            }
        }
	    public void SurfaceCreated (ISurfaceHolder holder)
		{
			try 
			{
				var version = Android.OS.Build.VERSION.SdkInt;

				if (version >= BuildVersionCodes.Gingerbread)
				{
					var numCameras = Android.Hardware.Camera.NumberOfCameras;
					var camInfo = new Android.Hardware.Camera.CameraInfo();
					var found = false;
					
					for (int i = 0; i < numCameras; i++)
					{
						Android.Hardware.Camera.GetCameraInfo(i, camInfo);
						if (camInfo.Facing == CameraFacing.Back)
						{
							camera = Android.Hardware.Camera.Open(i);
							found = true;
							break;
						}
					}
					
					if (!found)
					{
						Android.Util.Log.Debug("ZXing.Net.Mobile", "Finding rear camera failed, opening camera 0...");
						camera = Android.Hardware.Camera.Open(0);
					}
				}
				else
				{
					camera = Android.Hardware.Camera.Open();
				}
				if (camera == null)
					Android.Util.Log.Debug("ZXing.Net.Mobile", "Camera is null :(");
				
				
				//camera = Android.Hardware.Camera.Open ();
				camera.SetPreviewDisplay (holder);
				//camera.SetPreviewCallback (this);
				camera.SetOneShotPreviewCallback(this);

				
			} catch (Exception ex) {
				ShutdownCamera ();
				
				// TODO: log or otherwise handle this exception
				Console.WriteLine("Setup Error: " + ex);
				//throw;
			}
		}
示例#8
0
        public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)
        {
            {
                {
                    int cameraCount = Android.Hardware.Camera.NumberOfCameras;
                    int cameraId    = 0;
                    Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int camIdx = 0; camIdx < cameraCount; camIdx++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                        if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
                        {
                            camera = Android.Hardware.Camera.Open(camIdx);

                            cameraId = camIdx;
                            break;
                        }
                    }

                    if (camera == null)
                    {
                        camera = Android.Hardware.Camera.Open();
                    }
                }


                var parameters = camera.GetParameters();
                var aspect     = ((decimal)height) / ((decimal)width);

                // Find the preview aspect ratio that is closest to the surface aspect
                //var previewSize = parameters.SupportedPreviewSizes
                //                            .OrderBy(s => Math.Abs(s.Width / (decimal)s.Height - aspect))
                //                            .First();

                var previewSize = parameters.SupportedPreviewSizes[0];

                System.Diagnostics.Debug.WriteLine($"Preview sizes: {parameters.SupportedPreviewSizes.Count}");

                mainLayout.LayoutParameters.Height = previewSize.Height;
                mainLayout.LayoutParameters.Width  = previewSize.Width;

                parameters.SetPreviewSize(previewSize.Width, previewSize.Height);
                camera.SetParameters(parameters);

                camera.SetPreviewTexture(surface);
                StartCamera();
            }
        }
示例#9
0
        private int getCameraDisplayOrientation(int degrees, int cameraId, Android.Hardware.Camera camera)
        {
            Android.Hardware.Camera.CameraInfo info = new Android.Hardware.Camera.CameraInfo();
            Android.Hardware.Camera.GetCameraInfo(cameraId, info);
            int rotation = 0;

            if (info.Facing == Android.Hardware.Camera.CameraInfo.CameraFacingFront)
            {
                rotation = (info.Orientation + degrees) % 360;
                rotation = (360 - rotation) % 360; // compensate the mirror
            }
            else
            { // back-facing
                rotation = (info.Orientation - degrees + 360) % 360;
            }
            return(rotation);
        }
示例#10
0
        public void SurfaceCreated(ISurfaceHolder holder)
        {
            try
            {
#if __ANDROID_9__
                var numCameras = Android.Hardware.Camera.NumberOfCameras;
                var camInfo    = new Android.Hardware.Camera.CameraInfo();
                var found      = false;

                for (int i = 0; i < numCameras; i++)
                {
                    Android.Hardware.Camera.GetCameraInfo(i, camInfo);
                    if (camInfo.Facing == CameraFacing.Back)
                    {
                        camera = Android.Hardware.Camera.Open(i);
                        found  = true;
                        break;
                    }
                }

                if (!found)
                {
                    Android.Util.Log.Debug("ZXing.Net.Mobile", "Finding rear camera failed, opening camera 0...");
                    camera = Android.Hardware.Camera.Open(0);
                }
#else
                camera = Android.Hardware.Camera.Open();
#endif
                if (camera == null)
                {
                    Android.Util.Log.Debug("ZXing.Net.Mobile", "Camera is null :(");
                }

                //camera = Android.Hardware.Camera.Open ();
                camera.SetPreviewDisplay(holder);
                camera.SetPreviewCallback(this);
            }
            catch (Exception)
            {
                ShutdownCamera();

                // TODO: log or otherwise handle this exception

                //throw;
            }
        }
示例#11
0
        public void determineDisplayOrientation()
        {
            var cameraInfo = new Android.Hardware.Camera.CameraInfo();

            Android.Hardware.Camera.GetCameraInfo(0, cameraInfo);

            var rotation = _activity.WindowManager.DefaultDisplay.Rotation;
            var degrees  = 0;

            switch (rotation)
            {
            case SurfaceOrientation.Rotation0:
                degrees = 0;
                break;

            case SurfaceOrientation.Rotation180:
                degrees = 180;
                break;

            case SurfaceOrientation.Rotation270:
                degrees = 270;
                break;

            case SurfaceOrientation.Rotation90:
                degrees = 90;
                break;
            }

            int displayOrientation;

            if (cameraInfo.Facing == CameraFacing.Front)
            {
                displayOrientation = (cameraInfo.Orientation + degrees) % 360;
                displayOrientation = (360 - displayOrientation) % 360;
            }
            else
            {
                displayOrientation = (cameraInfo.Orientation - degrees + 360) % 360;
            }

            _displayOrientation = displayOrientation;
            _layoutOrientation  = degrees;

            _camera.SetDisplayOrientation(displayOrientation);
        }
        public void SetOrientation()
        {
            switch (windowManager.DefaultDisplay.Rotation)
            {
            case SurfaceOrientation.Rotation0:
                this.Orientation = 0;
                //camera?.SetDisplayOrientation(90);
                break;

            case SurfaceOrientation.Rotation90:
                this.Orientation = 90;
                //camera?.SetDisplayOrientation(0);
                break;

            case SurfaceOrientation.Rotation180:
                this.Orientation = 180;
                //camera?.SetDisplayOrientation(270);
                break;

            case SurfaceOrientation.Rotation270:
                this.Orientation = 270;
                //camera?.SetDisplayOrientation(180);
                break;
            }

            for (int i = 0; i < Android.Hardware.Camera.NumberOfCameras; i++)
            {
                Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                Android.Hardware.Camera.GetCameraInfo(i, cameraInfo);

                //https://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29
                if (cameraInfo.Facing == Android.Hardware.CameraFacing.Back)
                //if (cameraInfo.Facing == Android.Hardware.Camera.CameraInfo.CameraFacingBack)
                {
                    this.Orientation = (cameraInfo.Orientation - this.Orientation + 360) % 360;
                }
            }
        }
        public async void OnPictureTaken(byte[] data, Android.Hardware.Camera camera)
        {
            using (var bmp = await Android.Graphics.BitmapFactory.DecodeByteArrayAsync(data, 0, data.Length))
            {
                using (var resized = bmp.DefaultResize())
                {
                    var mat = new Android.Graphics.Matrix();

                    var info = new Android.Hardware.Camera.CameraInfo();
                    Android.Hardware.Camera.GetCameraInfo(currentCamera, info);

                    if (info.Facing == CameraFacing.Front)
                    {
                        mat.PostScale(-1, 1);
                    }

                    mat.PostRotate(90);
                    var correctBmp = Android.Graphics.Bitmap.CreateBitmap(resized, 0, 0, resized.Width, resized.Height, mat, true);
                    _captureComplete.SetResult(correctBmp);
                    _captureComplete = null;
                }
            }
        }
示例#14
0
        public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)
        {
            {
                {
                    int cameraCount = Android.Hardware.Camera.NumberOfCameras;
                    int cameraId    = 0;
                    Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int camIdx = 0; camIdx < cameraCount; camIdx++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                        if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
                        {
                            camera = Android.Hardware.Camera.Open(camIdx);

                            cameraId = camIdx;
                            break;
                        }
                    }

                    if (camera == null)
                    {
                        camera = Android.Hardware.Camera.Open();
                    }
                }


                var parameters = camera.GetParameters();
                var aspect     = ((decimal)height) / ((decimal)width);

                // Find the preview aspect ratio that is closest to the surface aspect
                //var previewSize = parameters.SupportedPreviewSizes
                //                            .OrderBy(s => Math.Abs(s.Width / (decimal)s.Height - aspect))
                //                            .First();

                var previewSize = parameters.SupportedPreviewSizes[2];
                //     mainLayout.LayoutParameters.Height = previewSize.Height;
                //     mainLayout.LayoutParameters.Width = previewSize.Width;

                parameters.SetPreviewSize(previewSize.Width, previewSize.Height);
                camera.SetParameters(parameters);
                camera.SetPreviewTexture(surface);
                StartCamera();


                //caemra page render
                Task.Run(() =>
                {
                    while (camera != null)
                    {
                        if (NetProcess.JpegStream.Count == 0)
                        {
                            continue;
                        }

                        MemoryStream ms;
                        if (NetProcess.JpegStream.TryDequeue(out ms) == true)
                        {
                            if (ms == null)
                            {
                                continue;
                            }

                            _context.Post(delegate
                            {
                                var bitmap = BitmapFactory.DecodeByteArray(ms?.ToArray(), 0, ms.ToArray().Length);

                                imageView.SetImageBitmap(bitmap);
                            }, null);
                        }
                        Thread.Sleep(100);
                    }
                });


                //caemra page render
                Task.Run(() =>
                {
                    audiomgr?.record();
                });


                Task.Run(() =>
                {
                    while (audiomgr != null)
                    {
                        MemoryStream ms;
                        if (NetProcess.AudioStream.TryDequeue(out ms) == true)
                        {
                            if (ms == null)
                            {
                                continue;
                            }

                            //      _context.Post(delegate
                            //       {
                            audiomgr?.play(ms.ToArray());

                            //    }, null);
                        }

                        Thread.Sleep(1);
                    }
                });
            }
        }
示例#15
0
        public void StartScanning(MobileBarcodeScanningOptions options, Action <Result> callback)
        {
            this.callback = callback;
            this.options  = options;

            lastPreviewAnalysis = DateTime.UtcNow.AddMilliseconds(options.InitialDelayBeforeAnalyzingFrames);
            isAnalyzing         = true;

            Console.WriteLine("StartScanning");

            CheckPermissions();

            var perf = PerformanceCounter.Start();

            GetExclusiveAccess();

            try
            {
                var version = Build.VERSION.SdkInt;

                if (version >= BuildVersionCodes.Gingerbread)
                {
                    Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Checking Number of cameras...");

                    var numCameras = Android.Hardware.Camera.NumberOfCameras;
                    var camInfo    = new Android.Hardware.Camera.CameraInfo();
                    var found      = false;
                    Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Found " + numCameras + " cameras...");

                    var whichCamera = CameraFacing.Back;

                    if (options.UseFrontCameraIfAvailable.HasValue && options.UseFrontCameraIfAvailable.Value)
                    {
                        whichCamera = CameraFacing.Front;
                    }

                    for (int i = 0; i < numCameras; i++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(i, camInfo);
                        if (camInfo.Facing == whichCamera)
                        {
                            Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Found " + whichCamera + " Camera, opening...");
                            camera = Android.Hardware.Camera.Open(i);
                            found  = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Finding " + whichCamera + " camera failed, opening camera 0...");
                        camera = Android.Hardware.Camera.Open(0);
                    }
                }
                else
                {
                    camera = Android.Hardware.Camera.Open();
                }

                if (camera == null)
                {
                    Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Camera is null :(");
                }

                camera.SetPreviewCallback(this);
            } catch (Exception ex) {
                ShutdownCamera();

                Console.WriteLine("Setup Error: " + ex);
            }

            PerformanceCounter.Stop(perf, "SurfaceCreated took {0}ms");
        }
示例#16
0
        private void openFrontFacingCamera()
        {
            int cameraCount = 0;
            var cameraInfo = new Android.Hardware.Camera.CameraInfo();
            cameraCount = Android.Hardware.Camera.NumberOfCameras;
            int result = 0;
            for (int camIdx = 0; camIdx < cameraCount; ++camIdx)
            {
                Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                var rotation = WindowManager.DefaultDisplay.Rotation;
                int degrees = 0;
                camID = camIdx;
                switch (rotation)
                {
                    case SurfaceOrientation.Rotation0:
                        degrees = 0;
                        break;
                    case SurfaceOrientation.Rotation90:
                        degrees = 90;
                        break;
                    case SurfaceOrientation.Rotation180:
                        degrees = 180;
                        break;
                    case SurfaceOrientation.Rotation270:
                        degrees = 270;
                        break;
                }

                if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
                {
                    result = (cameraInfo.Orientation + degrees) % 360;
                    result = (360 - result) % 360;
                    try
                    {
                        camera = Android.Hardware.Camera.Open(camIdx);
                    }
                    catch (Java.Lang.RuntimeException)
                    {
                        RunOnUiThread(() => GeneralUtils.Alert(context, Application.Context.Resources.GetString(Resource.String.commonError),
                            Application.Context.Resources.GetString(Resource.String.photoNoConnection)));
                    }
                }
                else
                    result = (cameraInfo.Orientation - degrees + 360) % 360;
            }
            if (camera != null)
                camera.SetDisplayOrientation(result);
        }
		public void SurfaceCreated (ISurfaceHolder holder)
		{
			try 
			{
#if __ANDROID_9__
				var numCameras = Android.Hardware.Camera.NumberOfCameras;
				var camInfo = new Android.Hardware.Camera.CameraInfo();
				var found = false;

				for (int i = 0; i < numCameras; i++)
				{
					Android.Hardware.Camera.GetCameraInfo(i, camInfo);
					if (camInfo.Facing == CameraFacing.Back)
					{
						camera = Android.Hardware.Camera.Open(i);
						found = true;
						break;
					}
				}

				if (!found)
				{
					Android.Util.Log.Debug("ZXing.Net.Mobile", "Finding rear camera failed, opening camera 0...");
					camera = Android.Hardware.Camera.Open(0);
				}
#else
				camera = Android.Hardware.Camera.Open();
#endif
				if (camera == null)
					Android.Util.Log.Debug("ZXing.Net.Mobile", "Camera is null :(");
				
				//camera = Android.Hardware.Camera.Open ();
				camera.SetPreviewDisplay (holder);
				camera.SetPreviewCallback (this);

			} catch (Exception) {
				ShutdownCamera ();

				// TODO: log or otherwise handle this exception

				//throw;
			}
		}
	    public void SurfaceCreated (ISurfaceHolder holder)
		{
			CheckPermissions ();

			var perf = PerformanceCounter.Start ();

			try 
			{
				var version = Android.OS.Build.VERSION.SdkInt;

				if (version >= BuildVersionCodes.Gingerbread)
				{
					Android.Util.Log.Debug ("ZXing.Net.Mobile", "Checking Number of cameras...");

					var numCameras = Android.Hardware.Camera.NumberOfCameras;
					var camInfo = new Android.Hardware.Camera.CameraInfo();
					var found = false;
					Android.Util.Log.Debug ("ZXing.Net.Mobile", "Found " + numCameras + " cameras...");

					var whichCamera = CameraFacing.Back;

					if (options.UseFrontCameraIfAvailable.HasValue && options.UseFrontCameraIfAvailable.Value)
						whichCamera = CameraFacing.Front;

					for (int i = 0; i < numCameras; i++)
					{
						Android.Hardware.Camera.GetCameraInfo(i, camInfo);
						if (camInfo.Facing == whichCamera)
						{
							Android.Util.Log.Debug ("ZXing.Net.Mobile", "Found " + whichCamera + " Camera, opening...");
							camera = Android.Hardware.Camera.Open(i);
							found = true;
							break;
						}
					}
					
					if (!found)
					{
						Android.Util.Log.Debug("ZXing.Net.Mobile", "Finding " + whichCamera + " camera failed, opening camera 0...");
						camera = Android.Hardware.Camera.Open(0);
					}
				}
				else
				{
					camera = Android.Hardware.Camera.Open();
				}
				if (camera == null)
					Android.Util.Log.Debug("ZXing.Net.Mobile", "Camera is null :(");
				
				
				//camera = Android.Hardware.Camera.Open ();
				camera.SetPreviewDisplay (holder);
				camera.SetPreviewCallback (this);
				
			} catch (Exception ex) {
				ShutdownCamera ();
				
				// TODO: log or otherwise handle this exception
				Console.WriteLine("Setup Error: " + ex);
				//throw;
			}

			PerformanceCounter.Stop (perf, "SurfaceCreated took {0}ms");
		}
示例#19
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            var metrics = new DisplayMetrics();
            WindowManager.DefaultDisplay.GetRealMetrics(metrics);

            ScreenX = metrics.WidthPixels;
            ScreenY = metrics.HeightPixels;

            number = 0;
            SetContentView(Resource.Layout.CameraTakePicScreen);
            isRunning = false;
            var header = FindViewById<TextView>(Resource.Id.txtFirstScreenHeader);
            var btns = FindViewById<ImageView>(Resource.Id.imgNewUserHeader);
            var relLayout = FindViewById<RelativeLayout>(Resource.Id.relativeLayout1);
            ImageHelper.setupTopPanel(btns, header, relLayout, header.Context);

            Header.headertext = Application.Context.Resources.GetString(Resource.String.photoTitle);
            Header.fontsize = 32f;
            ImageHelper.fontSizeInfo(header.Context);
            header.SetTextSize(Android.Util.ComplexUnitType.Dip, Header.fontsize);
            header.Text = Header.headertext;

            var surface = FindViewById<SurfaceView>(Resource.Id.surfaceCameraView);

            holder = surface.Holder;
            holder.AddCallback(this);
            context = surface.Context;

            var takePicture = FindViewById<ImageButton>(Resource.Id.btnCamera);
            takePicture.Tag = 1;
            var flipView = FindViewById<ImageButton>(Resource.Id.imgFlipView);
            flipView.Tag = 2;
            var returnBack = FindViewById<ImageButton>(Resource.Id.imgBack);
            returnBack.Tag = 0;
            var bottom = FindViewById<LinearLayout>(Resource.Id.bottomHolder);

            var btn = new ImageButton[3];
            btn[0] = returnBack;
            btn[1] = takePicture;
            btn[2] = flipView;

            ImageHelper.setupButtonsPosition(btn, bottom, context);

            var cameraInfo = new Android.Hardware.Camera.CameraInfo();
            camera = null;

            int cameraCount = Android.Hardware.Camera.NumberOfCameras;
            if (cameraCount == 1)
                flipView.Visibility = ViewStates.Invisible;
            else
            {
                flipView.Click += delegate
                {
                    if (isRunning)
                    {
                        camera.StopPreview();
                        isRunning = false;
                        camera.Unlock();

                        if (cameraCount > 1 && camID < cameraCount - 1)
                            camID++;
                        else
                            camID--;

                        camera = Android.Hardware.Camera.Open(camID);
                        isRunning = true;

                        camera.Lock();
                        camera.StartPreview();
                    }
                };
            }
            takePicture.Click += delegate
            {
                var p = camera.GetParameters();
                p.PictureFormat = Android.Graphics.ImageFormatType.Jpeg;
                camera.SetParameters(p);
                camera.TakePicture(this, this, this);
            };

            returnBack.Click += (object sender, EventArgs e) =>
            {
                var resultData = new Intent();
                resultData.PutExtra("filename", fullFilename);
                SetResult(!string.IsNullOrEmpty(fullFilename) ? Result.Ok : Result.Canceled, resultData);
                Finish();
            };
        }
示例#20
0
        void SetupUserInterface()
        {
            var metrics = Resources.DisplayMetrics;

            half_width  = metrics.WidthPixels / 2;
            half_height = metrics.HeightPixels / 4;


            mainLayout = new RelativeLayout(Context);
            mainLayout.SetBackgroundColor(Color.Black);

            /////////////////////////////////////////////////////////////////////////////////
            liveView = new TextureView(Context);

            RelativeLayout.LayoutParams liveViewParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MatchParent,
                RelativeLayout.LayoutParams.MatchParent);

            liveViewParams.Height     = half_height;
            liveViewParams.Width      = half_width;
            liveView.LayoutParameters = liveViewParams;
            liveView.Rotation         = 90;
            mainLayout.AddView(liveView);

            //TextView textview1 = new TextView(Context);
            //textview1.Text = "";
            //textview1.SetX(half_width / 2);
            //textview1.SetY(half_height + 10);
            //textview1.SetTextColor(Color.White);
            //mainLayout.AddView(textview1);
            ///////////////////////////////////////////////////////////////////////////////

            ///////////////////////////////////////////////////////////////////////////////
            AddImageView(0);
            AddImageView(1);
            AddImageView(2);
            AddImageView(3);
            AddImageView(4);
            AddImageView(5);

            //중앙 스크린
            AddImageView(6, metrics.WidthPixels, half_height * 2);

            ///////////////////////////////////////////////////////////////////////////////
            textViewMain = new TextView(Context);
            RelativeLayout.LayoutParams TextViewParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WrapContent,
                RelativeLayout.LayoutParams.WrapContent);
            textViewMain.LayoutParameters = TextViewParams;
            textViewMain.Text             = "123124";
            textViewMain.SetTextColor(Color.White);
            textViewMain.Click += async(s, e) =>
            {
                textViewMain.Text = "";
            };
            mainLayout.AddView(textViewMain);
            ///////////////////////////////////////////////////////////////////////////////
            ///

            ///////////////////////////////////////////////////////////////////////////////
            mainScreenButton = new Button(Context);
            RelativeLayout.LayoutParams ButtonParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WrapContent,
                RelativeLayout.LayoutParams.WrapContent);
            mainScreenButton.LayoutParameters = ButtonParams;
            mainScreenButton.Text             = "Hide";
            mainScreenButton.Click           += async(s, e) =>
            {
                ImageView view;
                if (imageViewDic.TryGetValue(6, out view) == true)
                {
                    if (view.Visibility == ViewStates.Visible)
                    {
                        view.Visibility       = ViewStates.Invisible;
                        mainScreenButton.Text = "Show";
                    }
                    else
                    {
                        view.Visibility       = ViewStates.Visible;
                        mainScreenButton.Text = "Hide";
                    }
                }
            };
            mainLayout.AddView(mainScreenButton);

            ///////////////////////////////////////////////////////////////////////////////
            qualityUp = new Button(Context);
            qualityUp.LayoutParameters = ButtonParams;
            qualityUp.Text             = "Up";
            qualityUp.Click           += async(s, e) =>
            {
                quality++;
                if (quality > 100)
                {
                    quality = 100;
                }

                qualityUp.Text = quality.ToString();
            };
            mainLayout.AddView(qualityUp);
            ///////////////////////////////////////////////////////////////////////////////
            qualityDown = new Button(Context);
            qualityDown.LayoutParameters = ButtonParams;
            qualityDown.Text             = "Down";
            qualityDown.Click           += async(s, e) =>
            {
                quality--;
                if (quality < 0)
                {
                    quality = 0;
                }

                qualityUp.Text = quality.ToString();
            };
            mainLayout.AddView(qualityDown);
            ///////////////////////////////////////////////////////////////////////////////
            exitButton = new Button(Context);
            exitButton.LayoutParameters = ButtonParams;
            exitButton.Text             = "EXIT";
            exitButton.Click           += async(s, e) =>
            {
                var page = Element as CameraPage;

                PopupNavigation.Instance.PopAsync();
            };
            mainLayout.AddView(exitButton);
            ////////////////////////////////////////////////////////////DrawLayout///////////////////
            switchButton = new Button(Context);
            switchButton.LayoutParameters = ButtonParams;
            switchButton.Text             = "Switch";
            switchButton.Click           += async(s, e) =>
            {
                StopCamera();

                if (currentFacing == Android.Hardware.CameraFacing.Front)
                {
                    currentFacing = Android.Hardware.CameraFacing.Back;
                }
                else
                {
                    currentFacing = Android.Hardware.CameraFacing.Front;
                }

                {
                    int cameraCount = Android.Hardware.Camera.NumberOfCameras;
                    int cameraId    = 0;
                    Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int camIdx = 0; camIdx < cameraCount; camIdx++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                        if (cameraInfo.Facing == currentFacing)
                        {
                            camera   = Android.Hardware.Camera.Open(camIdx);
                            cameraId = camIdx;
                            break;
                        }
                    }

                    if (camera == null)
                    {
                        camera = Android.Hardware.Camera.Open();
                    }

                    var parameters = camera.GetParameters();

                    // Find the preview aspect ratio that is closest to the surface aspect
                    //var previewSize = parameters.SupportedPreviewSizes
                    //                            .OrderBy(s => Math.Abs(s.Width / (decimal)s.Height - aspect))
                    //                            .First();

                    var previewSize = parameters.SupportedPreviewSizes[2];
                    //     mainLayout.LayoutParameters.Height = previewSize.Height;
                    //     mainLayout.LayoutParameters.Width = previewSize.Width;

                    parameters.SetPreviewSize(previewSize.Width, previewSize.Height);
                    camera.SetParameters(parameters);
                    camera.SetPreviewTexture(_surface);
                    StartCamera();
                }
            };
            mainLayout.AddView(switchButton);

            ////////////////////////////////////////////////////////////DrawLayout///////////////////

            AddView(mainLayout);
        }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.VideoMessage);

            ImageView btns = FindViewById<ImageView>(Resource.Id.imgNewloginHeader);
            TextView header = FindViewById<TextView>(Resource.Id.txtFirstScreenHeader);
            RelativeLayout relLayout = FindViewById<RelativeLayout>(Resource.Id.relativeLayout1);
            ImageHelper.setupTopPanel(btns, header, relLayout, header.Context);
            context = header.Context;
            Header.headertext = Application.Context.Resources.GetString(Resource.String.videoTitle);
            Header.fontsize = 36f;
            ImageHelper.fontSizeInfo(header.Context);
            header.SetTextSize(Android.Util.ComplexUnitType.Dip, Header.fontsize);
            header.Text = Header.headertext;

            bool isRecord = base.Intent.GetBooleanExtra("record", true); // true = record
            string filename = base.Intent.GetStringExtra("filename"); // must be full pathname - not just the filename

            string toplay = isRecord != false ? "null" : filename;
            time = 20;
            up = 0;
            progress = FindViewById<ProgressBar>(Resource.Id.progressBar1);
            seconds = FindViewById<TextView>(Resource.Id.textTimeLeft);
            ImageButton btnRecord = FindViewById<ImageButton>(Resource.Id.btnRecord);
            ImageButton btnPause = FindViewById<ImageButton>(Resource.Id.btnPause);
            ImageButton btnStop = FindViewById<ImageButton>(Resource.Id.btnStop);
            ImageButton btnPlay = FindViewById<ImageButton>(Resource.Id.btnPlay);
            ImageButton btnSwitchCamera = FindViewById<ImageButton>(Resource.Id.imageRotate);
            SurfaceView surface = FindViewById<SurfaceView>(Resource.Id.surfaceView1);

            path = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.ToString(), "myvideo.mp4");

            if (isRecord == false)
            {
                btnRecord.Visibility = ViewStates.Gone;
                progress.Visibility = ViewStates.Gone;
                seconds.Text = "Playback mode";
                isPlaying = true;
                vidplay = new videoPlay(surface, toplay);
            } else
                btnRecord.Click += new EventHandler(btnRecord_Click);

            int cameras = Android.Hardware.Camera.NumberOfCameras;
            if (cameras == 1)
                btnSwitchCamera.Visibility = ViewStates.Gone;
            else
            //{
                //isBackCamera = false;
                btnSwitchCamera.Click += new EventHandler(btnSwitchCamera_Click);
            // }

            btnPause.Click += new EventHandler(btnPause_Click);
            btnPlay.Click += delegate
            {
                videoPlay vp = new videoPlay(surface, path);
            };
            btnStop.Click += new EventHandler(btnStop_Click);

            timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);

            cameraInfo = new Android.Hardware.Camera.CameraInfo();

            isRecording = isLocked = false;
            correctCameras(0);
            video = new videoRecord(surface, path);
        }
示例#22
0
        public static int GetCameraDisplayOrientation(Activity activity, int cameraId, SurfaceOrientation rotation, bool isfromCapture = false)
        {
            int degrees = 0;

            Android.Hardware.Camera.CameraInfo info = new Android.Hardware.Camera.CameraInfo();
            Android.Hardware.Camera.GetCameraInfo(cameraId, info);

            if (info.Facing == CameraFacing.Front)
            {
                switch (rotation)
                {
                case SurfaceOrientation.Rotation0: degrees = 0; break;

                case SurfaceOrientation.Rotation90: degrees = 90; break;

                case SurfaceOrientation.Rotation180: degrees = 180; break;

                case SurfaceOrientation.Rotation270: degrees = 270; break;
                }
            }
            else
            {
                switch (rotation)
                {
                case SurfaceOrientation.Rotation0:
                    degrees = 90;
                    break;

                case SurfaceOrientation.Rotation90:
                    degrees = 0;
                    break;

                case SurfaceOrientation.Rotation180:
                    degrees = 270;
                    break;

                case SurfaceOrientation.Rotation270:
                    degrees = 180;
                    break;
                }
            }


            int result;

            if (info.Facing == CameraFacing.Front)
            {
                if (isfromCapture == false)
                {
                    result = (360 + info.Orientation - degrees) % 360;
                    result = (360 - result) % 360;
                }
                else
                {
                    result = (info.Orientation + degrees + 270) % 360;
                }
            }
            else
            {
                result = (info.Orientation + degrees + 270) % 360;  // back-facing
            }

            //  result = (info.Orientation + degrees + 270) % 360;
            return(result);
        }
示例#23
0
        public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)
        {
            {
                _surface = surface;
                {
                    int cameraCount = Android.Hardware.Camera.NumberOfCameras;
                    int cameraId    = 0;
                    Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int camIdx = 0; camIdx < cameraCount; camIdx++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                        if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
                        {
                            camera = Android.Hardware.Camera.Open(camIdx);

                            currentFacing = Android.Hardware.CameraFacing.Front;
                            cameraId      = camIdx;
                            break;
                        }
                    }

                    if (camera == null)
                    {
                        camera = Android.Hardware.Camera.Open();
                    }
                }


                var parameters = camera.GetParameters();
                var aspect     = ((decimal)height) / ((decimal)width);

                // Find the preview aspect ratio that is closest to the surface aspect
                //var previewSize = parameters.SupportedPreviewSizes
                //                            .OrderBy(s => Math.Abs(s.Width / (decimal)s.Height - aspect))
                //                            .First();

                var previewSize = parameters.SupportedPreviewSizes[2];
                //     mainLayout.LayoutParameters.Height = previewSize.Height;
                //     mainLayout.LayoutParameters.Width = previewSize.Width;

                parameters.SetPreviewSize(previewSize.Width, previewSize.Height);
                camera.SetParameters(parameters);
                camera.SetPreviewTexture(surface);
                StartCamera();

                //caemra page render
                Task.Run(() =>
                {
                    NetProcess.JpegStream.Clear();

                    DateTime chk = DateTime.Now;
                    while (isDestroy == false)
                    {
                        try
                        {
                            if (NetProcess.JpegStream.Count == 0)
                            {
                                continue;
                            }

                            if (chk < DateTime.Now)
                            {
                                exitButton.Text = "exit";

                                chk = DateTime.Now.AddSeconds(3);
                            }


                            MainThread.BeginInvokeOnMainThread(() =>
                            {
                                StreamWrapper ms;
                                while (NetProcess.JpegStream.TryDequeue(out ms) == true)
                                {
                                    if (ms == null)
                                    {
                                        continue;
                                    }

                                    var bitmap = BitmapFactory.DecodeByteArray(ms?.stream.ToArray(), 0, ms.stream.ToArray().Length);


                                    ImageView imageView;
                                    if (imageViewDic.TryGetValue(ms.pos, out imageView) == true)
                                    {
                                        imageView?.SetImageBitmap(bitmap);
                                    }
                                    else
                                    {
                                        AddImageView(ms.pos);

                                        if (imageViewDic.TryGetValue(ms.pos, out imageView) == true)
                                        {
                                            imageView?.SetImageBitmap(bitmap);
                                        }
                                    }


                                    //제일 하단 큰 스크린

                                    if (ms.pos == target_pos)
                                    {
                                        ImageView imageView2;
                                        if (imageViewDic.TryGetValue(6, out imageView2) == true)
                                        {
                                            imageView2?.SetImageBitmap(bitmap);
                                        }
                                        else
                                        {
                                            AddImageView(ms.pos);

                                            if (imageViewDic.TryGetValue(6, out imageView2) == true)
                                            {
                                                imageView2?.SetImageBitmap(bitmap);
                                            }
                                        }
                                    }
                                }
                            });
                        }
                        catch (Exception e)
                        {
                        }
                    }
                });


                //caemra page render
                Task.Run(() =>
                {
                    audiomgr?.record();
                });


                Task.Run(() =>
                {
                    while (isDestroy == false)
                    {
                        StreamWrapper ms;
                        if (NetProcess.AudioStream.TryDequeue(out ms) == true)
                        {
                            if (ms == null)
                            {
                                continue;
                            }

                            audiomgr?.play(ms.stream.ToArray());
                        }
                    }
                });
            }
        }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            number = 0;
            SetContentView(Resource.Layout.CameraTakePicScreen);
            isRunning = false;
            TextView header = FindViewById<TextView>(Resource.Id.txtFirstScreenHeader);
            ImageView btns = FindViewById<ImageView>(Resource.Id.imgNewUserHeader);
            RelativeLayout relLayout = FindViewById<RelativeLayout>(Resource.Id.relativeLayout1);
            ImageHelper.setupTopPanel(btns, header, relLayout, header.Context);

            Header.headertext = Application.Context.Resources.GetString(Resource.String.photoTitle);
            Header.fontsize = 36f;
            ImageHelper.fontSizeInfo(header.Context);
            header.SetTextSize(Android.Util.ComplexUnitType.Dip, Header.fontsize);
            header.Text = Header.headertext;

            SurfaceView surface = FindViewById<SurfaceView>(Resource.Id.surfaceCameraView);

            holder = surface.Holder;
            holder.AddCallback(this);
            holder.SetType(Android.Views.SurfaceType.PushBuffers);
            context = surface.Context;

            ImageButton takePicture = FindViewById<ImageButton>(Resource.Id.btnCamera);
            takePicture.Tag = 1;
            ImageButton flipView = FindViewById<ImageButton>(Resource.Id.imgFlipView);
            flipView.Tag = 2;
            ImageButton returnBack = FindViewById<ImageButton>(Resource.Id.imgBack);
            returnBack.Tag = 0;
            LinearLayout bottom = FindViewById<LinearLayout>(Resource.Id.bottomHolder);

            ImageButton[] btn = new ImageButton[3];
            btn [0] = returnBack;
            btn [1] = takePicture;
            btn [2] = flipView;

            ImageHelper.setupButtonsPosition(btn, bottom, context);

            int back = (int)Android.Hardware.CameraFacing.Back;
            int front = (int)Android.Hardware.CameraFacing.Front;

            Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
            camera = null;

            int cameraCount = Android.Hardware.Camera.NumberOfCameras;
            if (cameraCount == 1)
                flipView.Visibility = ViewStates.Invisible;
            else
            {
                flipView.Click += delegate
                {
                    if (isRunning)
                    {
                        camera.StopPreview();
                        isRunning = false;
                        camera.Unlock();
                        //camera.Release();

                        if (cameraCount > 1 && camID < cameraCount - 1)
                            camID++;
                        else
                            camID--;

                        camera = Android.Hardware.Camera.Open(camID);
                        isRunning = true;

                        camera.Lock();
                        camera.StartPreview();
                    }
                };
            }
            takePicture.Click += delegate
            {
                Android.Hardware.Camera.Parameters p = camera.GetParameters();
                p.PictureFormat = Android.Graphics.ImageFormatType.Jpeg;
                camera.SetParameters(p);
                camera.TakePicture(this, this, this);
            };

            returnBack.Click += (object sender, EventArgs e) =>
            {
                Intent resultData = new Intent();
                resultData.PutExtra("filename", fullFilename);
                if (fullFilename != "")
                    SetResult(Result.Ok, resultData);
                else
                    SetResult(Result.Canceled, resultData);
                Finish();
            };
        }
        private bool SetCameraInstance()
        {
            if (_camera != null)
            {
                return(true);
            }

            if ((int)Build.VERSION.SdkInt >= 9)
            {
                if (_cameraId < 0)
                {
                    var camInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int i = 0; i < Android.Hardware.Camera.NumberOfCameras; i++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(i, camInfo);

                        if (camInfo.Facing == Android.Hardware.Camera.CameraInfo.CameraFacingBack)
                        {
                            try
                            {
                                _camera   = Android.Hardware.Camera.Open(i);
                                _cameraId = i;
                                return(true);
                            }
                            catch (RuntimeException e)
                            {
                                Console.WriteLine(e);
                            }
                        }
                    }
                }

                else
                {
                    try
                    {
                        _camera = Android.Hardware.Camera.Open(_cameraId);
                    }
                    catch (RuntimeException e)
                    {
                        Console.WriteLine(e);
                    }
                }
            }

            if (_camera == null)
            {
                try
                {
                    _camera   = Android.Hardware.Camera.Open();
                    _cameraId = 0;
                }
                catch (RuntimeException e)
                {
                    // this is REALLY bad, the camera is definitely locked by the system.
                    return(false);
                }
            }

            // here, the open() went good and the camera is available
            return(true);
        }
示例#26
0
        public void SurfaceCreated(ISurfaceHolder holder)
        {
            CheckPermissions();

            var perf = PerformanceCounter.Start();

            try
            {
                var version = Android.OS.Build.VERSION.SdkInt;

                if (version >= BuildVersionCodes.Gingerbread)
                {
                    Android.Util.Log.Debug("ZXing.Net.Mobile", "Checking Number of cameras...");

                    var numCameras = Android.Hardware.Camera.NumberOfCameras;
                    var camInfo    = new Android.Hardware.Camera.CameraInfo();
                    var found      = false;
                    Android.Util.Log.Debug("ZXing.Net.Mobile", "Found " + numCameras + " cameras...");

                    var whichCamera = CameraFacing.Back;

                    if (options.UseFrontCameraIfAvailable.HasValue && options.UseFrontCameraIfAvailable.Value)
                    {
                        whichCamera = CameraFacing.Front;
                    }

                    for (int i = 0; i < numCameras; i++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(i, camInfo);
                        if (camInfo.Facing == whichCamera)
                        {
                            Android.Util.Log.Debug("ZXing.Net.Mobile", "Found " + whichCamera + " Camera, opening...");
                            camera = Android.Hardware.Camera.Open(i);
                            found  = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        Android.Util.Log.Debug("ZXing.Net.Mobile", "Finding " + whichCamera + " camera failed, opening camera 0...");
                        camera = Android.Hardware.Camera.Open(0);
                    }
                }
                else
                {
                    camera = Android.Hardware.Camera.Open();
                }
                if (camera == null)
                {
                    Android.Util.Log.Debug("ZXing.Net.Mobile", "Camera is null :(");
                }


                //camera = Android.Hardware.Camera.Open ();
                camera.SetPreviewDisplay(holder);
                camera.SetPreviewCallback(this);
            }
            catch (Exception ex)
            {
                ShutdownCamera();

                // TODO: log or otherwise handle this exception
                Console.WriteLine("Setup Error: " + ex);
                //throw;
            }

            PerformanceCounter.Stop(perf, "SurfaceCreated took {0}ms");
        }
示例#27
0
        void SetupUserInterface()
        {
            var metrics = Resources.DisplayMetrics;

            half_width  = metrics.WidthPixels / 2;
            half_height = metrics.HeightPixels / 4;


            mainLayout = new RelativeLayout(Context);
            mainLayout.SetBackgroundColor(Color.Black);

            /////////////////////////////////////////////////////////////////////////////////
            liveView = new TextureView(Context);

            RelativeLayout.LayoutParams liveViewParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MatchParent,
                RelativeLayout.LayoutParams.MatchParent);

            liveViewParams.Height     = half_height;
            liveViewParams.Width      = half_width;
            liveView.LayoutParameters = liveViewParams;
            liveView.Rotation         = 90;
            mainLayout.AddView(liveView);

            //TextView textview1 = new TextView(Context);
            //textview1.Text = "";
            //textview1.SetX(half_width / 2);
            //textview1.SetY(half_height + 10);
            //textview1.SetTextColor(Color.White);
            //mainLayout.AddView(textview1);
            ///////////////////////////////////////////////////////////////////////////////

            ///////////////////////////////////////////////////////////////////////////////
            AddImageView(0);
            AddImageView(1);
            AddImageView(2);
            AddImageView(3);
            AddImageView(4);
            AddImageView(5);
            ///////////////////////////////////////////////////////////////////////////////
            exitButton = new Button(Context);
            RelativeLayout.LayoutParams ButtonParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WrapContent,
                RelativeLayout.LayoutParams.WrapContent);
            ButtonParams.Height         = 150;
            ButtonParams.Width          = 150;
            exitButton.LayoutParameters = ButtonParams;
            exitButton.Text             = "EXIT";
            exitButton.Click           += async(s, e) =>
            {
                var page = Element as CameraPage;

                PopupNavigation.Instance.PopAsync();
            };
            mainLayout.AddView(exitButton);
            ////////////////////////////////////////////////////////////DrawLayout///////////////////
            switchButton = new Button(Context);
            switchButton.LayoutParameters = ButtonParams;
            switchButton.Text             = "Switch";
            switchButton.Click           += async(s, e) =>
            {
                StopCamera();

                if (currentFacing == Android.Hardware.CameraFacing.Front)
                {
                    currentFacing = Android.Hardware.CameraFacing.Back;
                }
                else
                {
                    currentFacing = Android.Hardware.CameraFacing.Front;
                }

                {
                    int cameraCount = Android.Hardware.Camera.NumberOfCameras;
                    int cameraId    = 0;
                    Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int camIdx = 0; camIdx < cameraCount; camIdx++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                        if (cameraInfo.Facing == currentFacing)
                        {
                            camera   = Android.Hardware.Camera.Open(camIdx);
                            cameraId = camIdx;
                            break;
                        }
                    }

                    if (camera == null)
                    {
                        camera = Android.Hardware.Camera.Open();
                    }

                    var parameters = camera.GetParameters();

                    // Find the preview aspect ratio that is closest to the surface aspect
                    //var previewSize = parameters.SupportedPreviewSizes
                    //                            .OrderBy(s => Math.Abs(s.Width / (decimal)s.Height - aspect))
                    //                            .First();

                    var previewSize = parameters.SupportedPreviewSizes[2];
                    //     mainLayout.LayoutParameters.Height = previewSize.Height;
                    //     mainLayout.LayoutParameters.Width = previewSize.Width;

                    parameters.SetPreviewSize(previewSize.Width, previewSize.Height);
                    camera.SetParameters(parameters);
                    camera.SetPreviewTexture(_surface);
                    StartCamera();
                }
            };
            mainLayout.AddView(switchButton);

            ////////////////////////////////////////////////////////////DrawLayout///////////////////



            AddView(mainLayout);
        }
        private void correctCameras(int cameras)
        {
            int result = 0;
            Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
            Android.Hardware.Camera.GetCameraInfo(cameras, cameraInfo);
            int rotation = WindowManager.DefaultDisplay.Orientation;
            int degrees = rotation;

            if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
            {
                result = (cameraInfo.Orientation + degrees) % 360;
                result = (360 - result) % 360;
                try
                {
                    if (isLocked == true)
                        camera.Unlock();
                    camera = Android.Hardware.Camera.Open(cameras);
                } catch (Java.Lang.RuntimeException ex)
                {
                    RunOnUiThread(delegate
                    {
                        GeneralUtils.Alert(context, Application.Context.Resources.GetString(Resource.String.commonError),
                                         Application.Context.Resources.GetString(Resource.String.photoNoConnection));
                    });
                    #if DEBUG
                    System.Diagnostics.Debug.WriteLine("Exception flung {0}", ex.ToString());
                    #endif
                }
            } else
            {
                result = (cameraInfo.Orientation - degrees + 360) % 360;
                try
                {
                    if (isLocked == true)
                        camera.Unlock();
                    camera = Android.Hardware.Camera.Open(cameras);
                } catch (Java.Lang.RuntimeException ex)
                {
                    RunOnUiThread(delegate
                    {
                        GeneralUtils.Alert(context, Application.Context.Resources.GetString(Resource.String.commonError),
                                          Application.Context.Resources.GetString(Resource.String.photoNoConnection));
                    });
                    #if DEBUG
                    System.Diagnostics.Debug.WriteLine("Exception flung {0}", ex.ToString());
                    #endif
                }
            }

            if (camera != null)
            {
                RunOnUiThread(delegate
                {
                    camera.SetDisplayOrientation(result);
                    camera.StartPreview();
                    camera.Lock();
                });
                isLocked = true;
            }
        }
示例#29
0
        public void StartScanning(MobileBarcodeScanningOptions options, Action<Result> callback)
        {
            this.callback = callback;
            this.options = options;

            lastPreviewAnalysis = DateTime.UtcNow.AddMilliseconds(options.InitialDelayBeforeAnalyzingFrames);
            isAnalyzing = true;

            Console.WriteLine ("StartScanning");

            CheckPermissions ();

            var perf = PerformanceCounter.Start ();

            GetExclusiveAccess();

            try
            {
                var version = Build.VERSION.SdkInt;

                if (version >= BuildVersionCodes.Gingerbread)
                {
                    Android.Util.Log.Debug (MobileBarcodeScanner.TAG, "Checking Number of cameras...");

                    var numCameras = Android.Hardware.Camera.NumberOfCameras;
                    var camInfo = new Android.Hardware.Camera.CameraInfo();
                    var found = false;
                    Android.Util.Log.Debug (MobileBarcodeScanner.TAG, "Found " + numCameras + " cameras...");

                    var whichCamera = CameraFacing.Back;

                    if (options.UseFrontCameraIfAvailable.HasValue && options.UseFrontCameraIfAvailable.Value)
                        whichCamera = CameraFacing.Front;

                    for (int i = 0; i < numCameras; i++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(i, camInfo);
                        if (camInfo.Facing == whichCamera)
                        {
                            Android.Util.Log.Debug (MobileBarcodeScanner.TAG, "Found " + whichCamera + " Camera, opening...");
                            camera = Android.Hardware.Camera.Open(i);
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Finding " + whichCamera + " camera failed, opening camera 0...");
                        camera = Android.Hardware.Camera.Open(0);
                    }
                }
                else
                {
                    camera = Android.Hardware.Camera.Open();
                }

                if (camera == null)
                    Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "Camera is null :(");

                camera.SetPreviewCallback (this);

            } catch (Exception ex) {
                ShutdownCamera ();

                Console.WriteLine("Setup Error: " + ex);
            }

            PerformanceCounter.Stop (perf, "SurfaceCreated took {0}ms");
        }
示例#30
0
        private void startCamera()
        {
            if (ContextCompat.CheckSelfPermission(context, Manifest.Permission.Camera)
                != Android.Content.PM.Permission.Granted)
            {
                if (permissionCallback != null)
                {
                    permissionCallback.onRequestPermission();
                }
                return;
            }
            if (camera == null)
            {
                Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                for (int i = 0; i < Android.Hardware.Camera.NumberOfCameras; i++)
                {
                    Android.Hardware.Camera.GetCameraInfo(i, cameraInfo);
                    if ((int)cameraInfo.Facing == cameraFacing)
                    {
                        cameraId = i;
                    }
                }
                camera = Android.Hardware.Camera.Open(cameraId);
            }
            //        if (parameters == null) {
            //            parameters = camera.getParameters();
            //            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
            //        }


            int detectRotation = 0;

            if (cameraFacing == 1)
            {
                int rotation = ORIENTATIONS.Get(displayOrientation);
                rotation = getCameraDisplayOrientation(rotation, cameraId, camera);
                camera.SetDisplayOrientation(rotation);
                detectRotation = rotation;
                if (displayOrientation == 0)
                {
                    if (detectRotation == 90 || detectRotation == 270)
                    {
                        detectRotation = (detectRotation + 180) % 360;
                    }
                }
            }
            else if (cameraFacing == 0)
            {
                int rotation = ORIENTATIONS.Get(displayOrientation);
                rotation = getCameraDisplayOrientation(rotation, cameraId, camera);
                camera.SetDisplayOrientation(rotation);
                detectRotation = rotation;
            }
            else if (cameraFacing == 2)
            {
                camera.SetDisplayOrientation(0);
                detectRotation = 0;
            }

            opPreviewSize(preferredWidth, preferredHeight);
            Android.Hardware.Camera.Size size = camera.GetParameters().PreviewSize;
            if (detectRotation % 180 == 90)
            {
                previewView.setPreviewSize(size.Height, size.Width);
            }
            else
            {
                previewView.setPreviewSize(size.Width, size.Height);
            }
            int temp = detectRotation;

            try
            {
                // if (cameraFacing == ICameraControl.CAMERA_USB) {
                // camera.SetPreviewTexture(textureView.getSurfaceTexture());
                //            } else {
                //            surfaceTexture = new SurfaceTexture(11);
                //            camera.setPreviewTexture(surfaceTexture);
                //            uiHandler.post(new Runnable() {
                //                @Override
                //                public void run() {
                //
                //                    if (textureView != null) {
                //                        surfaceTexture.detachFromGLContext();
                //                        textureView.setSurfaceTexture(surfaceTexture);
                //                    }
                //                }
                //            });
                // }
                //            camera.addCallbackBuffer(new byte[size.width * size.height * 3 / 2]);
                //            camera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
                //
                //                @Override
                //                public void onPreviewFrame(byte[] data, Camera camera) {
                //                    Log.i("wtf", "onPreviewFrame-->");
                //                    onFrameListener.onPreviewFrame(data, temp, size.width, size.height);
                //                    camera.addCallbackBuffer(data);
                //           ad     }
                //            });
                //    camera.setPreviewCallback(new Camera.PreviewCallback() {

                //    public void onPreviewFrame(byte[] data, Camera camera)
                //    {
                //        LogUtil.i("wtf", "onPreviewFrame-->");
                //        onFrameListener.onPreviewFrame(data, temp, size.width, size.height);
                //    }
                //});
            }
            catch (IOException e)
            {
                e.PrintStackTrace();
                LogUtil.i("wtf", e.ToString());
            }
            catch (RuntimeException e)
            {
                e.PrintStackTrace();
                LogUtil.i("wtf", e.ToString());
            }
        }