Непрерывная передача данных между формами - PullRequest
0 голосов
/ 15 мая 2018

У меня есть MainForm, который получает изображения с камеры (15-20 кадров в секунду) и извлекает данные из этих изображений. Я хочу быть в состоянии построить эти данные, поэтому мне нужен объект Chart, который будет обновляться при каждом полученном кадре.

К сожалению, API от камеры (Vimba), которую я использую, я думаю, странно написано, и я не могу нарисовать Chart в том же событии, которое обрабатывает прием кадры и извлечение данных. Это просто не работает (в API, любая инструкция, которая включает графический объект, но не просто помещает полученное изображение в Bitmap или помещает указанное растровое изображение в PictureBox, не выполняется, я не не знаю почему).

Я боролся с этой проблемой уже несколько дней, и одну вещь, которую я еще не пробовал, - это передать данные, извлеченные из изображения, в другое Form и нарисовать там диаграмму. Моя проблема в том, что я понятия не имею, как получить данные для отправки в новую форму в каждом полученном кадре. Я уже использовал простой метод для отправки данных другому Form ОДИН РАЗ, но не постоянно. Может ли кто-нибудь объяснить мне, как этого добиться?

Вот событие, которое запускается, когда компьютер получает кадр от камеры (данные, которые я хочу нарисовать, хранятся в PixelColorCOuntReady):

    private void OnFrameReceived(Frame frame)
    {
        Bitmap myBitmap = null;

        if (true == m_Acquiring)
        {
            mycamera.QueueFrame(frame);
        }

        frame.Fill(ref myBitmap);
        pictureBoxLiveCamera.Image = myBitmap;
        SaveBitmap = myBitmap.Clone(cloneRect, myBitmap.PixelFormat);

        Array.Clear(PixelColorCount, 0, 256);
        unsafe
        {
            int width = SaveBitmap.Width;
            int height = SaveBitmap.Height;
            int bytesPerPixel = 1;
            int maxPointerLength = width * height * bytesPerPixel;
            int stride = width * bytesPerPixel;
            System.Drawing.Imaging.BitmapData bData = SaveBitmap.LockBits(new System.Drawing.Rectangle(0, 0, SaveBitmap.Width, SaveBitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, SaveBitmap.PixelFormat);
            byte* scan0 = (byte*)bData.Scan0.ToPointer();
            byte B;
            for (int i = 0; i < maxPointerLength; i++)
            {
                B = scan0[i];
                PixelColorCount[B] += 1;
            }
            SaveBitmap.UnlockBits(bData);
        }

        PixelColorCountReady = PixelColorCount.DeepClone();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...