Пример #1
0
        private void Blur(Panel panel, PictureBox p)
        {
            Bitmap bmp = Screenshot.TakeSnapshot(panel);

            BitmapFilter.GaussianBlur(bmp, 4);

            p.Image = bmp;
            p.BringToFront();
        }
Пример #2
0
        private async void CampoBatalla_LoadAsync(object sender, EventArgs e)
        {
            picxClose.BackgroundImageLayout = ImageLayout.Stretch;

            panel1.BackColor = Color.FromArgb(100, 44, 62, 80);

            await Task.Delay(500);

            Bitmap bmp = Screenshot.TakeSnapshot(panel1);

            BitmapFilter.GaussianBlur(bmp, 4);

            pb.Image = bmp;
            pb.Dock  = DockStyle.Fill;
            pb.BringToFront();
            panel1.Controls.Add(pb);

            troyanos = Con.CargarListaTroyanos();
            griegos  = Con.CargarListaGriego();

            Troyano troyano1 = troyanos[1];
            Griego  griego1  = griegos[1];

            progressBarFuerzaGriego.Maximum = griego1.Fuerza;
            progressBarFuerzaGriego.Value   = griego1.Fuerza;

            progressBarFuerzaTroyano.Maximum = troyano1.Fuerza;
            progressBarFuerzaTroyano.Value   = troyano1.Fuerza;

            lblNumFuerzaG.Text = Convert.ToString(griego1.Fuerza);
            lblNumFuerzaT.Text = Convert.ToString(troyano1.Fuerza);

            string msgGriego =
                "IdGuerrero: " + griego1.IdGuerrero +
                "\nNombre: " + griego1.Nombre +
                "\nEdad: " + griego1.Edad +
                "\nFuerza: " + griego1.Fuerza +
                "\nAtaque: " + griego1.Ataque +
                "\nHerido: " + griego1.Herido +
                "\nMuerto: " + griego1.Muerto;

            string msgTroyano =
                "IdGuerrero: " + troyano1.IdGuerrero +
                "\nNombre: " + troyano1.Nombre +
                "\nEdad: " + troyano1.Edad +
                "\nFuerza: " + troyano1.Fuerza +
                "\nAtaque: " + troyano1.Ataque +
                "\nHerido: " + troyano1.Herido +
                "\nMuerto: " + troyano1.Muerto;



            lblMsgGriego.Text  = msgGriego;
            lblMsgTroyano.Text = msgTroyano;
        }
Пример #3
0
        private void PrepareOsdArea(uint[] dataIn, uint[] dataOut, uint[] dataDebugNoLChD, int width, int height)
        {
            //DebugPrepareOsdArea(dataIn, dataOut, width, height);
            //return;

            // Split into fields only in the region where IOTA-VTI could be, Then threat as two separate images, and for each of them do:
            // 1) Gaussian blur (small) BitmapFilter.LOW_PASS_FILTER_MATRIX
            // 2) Sharpen BitmapFilter.SHARPEN_MATRIX
            // 3) Binarize - get Average, all below change to 0, all above change to Max (256)
            // 4) De-noise BitmapFilter.DENOISE_MATRIX

            if (m_UseNativePreProcessing)
            {
                TangraCore.PrepareImageForOCR(dataIn, dataOut, width, height);
            }
            else
            {
                uint median = dataIn.Median();
                for (int i = 0; i < dataIn.Length; i++)
                {
                    int darkCorrectedValue = (int)dataIn[i] - (int)median;
                    if (darkCorrectedValue < 0)
                    {
                        darkCorrectedValue = 0;
                    }
                    dataIn[i] = (uint)darkCorrectedValue;
                }

                uint[] blurResult = BitmapFilter.GaussianBlur(dataIn, 8, width, height);

                uint   average       = 128;
                uint[] sharpenResult = BitmapFilter.Sharpen(blurResult, 8, width, height, out average);

                // Binerize and Inverse
                for (int i = 0; i < sharpenResult.Length; i++)
                {
                    sharpenResult[i] = sharpenResult[i] > average ? (uint)0 : (uint)255;
                }

                uint[] denoised = BitmapFilter.Denoise(sharpenResult, 8, width, height, out average, false);

                for (int i = 0; i < denoised.Length; i++)
                {
                    dataOut[i] = denoised[i] < 127 ? (uint)0 : (uint)255;
                }

                Array.Copy(dataOut, dataDebugNoLChD, dataOut.Length);

                LargeChunkDenoiser.Process(false, dataOut, width, height);
            }
        }
