首页 > 解决方案 > 表单之间的连续数据传递

问题描述

我有一个 MainForm 从相机(15-20 FPS)接收图像并从这些图像中提取数据。我希望能够绘制这些数据,因此我需要一个Chart可以在接收到的每一帧上更新的对象。

不幸的是,我认为我正在使用的相机(Vimba)的 API写得很奇怪,我无法Chart在处理帧接收和数据提取的同一事件中绘制 API。它只是不起作用(在 API 中,任何涉及图形对象但不只是将接收到的图像放入 aBitmap或将所述位图放入 a 的指令PictureBox都不会运行,我不知道为什么)。

我已经与这个问题斗争了几天,我还没有尝试过的一件事是将从图像中提取的数据传递给另一个Form,并在那里绘制图表。我的问题是我不知道如何在收到的每一帧上将数据发送到新表单。我已经使用了一种简单的方法将数据发送到另一个FormONCE,但不是连续的。有人可以向我解释如何实现这一目标吗?

这是计算机从相机接收到帧时运行的事件(我要绘制的数据存储在 中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();
    }

标签: c#imagecharts

解决方案


推荐阅读