Porcentaje de color en Bitmap

Comenzó sin saber acerca de bitmap**

To get total pixels in bitmap  height*Width 
To get total white pixels Where R==255 & B==255 & G==255
To get total black pixels Where R==0 & B==0 & G==0
To get total grey pixels where R=G=B

El resto de ellos será de colores mezclados que me darán. Obviamente, el programa se ejecutará miles de veces, así que necesito usar Lockbits.

El problema actual es un resultado inexacto. los pls sugieren. Intentar usar las bibliotecas aforge.net o imagemagick.net para verificar si puede dar resultados precisos

¿Cómo puedo encontrar el porcentaje de píxeles de color en el mapa de bits? Originalmente, el objeto de mapa de bits es de la página PDF. Probé con bitmap.getpixel (). Lleva años, LockBits tiene un mejor rendimiento. Me gustaría saber si usa Lockbits para encontrar el porcentaje de píxeles de color, excepto el negro, el blanco y el gris. Esto es para identificar las páginas en color en el archivo PDF y el uso del color para imprimir una página específica.

Acabo de recibir un código para detectar el recuento de píxeles en blanco y negro, solo trato de utilizar este código para detectar el porcentaje con solo encontrar el total de píxeles y luego la diferencia debería darme píxeles de color, no estoy seguro de que sea correcto Acércate o no !!

 public void ColourPercentage(Bitmap page, ref int nBlackCount, ref int nWhiteCount)
    {
        System.Drawing.Image image = null;
        Bitmap bmpCrop = null;

        BitmapData bmpData = null;
        byte[] imgData = null;
        int n = 0;
        try
        {
            image = page;
            bmpCrop = new Bitmap(image);
            for (int h = 0; h < bmpCrop.Height; h++)
            {

                bmpData = bmpCrop.LockBits(new System.Drawing.Rectangle(0, h, bmpCrop.Width, 1),
                System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat);
                imgData = new byte[bmpData.Stride];
                System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, imgData, 0
                , imgData.Length);
                bmpCrop.UnlockBits(bmpData);

                for (n = 0; n <= imgData.Length - 3; n += 3)
                {
                    if ((int)imgData[n] == 000 && (int)imgData[n + 1] == 0 && (int)imgData[n + 2] == 000)// R=0 G=0 B=0 represents Black
                    {
                        nBlackCount++;
                    }
                    else if ((int)imgData[n] == 255 && (int)imgData[n + 1] == 255 && (int)imgData[n + 2] == 255) //R=255 G=255 B=255 represents White
                    {
                        nWhiteCount++;
                    }
                    else if ((int)imgData[n] == (int)imgData[n + 1] && (int)imgData[n + 1] == (int)imgData[n + 2])
                        nBlackCount++;
                }

            }

        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message);
        }     
    }
  public void blackwhiteCount(Bitmap page, ref int nBlackCount, ref int nWhiteCount)
    {
        System.Drawing.Color pixel;
        try
        {
            for (int i = 0; i < page.Height; i++)
            {
                for (int j = 0; j < page.Width; j++)
                {
                    pixel = page.GetPixel(i, j);
                    if (pixel.R == 0 && pixel.G == 0 && pixel.B == 0)
                        nBlackCount++;
                    else if (pixel.R == 255 && pixel.G == 255 && pixel.B == 255)
                        nWhiteCount++;
                }
            }
        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show("Unable to parse image " + ex);
        }
    }
ColourPercentage(page, ref nblack, ref nwhite);
                             double nTotal = page.Width * page.Height;
                            string blackper, whiteper, colourper;
                            double black =(double) nblack*100 / nTotal;
                            double white =(double) nwhite *100 / nTotal;
                            double colour = 100 - (black + white);

Respuestas a la pregunta(1)

Su respuesta a la pregunta