Exemplo n.º 1
0
        private void HandleOnPreviewFrameReady(object sender, FastJavaByteArray fastArray)
        {
            if (!CanAnalyzeFrame)
            {
                return;
            }

            _wasScanned          = false;
            _lastPreviewAnalysis = DateTime.UtcNow;

            _processingTask = Task.Run(() =>
            {
                try
                {
                    if (TakePicture)
                    {
                        TakePicture = false;
                        var raw     = new byte[fastArray.Count];
                        fastArray.CopyTo(raw, 0);
                        var img = new YuvImage(raw, ImageFormatType.Nv21, _cameraController.Camera.GetParameters().PreviewSize.Width, _cameraController.Camera.GetParameters().PreviewSize.Height, null);
                        using (var stream = new MemoryStream())
                        {
                            var rect = new Rect(0, 0, img.Width, img.Height);
                            img.CompressToJpeg(rect, 80, stream);
                            var array = stream.ToArray();
                            OnPictureTaken?.Invoke(this, array);
                            stream.Close();
                        }
                    }


                    DecodeFrame(fastArray);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }).ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    Android.Util.Log.Debug(MobileBarcodeScanner.TAG, "DecodeFrame exception occurs");
                }
            }, TaskContinuationOptions.OnlyOnFaulted);
        }
Exemplo n.º 2
0
        public static byte[] ConvertToJpg(this FastJavaByteArray self, int width, int height)
        {
            byte[] javaByteArray = new byte[self.Count];
            self.CopyTo(javaByteArray, 0);

            using (YuvImage yuvImage = new YuvImage(javaByteArray, ImageFormatType.Nv21, width, height, null))
            {
                using (Rect rect = new Rect(0, 0, width, height))
                {
                    byte[] jpg = null;
                    using (var os = new MemoryStream())
                    {
                        yuvImage.CompressToJpeg(rect, 100, os);
                        jpg = os.ToArray();
                        os.Close();
                    }
                    return(jpg);
                }
            }
        }