¿Una forma rápida de convertir un mapa de bits en una matriz booleana en C #?

Estoy creando una aplicación XNA donde capturo la captura de pantalla de una cámara web 4 veces por segundo y luego trato de convertirla en una matriz booleana cuando el color de píxel rojo está por debajo de un cierto umbral. Cuando lo convierto en una Texture2D, no se retrasa, pero cuando trato de obtener los píxeles individuales, se retrasa, incluso cuando la resolución de la cámara web es de 176x144.

Este es el código para tomar el mapa de bits:

<code>public Bitmap getBitmap()
    {
        if (!panelVideoPreview.IsDisposed)
        {
            Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height, PixelFormat.Format32bppRgb);
            using (Graphics g = Graphics.FromImage(b))
            {
                Rectangle rectanglePanelVideoPreview = panelVideoPreview.Bounds;
                Point sourcePoints = panelVideoPreview.PointToScreen(new Point(panelVideoPreview.ClientRectangle.X, panelVideoPreview.ClientRectangle.Y));
                g.CopyFromScreen(sourcePoints, Point.Empty, rectanglePanelVideoPreview.Size);
            }

            return b;
        }
        else
        {
            Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height);
            return b;
        }
    }
</code>

Este es el código para convertir el mapa de bits en una matriz booleana:

<code>public bool[,] getBoolBitmap(uint treshold)
    {
        Bitmap b = getBitmap();

        bool[,] ar = new bool[b.Width, b.Height];

        for (int y = 0; y < b.Height; y++)
        {
            for (int x = 0; x < b.Width; x++)
            {
                if (b.GetPixel(x, y).R < treshold)
                {
                    ar[x, y] = false;
                }
                else
                {
                    ar[x, y] = true;
                }
            }
        }

        return ar;
    }
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta