Почему я не получаю правильный цвет - PullRequest
0 голосов
/ 07 июля 2019

У меня есть видеоплеер, который подключается к моей веб-камере. Затем я рисую синюю рамку вокруг области видео, копирую ее, а затем получаю среднюю интенсивность пикселей. У меня проблема в том, что я обрезаю нужную часть, но я не получаю правильные значения цвета.

как будто у меня была красная толстовка, но ценности, которые я получаю, R = 21, G = 21, B = 102 Поэтому я использовал веб-сайт онлайн: https://www.rapidtables.com/web/color/RGB_Color.html#rgb-format

, чтобы убедиться, что значения верны, но я получаю неправильные значения R = 21 G = 21 B = 102 это какой-то темно-синий. Поэтому я не уверен, что делаю неправильно.

видео в формате Format32bppArgb

 public double[,] imageToDoubleArray(Bitmap _image)
    {
        Bitmap b = new Bitmap(_image);

        System.Drawing.Imaging.BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat);//b.PixelFormat);

        /* GetBitsPerPixel just does a switch on the PixelFormat and returns the number */
        byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat);

        /*the size of the image in bytes */
        int size = bData.Stride * bData.Height;

        /*Allocate buffer for image*/
        byte[] data = new byte[size];
        double[,] returndata = new double[_image.Height, _image.Width];
        /*This overload copies data of /size/ into /data/ from location specified (/Scan0/)*/
        System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, data, 0, size);
        int i = 0;
        // looping through the whole array
        for (int y = 0; y < _image.Height; y++)
        {

            for (int x = 0; x < _image.Width; x++)
            {


                double magnitude = 1 / 3d * (data[i] + data[i + 1] + data[i + 2]);

                // make a new color object
                Color t = new Color();
                // now set the color to red, Green and blue
                t = Color.FromArgb(data[i], data[i + 1], data[i + 2]);
                // printing out the colors to the text box
                ColorTxT.Text = Convert.ToString(t);
                returndata[y, x] = magnitude;

                i += bitsPerPixel / 8;
                if (i == data.Length)
                    break;
            }
        }

        return returndata;

    }

Я должен получить красный

...