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