コード例 #1
0
        private TransformationRGBtoLUV getLUVbyColor(Color color)
        {
            TransformationRGBtoLUV trans = new TransformationRGBtoLUV(Convert.ToString(color.R),
                                                                      Convert.ToString(color.G), Convert.ToString(color.B));

            return(trans);
        }
コード例 #2
0
        private TransformationRGBtoLUV getDef(TransformationRGBtoLUV oldColor, TransformationRGBtoLUV newColor)
        {
            TransformationRGBtoLUV def = new TransformationRGBtoLUV("0", "0", "0");

            def.setL(oldColor.getL() - newColor.getL());
            def.setU(oldColor.getU() - newColor.getU());
            def.setV(oldColor.getV() - newColor.getV());
            return(def);
        }
コード例 #3
0
        private bool isChangedPixel(TransformationRGBtoLUV pixel, TransformationRGBtoLUV newLUV, int senset)
        {
            double def1 = Math.Pow((pixel.getL() - newLUV.getL()), 2);
            double def2 = Math.Pow(pixel.getU() - newLUV.getU(), 2);
            double def3 = Math.Pow(pixel.getV() - newLUV.getV(), 2);

            double def = Math.Pow(def1 + def2 + def3, 0.5);

            if (def < senset)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #4
0
        private void processButton_Click(object sender, EventArgs e)
        {
            if (isOpenImage)
            {
                this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
                Bitmap layerOrig = (Bitmap)pbOriginalImage.Image;
                Bitmap layerNew  = new Bitmap(layerOrig.Width, layerOrig.Height);
                processButton.Enabled     = false;
                chooseColorButton.Enabled = false;

                progressBar1.Maximum = layerOrig.Height - 1;

                TransformationRGBtoLUV oldLUV = getLUVbyColor(pbOldColor.BackColor);
                TransformationRGBtoLUV newLUV = getLUVbyColor(pbNewColor.BackColor);
                TransformationRGBtoLUV defLUV = getDef(oldLUV, newLUV);

                for (int y = 0; y < layerOrig.Height; y++)
                {
                    for (int x = 0; x < layerOrig.Width; x++)
                    {
                        Color pixel = layerOrig.GetPixel(x, y);

                        TransformationRGBtoLUV pixelLUV = getLUVbyColor(pixel);

                        if (isChangedPixel(pixelLUV, oldLUV, sensetiveTrackBar.Value))
                        {
                            layerNew.SetPixel(x, y, findNewPixel(pixelLUV, defLUV));
                        }
                        else
                        {
                            layerNew.SetPixel(x, y, pixel);
                        }

                        pbNewImage.Image = layerNew;
                    }
                    progressBar1.Value = y;
                }

                this.Cursor               = System.Windows.Forms.Cursors.Default;
                processButton.Enabled     = true;
                chooseColorButton.Enabled = true;
            }
        }
コード例 #5
0
        private Color findNewPixel(TransformationRGBtoLUV pixelLUV, TransformationRGBtoLUV def)
        {
            TransformationRGBtoLUV newPixel = new TransformationRGBtoLUV("0", "0", "0");

            newPixel.setL(pixelLUV.getL() - def.getL());
            newPixel.setU(pixelLUV.getU() - def.getU());
            newPixel.setV(pixelLUV.getV() - def.getV());

            TransformationLUVtoRGB newPixelRGB = new TransformationLUVtoRGB(Convert.ToString(newPixel.getL()),
                                                                            Convert.ToString(newPixel.getU()), Convert.ToString(newPixel.getV()));

            int red   = newPixelRGB.getRed();
            int green = newPixelRGB.getGreen();
            int blue  = newPixelRGB.getBlue();

            if (red < 0)
            {
                red = 0;
            }
            else if (red > 255)
            {
                red = 255;
            }
            if (blue < 0)
            {
                blue = 0;
            }
            else if (blue > 255)
            {
                blue = 255;
            }
            if (green < 0)
            {
                green = 0;
            }
            else if (green > 255)
            {
                green = 255;
            }
            Color pix = Color.FromArgb(255, red, green, blue);

            return(pix);
        }