コード例 #1
0
        /// <summary>
        /// Retrieve all values from an image based on channel
        /// </summary>
        /// <param name="img">Image to analyze</param>
        /// <param name="channel">Color channel to extract</param>
        /// <param name="updateUi">Callback to monitor progress</param>
        /// <returns></returns>
        public static int[,] GetChannel(Bitmap img, DetectorChannel channel, FrmMain.UpdateUi updateUi)
        {
            int[,] levels = new int[img.Width, img.Height];
            int rx = 299;
            int gx = 587;
            int bx = 114;

            switch (channel)
            {
            case DetectorChannel.None:
                // Invalid setting!
                return(null);

            case DetectorChannel.Brightness:
                break;

            case DetectorChannel.Red:
                rx = 1000;
                gx = 0;
                bx = 0;
                break;

            case DetectorChannel.Green:
                rx = 0;
                gx = 1000;
                bx = 0;
                break;

            case DetectorChannel.Blue:
                rx = 0;
                gx = 0;
                bx = 1000;
                break;

            case DetectorChannel.RedGreen:
                rx = 400;
                gx = 600;
                bx = 0;
                break;

            case DetectorChannel.RedBlue:
                rx = 700;
                gx = 0;
                bx = 300;
                break;

            case DetectorChannel.GreenBlue:
                rx = 0;
                gx = 700;
                bx = 300;
                break;

            case DetectorChannel.Hue:
                for (int y = 0; y < img.Height; y++)
                {
                    for (int x = 0; x < img.Width; x++)
                    {
                        Color rgb = img.GetPixel(x, y);

                        levels[x, y] = (int)(rgb.GetHue() * 10000f);
                    }

                    updateUi(y * 50 / img.Height);
                }

                return(levels);
            }

            // Generic transform (all except hue)
            for (int y = 0; y < img.Height; y++)
            {
                for (int x = 0; x < img.Width; x++)
                {
                    Color rgb = img.GetPixel(x, y);

                    levels[x, y] = rx * rgb.R + gx * rgb.G + bx * rgb.B;
                }

                updateUi(y * 50 / img.Height);
            }

            return(levels);
        }
コード例 #2
0
 public DetectorParams()
 {
     Detector  = null;
     Threshold = 0;
     Channel   = DetectorChannel.None;
 }