Пример #4
0
        void takeScreenShot()
        {
            this.Opacity = 0;
            this.Refresh();
            Bitmap temp = GetScreenBitmap(this.Width, this.Height, this.Location.X, this.Location.Y);

            this.Opacity = 100;
            this.Refresh();
            for (int i = 0; i < blurAmount; i++)
            {
                BitmapFilter.GaussianBlur(temp, 4);
            }
            this.pictureBox1.Image = temp;
            this.pictureBox1.Refresh();
        }
Пример #5
0
 private void button1_Click(object sender, EventArgs e)
 {
     BitmapFilter.Contrast(pirst, 100);
     progressBar1.Value += 2;
     BitmapFilter.GaussianBlur(pirst, 10);
     progressBar1.Value += 3;
     BitmapFilter.GrayScale(pirst);
     progressBar1.Value += 2;
     BitmapFilter.Threshold(ref pirst, ref sekond, 235);
     progressBar1.Value += 15;
     read();
     label1.Text       = "Done";
     pictureBox2.Image = sekond;
     show();
 }
Пример #6
0
 protected override void OnPaint(PaintEventArgs e)
 {
     if (_points != null)
     {
         //first get max count to even the spread.
         int max = 0;
         foreach (KeyValuePair <Point, int> p in _points)
         {
             if (p.Value > max)
             {
                 max = p.Value;
             }
         }
         //linear spread for colors - blue = cold, yellow = warm, red = hot
         Brush[] brushes = new Brush[max];
         for (int i = 1; i <= max; i++)
         {
             brushes[i - 1] = new SolidBrush(ComputeColor((float)i / max));
         }
         //paint the dots!
         using (Bitmap b = new Bitmap(Width, Height, e.Graphics))
         {
             Graphics g = Graphics.FromImage(b);
             g.Clear(Color.Blue);
             //draw all, lowest first, then to highest
             for (int i = 1; i <= max; i++)
             {
                 foreach (KeyValuePair <Point, int> p in _points)
                 {
                     if (p.Value == i)
                     {
                         g.FillEllipse(brushes[p.Value - 1], p.Key.X - HALF_CIRCLE_SIZE, p.Key.Y - HALF_CIRCLE_SIZE, CIRCLE_SIZE, CIRCLE_SIZE);
                     }
                 }
             }
             //blur the hell outta it
             BitmapFilter.GaussianBlur(b, 10);
             BitmapFilter.GaussianBlur(b, 10);
             BitmapFilter.GaussianBlur(b, 10);
             BitmapFilter.GaussianBlur(b, 10);
             BitmapFilter.GaussianBlur(b, 10);
             BitmapFilter.GaussianBlur(b, 10);
             //draw it on the form
             e.Graphics.DrawImage(b, new Point(0, 0));
         }
     }
 }
Пример #7
0
        private async void NuevoGuerrero_LoadAsync(object sender, EventArgs e)
        {
            BackgroundImageLayout = ImageLayout.Stretch;

            panel1.BackColor = Color.FromArgb(100, 44, 62, 80);

            await Task.Delay(500);

            Bitmap bmp = Screenshot.TakeSnapshot(panel1);

            BitmapFilter.GaussianBlur(bmp, 4);

            pb.Image = bmp;
            pb.Dock  = DockStyle.Fill;
            pb.BringToFront();
            panel1.Controls.Add(pb);
        }
Пример #8
0
        private async void Index_LoadAsync(object sender, EventArgs e)
        {
            btnHistoricoPartidos.Enabled = false;
            btnHistoricoPartidos.Visible = false;

            BackgroundImageLayout = ImageLayout.Stretch;

            panel1.BackColor = Color.FromArgb(100, 44, 62, 80);

            await Task.Delay(500);

            Bitmap bmp = Screenshot.TakeSnapshot(panel1);

            BitmapFilter.GaussianBlur(bmp, 4);

            pb.Image = bmp;
            pb.Dock  = DockStyle.Fill;
            pb.BringToFront();
            panel1.Controls.Add(pb);
        }
