public bool GetCurrentFrame(out VideoCameraFrame cameraFrame)
        {
            cameraFrame = null;

            if (bitmapPlayer.Running)
            {
                bitmapPlayer.GetCurrentImage(out int[,] currentFrame, out long currentFrameNo, out byte[] previewBitmapBytes);

                short  currentGain         = GetCurrentGain();
                double currentGamma        = GetCurrentGammaValue();
                int    currentWhiteBalance = GetWhiteBalance();

                if (currentGain != 0 || currentGamma != 1.0 || currentWhiteBalance > 0)
                {
                    short brightness = (short)Math.Round(150 * ((double)currentGain / GetMaxGain()));

                    aviTools.ApplyGammaBrightness(currentFrame, alteredPixels, bitmapPlayer.Width, bitmapPlayer.Height, brightness);
                    cameraImage.SetImageArray(alteredPixels, bitmapPlayer.Width, bitmapPlayer.Height, SensorType.Monochrome);

                    cameraFrame = new VideoCameraFrame()
                    {
                        Pixels             = alteredPixels,
                        FrameNumber        = currentFrameNo,
                        PreviewBitmapBytes = cameraImage.GetDisplayBitmapBytes()
                    };
                }
                else
                {
                    cameraFrame = new VideoCameraFrame()
                    {
                        Pixels             = currentFrame,
                        FrameNumber        = currentFrameNo,
                        PreviewBitmapBytes = previewBitmapBytes
                    };
                }

                return(true);
            }

            return(false);
        }
Example #2
0
        public void GetCurrentImage(out int[,] currentFrame, out long currentFrameNo, out byte[] previewBitmapBytes)
        {
            if (errorBitmap != null)
            {
                currentFrame       = errorPixels;
                currentFrameNo     = this.currentFrameNo;
                previewBitmapBytes = cameraImage.GetBitmapBytes(errorBitmap);
            }
            else
            {
                if (playbackBufferSize > 0)
                {
                    lock (syncRoot)
                    {
                        if (playbackBuffer.Count > 0)
                        {
                            nextBufferedFrame = playbackBuffer.Dequeue();
                        }
                        else
                        {
                            // There is no new buffered frame
                        }
                    }

                    currentFrame   = GetCurrentImageFromBufferedFrame(nextBufferedFrame);
                    currentFrameNo = nextBufferedFrame.CurrentFrameNo;
                }
                else
                {
                    currentFrame   = GetCurrentImageFromBufferedFrame(this.currentFrame);
                    currentFrameNo = this.currentFrame.CurrentFrameNo;
                }

                cameraImage.SetImageArray(currentFrame, width, height, SensorType.Monochrome);
                previewBitmapBytes = cameraImage.GetDisplayBitmapBytes();
            }
        }