/// <summary> /// Обработчик события приема кадра /// </summary> /// <param name="frame"></param> private void Camera_FrameReceived(VimbaCamera vCamera, Frame frame) { Bitmap bitmap = new Bitmap((int)frame.Width, (int)frame.Height, PixelFormat.Format32bppRgb);//GetBitmap8FromFrame(frame); //null;//new Bitmap((int)frame.Width, (int)frame.Height, PixelFormat.Format24bppRgb); frame.Fill(bitmap); BitmapData bd = bitmap.LockBits(new Rectangle(0, 0, (int)frame.Width, (int)frame.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb); Avalonia.Media.Imaging.Bitmap bmp = new Avalonia.Media.Imaging.Bitmap(Avalonia.Platform.PixelFormat.Rgba8888, bd.Scan0, , 1, bd.Stride); viewportControl.imageMain.Source = null; }
public static Server CreateServer() { string Uri = "localhost"; int Port = 39946; var server = new Server() { Services = { VimbaCamera.BindService(new CameraServiceImpl()) }, Ports = { new ServerPort(Uri, Port, ServerCredentials.Insecure) } }; return(server); }
private void AutoconnectToFirstCamera() { try { if (VimbaCamera.Cameras.Count > 0) { vimbaCamera.CloseCamera(); UnsubscribeEvents(); vimbaCamera.OpenCamera(VimbaCamera.Cameras[0].Id); CameraControlsGroup(vimbaCamera.IsOpened); pixelvars = (int)Math.Pow(2, VimbaCamera.PixelFormatToBits(vimbaCamera.PixelFormat)); if (vimbaCamera.IsOpened) { try { SetupFeaturesControls(); SubscribeEvents(); } catch (Exception exc) { MessageBox.Show(exc.ToString()); } vimbaCamera.RestoreFullROI(true); vimbaCamera.StartContiniousAsyncAccusition(); //FillTriggerFeatures(); logger.Info("Подключена камера " + vimbaCamera.ToString()); } } } catch (Exception exc) { LogWrite(exc.Message); logger.Error(exc, "Autoconnect to camera failed"); } }
/// <summary> /// Обработчик события приема кадра /// </summary> /// <param name="frame"></param> private void Camera_FrameReceived(VimbaCamera vCamera, Frame frame) { if (!Dispatcher.CheckAccess()) { Dispatcher.Invoke(new Action(() => { Camera_FrameReceived(vCamera, frame); })); return; } else { if (viewportControl1.Image == null || (viewportControl1.Image.Width != frame.Width && viewportControl1.Image.Height != frame.Height)) { //viewportControl1.WriteableBitmap = null;//image.Source = null; viewportControl1.Image = new System.Windows.Media.Imaging.WriteableBitmap( (int)frame.Width, (int)frame.Height, 96, 96, PixelFormats.Bgr32, null); } try { viewportControl1.Image.Lock(); unsafe { IntPtr intPtr = viewportControl1.Image.BackBuffer; byte * dest = (byte *)intPtr; byte value = (byte)(DateTime.Now.Second * 4.22d); for (int i = 0; i < frame.BufferSize; i += 2) { value = (byte)(BitConverter.ToInt16(frame.Buffer, i) * 255 / 4095); dest[0] = dest[1] = dest[2] = value; dest += 4; } } viewportControl1.Image.AddDirtyRect(new Int32Rect(0, 0, (int)frame.Width, (int)frame.Height)); } catch (Exception) { } finally { viewportControl1.Image.Unlock(); } //viewportControl1.Image //viewportControl1.WriteableBitmap.WritePixels(new Int32Rect(0,0,(int)frame.Width,(int)frame.Height), frame.Buffer, (int)frame.Width*2, 0); } vCamera.Camera.QueueFrame(frame); /*try * { * bool miss_this_frame = GlobalSettings.FPS_Limiting && DateTime.Now.Subtract(timeCounterLimitFPS).TotalMilliseconds < 1000d / GlobalSettings.FPS_Limit; //ограничение по фпс * if (!viewportControl1.IsImageInUse() && !miss_this_frame) * { * lock (lockerBitmap) * { * if (frame.ReceiveStatus == VmbFrameStatusType.VmbFrameStatusComplete) * { * if (bitmap != null) * { * bitmap.Dispose(); * bitmap = null; * } * * //Блок обработкт изображения * switch (polarDataSelector) * { * case PolarData.I0: * case PolarData.I135: * case PolarData.I45: * case PolarData.I90: * bitmap = Polarisation.ExtractPolarisationBitmap(frame, polarDataSelector, VimbaCamera.PixelFormatToBits(vimbaCamera.PixelFormat)); * break; * case PolarData.AOLP: * bitmap = Polarisation.ComputeAOLPBitmap(frame, colorbarControl.Colorbar);//DoublesToBitmap(ComputeAOLP(frame), (int)frame.Width/2, (int)frame.Height/2); * break; * case PolarData.DOLP: * bitmap = Polarisation.ComputeDOLPBitmap(frame, colorbarControl.Colorbar); * break; * default: * bitmap = new Bitmap((int)frame.Width, (int)frame.Height, PixelFormat.Format32bppRgb);//GetBitmap8FromFrame(frame); //null;//new Bitmap((int)frame.Width, (int)frame.Height, PixelFormat.Format24bppRgb); * frame.Fill(ref bitmap); * break; * } * * //Нужны при записи видео. Необходимо задать сразу после изменений в bitmap * bitmapW = bitmap.Width; * bitmapH = bitmap.Height; * * bool hist_drawing = false; * lock (lockerHistDrawing) * hist_drawing = histDrawing; * * //Draw histogram * if (DateTime.Now.Subtract(timeCounterHist).TotalMilliseconds > 100 && !hideHistogram && !hist_drawing) * { * lock (lockerHistDrawing) * histDrawing = true; * * int length = (int)(frame.Width * frame.Height); * if (sbuffer.Length != length) * Array.Resize(ref sbuffer, length); * * Buffer.BlockCopy(frame.Buffer, 0, sbuffer, 0, length * 2); * * Parallel.Invoke(DrawHistogram); * } * * //Writing bitmap in video * try * { * lock (lockerVideoWriter) * if (videoCapturing) * { * TimeSpan timeSpan = DateTime.Now.Subtract(videocapStartTime); * lock (lockerBitmap) * videoFileWriter.WriteVideoFrame(bitmap, timeSpan); * } * } * catch (Exception vex) * { * StopVideoCapture(); * BeginInvoke(new Action(() => { * StartVideoToolStripMenuItem.Enabled = true; * StopVideoToolStripMenuItem.Enabled = false; * LogWrite(vex.Message); * })); * } * * lock (lockerBitmap) * { * viewportControl1.Image = bitmap; * } * } * } * * timeCounterLimitFPS = DateTime.Now; * } * } * catch (Exception exc) * { * LogWrite(exc.Message); * logger.Error(exc, "FrameReceived error"); * } * finally * { * try * { * vCamera.Camera.QueueFrame(frame); * } * catch (Exception exc) * { * LogWrite(exc.Message); * logger.Error(exc, "FrameReceived QueueFrame"); * } * }*/ }