Пример #9
0
        private bool LocateTimestampPosition(uint[] data, int frameWidth, int frameHeight)
        {
            uint[] preProcessedPixels = new uint[data.Length];
            Array.Copy(data, preProcessedPixels, data.Length);

            // Process the image
            uint median = preProcessedPixels.Median();

            for (int i = 0; i < preProcessedPixels.Length; i++)
            {
                int darkCorrectedValue = (int)preProcessedPixels[i] - (int)median;
                if (darkCorrectedValue < 0)
                {
                    darkCorrectedValue = 0;
                }
                preProcessedPixels[i] = (uint)darkCorrectedValue;
            }

            if (median > 250)
            {
                //InitiazliationError = "The background is too bright.";
                return(false);
            }

            uint[] blurResult = BitmapFilter.GaussianBlur(preProcessedPixels, 8, frameWidth, frameHeight);
            uint   average    = 128;

            uint[] sharpenResult = BitmapFilter.Sharpen(blurResult, 8, frameWidth, frameHeight, out average);

            // Binerize and Inverse
            for (int i = 0; i < sharpenResult.Length; i++)
            {
                sharpenResult[i] = sharpenResult[i] > average ? (uint)0 : (uint)255;
            }
            uint[] denoised = BitmapFilter.Denoise(sharpenResult, 8, frameWidth, frameHeight, out average, false);

            for (int i = 0; i < denoised.Length; i++)
            {
                preProcessedPixels[i] = denoised[i] < 127 ? (uint)0 : (uint)255;
            }

            int bestBottomPosition = -1;
            int bestTopPosition    = -1;

            LocateTopAndBottomLineOfTimestamp(
                preProcessedPixels,
                frameWidth,
                frameHeight / 2 + 1,
                frameHeight,
                out bestTopPosition,
                out bestBottomPosition);

            if (bestBottomPosition - bestTopPosition < 10 || bestBottomPosition - bestTopPosition > 60 || bestTopPosition < 0 || bestBottomPosition > frameHeight)
            {
                return(false);
            }

            int fromLine = bestTopPosition - 1;
            int toLine   = bestBottomPosition + 3;

            if (toLine > frameHeight)
            {
                toLine = frameHeight - 2;
            }

            if ((toLine - fromLine) % 2 == 1)
            {
                if (fromLine % 2 == 1)
                {
                    fromLine--;
                }
                else
                {
                    toLine++;
                }
            }

            #region We need to make sure that the two fields have the same top and bottom lines

            // Create temporary arrays so the top/bottom position per field can be further refined
            int    fieldAreaHeight             = (toLine - fromLine) / 2;
            int    fieldAreaWidth              = frameWidth;
            uint[] oddFieldPixelsPreProcessed  = new uint[frameWidth * fieldAreaHeight];
            uint[] evenFieldPixelsPreProcessed = new uint[frameWidth * fieldAreaHeight];

            int[] DELTAS       = new int[] { 0, -1, 1 };
            int   fromLineBase = fromLine;
            int   toLineBase   = toLine;
            bool  matchFound   = false;

            for (int deltaIdx = 0; deltaIdx < DELTAS.Length; deltaIdx++)
            {
                fromLine = fromLineBase + DELTAS[deltaIdx];
                toLine   = toLineBase + DELTAS[deltaIdx];

                int bestBottomPositionOdd  = -1;
                int bestTopPositionOdd     = -1;
                int bestBottomPositionEven = -1;
                int bestTopPositionEven    = -1;

                LocateTopAndBottomLineOfTimestamp(
                    oddFieldPixelsPreProcessed,
                    fieldAreaWidth, 1, fieldAreaHeight - 1,
                    out bestTopPositionOdd, out bestBottomPositionOdd);

                LocateTopAndBottomLineOfTimestamp(
                    evenFieldPixelsPreProcessed,
                    fieldAreaWidth, 1, fieldAreaHeight - 1,
                    out bestTopPositionEven, out bestBottomPositionEven);

                if (bestBottomPositionOdd == bestBottomPositionEven &&
                    bestTopPositionOdd == bestTopPositionEven)
                {
                    matchFound = true;
                    fromLine   = fromLineBase;
                    toLine     = toLineBase;

                    break;
                }
            }
            #endregion

            if (matchFound)
            {
                UpdateVtiOsdPositions(fromLine, toLine);
            }

            return(matchFound);
        }
