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(); }
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); }
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); } }
// 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); }
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(); } }
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; } }
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(); } }
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); }
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 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; } } }
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); } }); } }
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"); }
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"); }
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(); }; }
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); }
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); }
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); }
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"); }
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; } }
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"); }
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()); } }