Example #1
0
        /// <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);
        }
Example #3
0
        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");
            }
        }
Example #4
0
        /// <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");
             *  }
             * }*/
        }