Пример #10
0
        private void DebugPrepareOsdArea(uint[] dataIn, uint[] dataOut, int width, int height)
        {
            // NOTE: Because of different rounding in C++ and C# there may be a difference of "1" between pixels

            uint[] nativeIn      = new uint[dataIn.Length];
            uint[] nativeOut     = new uint[dataOut.Length];
            uint   nativeAverage = 0;

            for (int i = 0; i < dataIn.Length; i++)
            {
                nativeIn[i] = dataIn[i];
            }

            uint median = dataIn.Median();

            for (int i = 0; i < dataIn.Length; i++)
            {
                int darkCorrectedValue = (int)dataIn[i] - (int)median;
                if (darkCorrectedValue < 0)
                {
                    darkCorrectedValue = 0;
                }
                dataIn[i] = (uint)darkCorrectedValue;
            }

            TangraCore.PrepareImageForOCRSingleStep(nativeIn, nativeOut, width, height, 0, ref nativeAverage);
            Trace.Assert(Math.Abs(median - nativeAverage) <= 1);
            for (int i = 0; i < nativeOut.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - dataIn[i]) <= 1);
            }

            for (int i = 0; i < dataIn.Length; i++)
            {
                nativeIn[i] = dataIn[i];
            }

            uint[] blurResult = BitmapFilter.GaussianBlur(dataIn, 8, width, height);

            TangraCore.PrepareImageForOCRSingleStep(nativeIn, nativeOut, width, height, 1, ref nativeAverage);
            for (int i = 0; i < nativeOut.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - blurResult[i]) <= 1);
            }

            for (int i = 0; i < blurResult.Length; i++)
            {
                nativeIn[i] = blurResult[i];
            }

            uint average = 128;

            uint[] sharpenResult = BitmapFilter.Sharpen(blurResult, 8, width, height, out average);

            TangraCore.PrepareImageForOCRSingleStep(nativeIn, nativeOut, width, height, 2, ref nativeAverage);
            Trace.Assert(Math.Abs(average - nativeAverage) <= 1);
            for (int i = 0; i < nativeOut.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - sharpenResult[i]) <= 1);
            }


            for (int i = 0; i < sharpenResult.Length; i++)
            {
                nativeIn[i] = sharpenResult[i];
            }
            TangraCore.PrepareImageForOCRSingleStep(nativeIn, nativeOut, width, height, 3, ref nativeAverage);

            // Binerize and Inverse
            for (int i = 0; i < sharpenResult.Length; i++)
            {
                sharpenResult[i] = sharpenResult[i] > average ? (uint)0 : (uint)255;
            }

            for (int i = 0; i < nativeOut.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - sharpenResult[i]) <= 1);
            }

            for (int i = 0; i < sharpenResult.Length; i++)
            {
                nativeIn[i] = sharpenResult[i];
            }
            TangraCore.PrepareImageForOCRSingleStep(nativeIn, nativeOut, width, height, 4, ref nativeAverage);

            uint[] denoised = BitmapFilter.Denoise(sharpenResult, 8, width, height, out average, false);

            for (int i = 0; i < denoised.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - denoised[i]) <= 1);
            }

            for (int i = 0; i < denoised.Length; i++)
            {
                nativeIn[i] = denoised[i];
            }
            TangraCore.PrepareImageForOCRSingleStep(nativeIn, nativeOut, width, height, 5, ref nativeAverage);

            for (int i = 0; i < denoised.Length; i++)
            {
                dataOut[i] = denoised[i] < 127 ? (uint)0 : (uint)255;
            }

            for (int i = 0; i < denoised.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - dataOut[i]) <= 1);
            }


            LargeChunkDenoiser.Process(false, dataOut, width, height);
            LargeChunkDenoiser.Process(true, nativeOut, width, height);

            for (int i = 0; i < dataOut.Length; i++)
            {
                Trace.Assert(Math.Abs(nativeOut[i] - dataOut[i]) <= 1);
            }
            for (int i = 0; i < nativeOut.Length; i++)
            {
                dataOut[i] = nativeOut[i];
            }
        }
Пример #11
0
        private bool LocateTimestampPosition(uint[] data)
        {
            uint[] preProcessedPixels = new uint[data.Length];
            Array.Copy(data, preProcessedPixels, data.Length);

            // Process the image
            uint median = preProcessedPixels.Median();

            for (int i = 0; i < preProcessedPixels.Length; i++)
            {
                int darkCorrectedValue = (int)preProcessedPixels[i] - (int)median;
                if (darkCorrectedValue < 0)
                {
                    darkCorrectedValue = 0;
                }
                preProcessedPixels[i] = (uint)darkCorrectedValue;
            }

            if (median > 250)
            {
                InitiazliationError = "The background is too bright.";
                return(false);
            }

            uint[] blurResult = BitmapFilter.GaussianBlur(preProcessedPixels, 8, m_InitializationData.FrameWidth, m_InitializationData.FrameHeight);
            uint   average    = 128;

            uint[] sharpenResult = BitmapFilter.Sharpen(blurResult, 8, m_InitializationData.FrameWidth, m_InitializationData.FrameHeight, out average);

            // Binerize and Inverse
            for (int i = 0; i < sharpenResult.Length; i++)
            {
                sharpenResult[i] = sharpenResult[i] > average ? (uint)0 : (uint)255;
            }
            uint[] denoised = BitmapFilter.Denoise(sharpenResult, 8, m_InitializationData.FrameWidth, m_InitializationData.FrameHeight, out average, false);

            for (int i = 0; i < denoised.Length; i++)
            {
                preProcessedPixels[i] = denoised[i] < 127 ? (uint)0 : (uint)255;
            }

            int bestBottomPosition = -1;
            int bestTopPosition    = -1;

            LocateTopAndBottomLineOfTimestamp(
                preProcessedPixels,
                m_InitializationData.FrameWidth,
                m_InitializationData.FrameHeight / 2 + 1,
                m_InitializationData.FrameHeight,
                out bestTopPosition,
                out bestBottomPosition);

            if (bestBottomPosition - bestTopPosition < 10 || bestBottomPosition - bestTopPosition > 60)
            {
                bool tryBestTopAndLastLine = m_InitializationData.FrameHeight - bestTopPosition > 10 && m_InitializationData.FrameHeight - bestTopPosition < 60;

                if (tryBestTopAndLastLine)
                {
                    bestBottomPosition = m_InitializationData.FrameHeight - 1;
                }
                else
                {
                    if (m_ForceErrorReport)
                    {
                        if (m_ForceErrorReport &&
                            !m_CalibrationImages.ContainsKey("LocateTimestampPositionOrg.bmp"))
                        {
                            uint[] pixelsOriginal = new uint[data.Length];
                            Array.Copy(data, pixelsOriginal, data.Length);
                            AddErrorImage("LocateTimestampPositionOrg.bmp", pixelsOriginal, 0, 0);

                            uint[] pixelsPreProcessed = new uint[data.Length];
                            Array.Copy(preProcessedPixels, pixelsPreProcessed, data.Length);
                            AddErrorImage("LocateTimestampPositionProcessed.bmp", pixelsPreProcessed, 0, 0);
                        }
                    }

                    InitiazliationError = "Cannot locate the OSD timestamp on the frame.";
                    return(false);
                }
            }

            m_FromLine = bestTopPosition - 10;
            m_ToLine   = bestBottomPosition + 10;
            if (m_ToLine > m_InitializationData.FrameHeight)
            {
                m_ToLine = m_InitializationData.FrameHeight - 2;
            }

            if ((m_ToLine - m_FromLine) % 2 == 1)
            {
                if (m_FromLine % 2 == 1)
                {
                    m_FromLine--;
                }
                else
                {
                    m_ToLine++;
                }
            }

            #region We need to make sure that the two fields have the same top and bottom lines

            // Create temporary arrays so the top/bottom position per field can be further refined
            m_FieldAreaHeight             = (m_ToLine - m_FromLine) / 2;
            m_FieldAreaWidth              = m_InitializationData.FrameWidth;
            m_OddFieldPixels              = new uint[m_InitializationData.FrameWidth * m_FieldAreaHeight];
            m_EvenFieldPixels             = new uint[m_InitializationData.FrameWidth * m_FieldAreaHeight];
            m_OddFieldPixelsPreProcessed  = new uint[m_InitializationData.FrameWidth * m_FieldAreaHeight];
            m_EvenFieldPixelsPreProcessed = new uint[m_InitializationData.FrameWidth * m_FieldAreaHeight];
            m_OddFieldPixelsDebugNoLChD   = new uint[m_InitializationData.FrameWidth * m_FieldAreaHeight];
            m_EvenFieldPixelsDebugNoLChD  = new uint[m_InitializationData.FrameWidth * m_FieldAreaHeight];

            int[] DELTAS       = new int[] { 0, -1, 1 };
            int   fromLineBase = m_FromLine;
            int   toLineBase   = m_ToLine;

            PrepareOsdVideoFields(data);

            for (int deltaIdx = 0; deltaIdx < DELTAS.Length; deltaIdx++)
            {
                m_FromLine = fromLineBase + DELTAS[deltaIdx];
                m_ToLine   = toLineBase + DELTAS[deltaIdx];

                int bestBottomPositionOdd  = -1;
                int bestTopPositionOdd     = -1;
                int bestBottomPositionEven = -1;
                int bestTopPositionEven    = -1;

                LocateTopAndBottomLineOfTimestamp(
                    m_OddFieldPixelsPreProcessed,
                    m_FieldAreaWidth, 1, m_FieldAreaHeight - 1,
                    out bestTopPositionOdd, out bestBottomPositionOdd);

                LocateTopAndBottomLineOfTimestamp(
                    m_EvenFieldPixelsPreProcessed,
                    m_FieldAreaWidth, 1, m_FieldAreaHeight - 1,
                    out bestTopPositionEven, out bestBottomPositionEven);

                if (bestBottomPositionOdd == bestBottomPositionEven &&
                    bestTopPositionOdd == bestTopPositionEven)
                {
                    m_FromLine = fromLineBase;
                    m_ToLine   = toLineBase;

                    break;
                }
            }
            #endregion

            m_TVSafeModeGuess = m_ToLine + (m_ToLine - m_FromLine) / 2 < m_InitializationData.FrameHeight;

            return(true);
        }
Пример #12
0
        public FImageTest()
        {
            InitializeComponent();

            Invert.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Invert(image);
                return(image);
            };

            Gray.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.GrayScale(image);
                return(image);
            };

            Brightness.OnGetImage += (value) =>
            {
                var bright = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Brightness(bright, value);
                return(bright);
            };

            Contrast.OnGetImage += (value) =>
            {
                var c = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Contrast(c, (sbyte)value);
                return(c);
            };

            var g = Properties.Resources.sample.Clone() as Bitmap;

            BitmapFilter.Gamma(g, RTracBar.Value, GTracBar.Value, BTracBar.Value);
            GammaRLabel.Text       = RTracBar.Value.ToString();
            GammaGLabel.Text       = GTracBar.Value.ToString();
            GammaBLabel.Text       = BTracBar.Value.ToString();
            Pict5.Image            = g;
            RTracBar.ValueChanged += (_s, _e) =>
            {
                if (Pict5.Image != null)
                {
                    Pict5.Image.Dispose();
                }
                var g2 = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Gamma(g2, RTracBar.Value, GTracBar.Value, BTracBar.Value);
                Pict5.Image      = g2;
                GammaRLabel.Text = RTracBar.Value.ToString();
            };
            GTracBar.ValueChanged += (_s, _e) =>
            {
                if (Pict5.Image != null)
                {
                    Pict5.Image.Dispose();
                }
                var g2 = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Gamma(g2, RTracBar.Value, GTracBar.Value, BTracBar.Value);
                Pict5.Image      = g2;
                GammaGLabel.Text = GTracBar.Value.ToString();
            };
            BTracBar.ValueChanged += (_s, _e) =>
            {
                if (Pict5.Image != null)
                {
                    Pict5.Image.Dispose();
                }
                var g2 = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Gamma(g2, RTracBar.Value, GTracBar.Value, BTracBar.Value);
                Pict5.Image      = g2;
                GammaBLabel.Text = BTracBar.Value.ToString();
            };

            Smooth.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Smooth(image, value);
                return(image);
            };

            Blur.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.GaussianBlur(image, value);
                return(image);
            };

            Removal.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.MeanRemoval(image, value);
                return(image);
            };

            Ave.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.ave(image, value);
                return(image);
            };

            Sharpen.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Sharpen(image, value);
                return(image);
            };

            Emboss.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.EmbossLaplacian(image);
                return(image);
            };

            Edge.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.EdgeDetectQuick(image);
                return(image);
            };

            Median.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.MedianFilter(image);
                return(image);
            };

            Kuwahara.OnGetImage += (value) =>
            {
                var image = Properties.Resources.sample.Clone() as Bitmap;
                BitmapFilter.Kuwahara(image, value);
                return(image);
            };
        }