示例#1
0
        public void filterMedianImage(int size = 3)
        {
            int borders = size / 2;

            if (img != null)
            {
                List <PixelClassRGB> sorted;
                for (int x = size - 2; x < img.GetLength(0) - borders; x++)
                {
                    for (int y = size - 2; y < img.GetLength(1) - borders; y++)
                    {
                        List <PixelClassRGB> pixels = new List <PixelClassRGB>();
                        for (int fi = 0; fi < size; fi++)
                        {
                            for (int fj = 0; fj < size; fj++)
                            {
                                pixels.Add(img[x - borders + fi, y - borders + fj]);
                            }
                        }
                        sorted            = pixels.OrderBy(o => o.I).ToList();
                        imgChartRGB[x, y] = new PixelClassRGB(sorted[(size * size) / 2 + 1]);
                    }
                }
            }
        }
 public PixelClassRGB(PixelClassRGB toCopy)
 {
     R = toCopy.R;
     G = toCopy.G;
     B = toCopy.B;
     I = toCopy.I;
 }
        public PixelClassRGB yuvToRGB(byte y, byte u, byte v)
        {
            double r = (y + 1.13983 * (v - 128.0));
            double g = (y - 0.39465 * (u - 128.0) - 0.58060 * (v - 128.0));
            double b = (y + 2.03211 * (u - 128.0));

            if (r > 255.0)
            {
                r = 255.0;
            }
            if (r < 0.0)
            {
                r = 0.0;
            }
            if (g > 255.0)
            {
                g = 255.0;
            }
            if (g < 0.0)
            {
                g = 0.0;
            }
            if (b > 255.0)
            {
                b = 255.0;
            }
            if (b < 0.0)
            {
                b = 0.0;
            }

            PixelClassRGB rgbPix = new PixelClassRGB((byte)r, (byte)g, (byte)b);

            return(rgbPix);
        }
        public PixelClassRGB hsvToRGB(int h, byte s, byte v)
        {
            byte r = 0;
            byte g = 0;
            byte b = 0;

            int  Hi   = Convert.ToInt32(h / 60);
            byte Vmin = Convert.ToByte((255 - s) * v / 255);
            int  a    = Convert.ToInt32((v - Vmin) * (h % 60) / 60);
            byte Vinc = Convert.ToByte(Vmin + a);
            byte Vdec = Convert.ToByte(v - a);

            switch (Hi)
            {
            case 0: { r = v; g = Vinc; b = Vmin; break; }

            case 1: { r = Vdec; g = v; b = Vmin; break; }

            case 2: { r = Vmin; g = v; b = Vinc; break; }

            case 3: { r = Vmin; g = Vdec; b = v; break; }

            case 4: { r = Vinc; g = Vmin; b = v; break; }

            case 5: { r = v; g = Vmin; b = Vdec; break; }
            }
            PixelClassRGB rgbPix = new PixelClassRGB(r, g, b);

            return(rgbPix);
        }
示例#5
0
        public void readImage(Bitmap bmp)
        {
            img     = new PixelClassRGB[bmp.Width, bmp.Height];
            imghsv  = new PixelClassHSV[bmp.Width, bmp.Height];
            imgcmyk = new PixelClassCMYK[bmp.Width, bmp.Height];
            imgyuv  = new PixelClassYUV[bmp.Width, bmp.Height];

            imgChartRGB  = new PixelClassRGB[bmp.Width, bmp.Height];
            imgChartCMYK = new PixelClassCMYK[bmp.Width, bmp.Height];
            imgChartHSV  = new PixelClassHSV[bmp.Width, bmp.Height];
            imgChartYUV  = new PixelClassYUV[bmp.Width, bmp.Height];
            histOriginal = new Histogram();
            histEdited   = new Histogram();

            var bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat);

            IntPtr ptr = IntPtr.Zero;
            int    pixelComponents;


            if (bmpData.PixelFormat == PixelFormat.Format24bppRgb)
            {
                pixelComponents = 3;
            }
            else if (bmpData.PixelFormat == PixelFormat.Format32bppArgb)
            {
                pixelComponents = 4;
            }
            else
            {
                pixelComponents = 0;
            }
            var line = new byte[bmp.Width * pixelComponents];

            for (int y = 0; y < bmpData.Height; y++)
            {
                ptr = bmpData.Scan0 + y * bmpData.Stride;
                Marshal.Copy(ptr, line, 0, line.Length);

                for (int x = 0; x < bmpData.Width; x++)
                {
                    img[x, y]     = new PixelClassRGB(line[pixelComponents * x + 2], line[pixelComponents * x + 1], line[pixelComponents * x]);
                    imghsv[x, y]  = new PixelClassHSV(img[x, y].R, img[x, y].G, img[x, y].B);
                    imgcmyk[x, y] = new PixelClassCMYK(img[x, y].R, img[x, y].G, img[x, y].B);
                    imgyuv[x, y]  = new PixelClassYUV(img[x, y].R, img[x, y].G, img[x, y].B);

                    imgChartCMYK[x, y] = new PixelClassCMYK(img[x, y].R, img[x, y].G, img[x, y].B);
                    imgChartRGB[x, y]  = new PixelClassRGB(line[pixelComponents * x + 2], line[pixelComponents * x + 1], line[pixelComponents * x]);
                    imgChartYUV[x, y]  = new PixelClassYUV(img[x, y].R, img[x, y].G, img[x, y].B);
                    imgChartHSV[x, y]  = new PixelClassHSV(img[x, y].R, img[x, y].G, img[x, y].B);

                    img[x, y].X = x - bmpData.Width / 2;
                    img[x, y].Y = y - bmpData.Height / 2;
                }
            }
            bmp.UnlockBits(bmpData);
            histOriginal.readGraph(img);
        }
        public PixelClassRGB cmykToRGB(double c, double m, double y, double k)
        {
            int           r      = (int)(255.0 * (1.0 - c) * (1.0 - k));
            int           g      = (int)(255.0 * (1.0 - m) * (1.0 - k));
            int           b      = (int)(255.0 * (1.0 - y) * (1.0 - k));
            PixelClassRGB rgbPix = new PixelClassRGB((byte)r, (byte)g, (byte)b);

            return(rgbPix);
        }
        public void effectDodge(PixelClassRGB a, PixelClassRGB b)
        {
            double rA = a.R / 255.0 == 1 ? 0 : a.R / 255.0;
            double gA = a.G / 255.0 == 1 ? 0 : a.G / 255.0;
            double bA = a.B / 255.0 == 1 ? 0 : a.B / 255.0;

            R = Convert.ToByte(Math.Max(Math.Min(((b.R / 255.0) / (1 - rA)) * 255.0, 255), 0));
            G = Convert.ToByte(Math.Max(Math.Min(((b.G / 255.0) / (1 - gA)) * 255.0, 255), 0));
            B = Convert.ToByte(Math.Max(Math.Min(((b.B / 255.0) / (1 - bA)) * 255.0, 255), 0));
        }
        public void effectBurn(PixelClassRGB a, PixelClassRGB b)
        {
            double rA = (double)(a.R / 255.0) <= 0 ? 1 : (double)(a.R / 255.0);
            double gA = (double)(a.G / 255.0) <= 0 ? 1 : (double)(a.G / 255.0);
            double bA = (double)(a.B / 255.0) <= 0 ? 1 : (double)(a.B / 255.0);

            double rB = (double)(b.R / 255.0);
            double gB = (double)(b.R / 255.0);
            double bB = (double)(b.R / 255.0);

            R = Convert.ToByte(Math.Max(Math.Min((1 - (1 - rB) / rA) * 255.0, 255), 0));
            G = Convert.ToByte(Math.Max(Math.Min((1 - (1 - gB) / gA) * 255.0, 255), 0));
            B = Convert.ToByte(Math.Max(Math.Min((1 - (1 - bB) / bA) * 255.0, 255), 0));
        }
        public void effectScreen(PixelClassRGB a, PixelClassRGB b)
        {
            double theFirst  = (double)a.R / 255;
            double theSecond = (double)b.R / 255;

            R = Convert.ToByte((1 - (1 - theFirst) * (1 - theSecond)) * 255);

            theFirst  = (double)a.G / 255;
            theSecond = (double)b.G / 255;

            G = Convert.ToByte((1 - (1 - theFirst) * (1 - theSecond)) * 255);

            theFirst  = (double)a.B / 255;
            theSecond = (double)b.B / 255;

            B = Convert.ToByte((1 - (1 - theFirst) * (1 - theSecond)) * 255);
        }
        public void effectLinearDodge(PixelClassRGB a, PixelClassRGB b)
        {
            int r = a.R + b.R;

            if (r > 255)
            {
                r = 255;
            }
            if (r < 0)
            {
                r = 0;
            }

            int g = a.G + b.G;

            if (g > 255)
            {
                g = 255;
            }
            if (g < 0)
            {
                g = 0;
            }

            int bl = a.B + b.B;

            if (bl > 255)
            {
                bl = 255;
            }
            if (bl < 0)
            {
                bl = 0;
            }

            R = (byte)r;
            G = (byte)g;
            B = (byte)bl;
        }
 public void effectOpacity(PixelClassRGB a, PixelClassRGB b, double d)
 {
     R = Convert.ToByte(d * a.R + (1 - d) * b.R);
     G = Convert.ToByte(d * a.G + (1 - d) * b.G);
     B = Convert.ToByte(d * a.B + (1 - d) * b.B);
 }
 public void effectHardLight(PixelClassRGB a, PixelClassRGB b)
 {
     R = Convert.ToByte((double)(a.R / 255.0) <= 0.5 ? (2 * (a.R / 255.0) * (b.R / 255.0) * 255.0) : ((1 - 2 * (1 - a.R / 255.0) * (1 - b.R / 255.0)) * 255.0));
     G = Convert.ToByte((double)(a.G / 255.0) <= 0.5 ? (2 * (a.G / 255.0) * (b.G / 255.0) * 255.0) : ((1 - 2 * (1 - a.G / 255.0) * (1 - b.G / 255.0)) * 255.0));
     B = Convert.ToByte((double)(a.B / 255.0) <= 0.5 ? (2 * (a.B / 255.0) * (b.B / 255.0) * 255.0) : ((1 - 2 * (1 - a.B / 255.0) * (1 - b.B / 255.0)) * 255.0));
 }
 public void effectMultiply(PixelClassRGB a, PixelClassRGB b)
 {
     R = Convert.ToByte((double)(a.R / 255.0 * b.R / 255.0 * 255.0));
     G = Convert.ToByte((double)(a.G / 255.0 * b.G / 255.0 * 255.0));
     B = Convert.ToByte((double)(a.B / 255.0 * b.B / 255.0 * 255.0));
 }
 public void effectLighten(PixelClassRGB a, PixelClassRGB b)
 {
     R = b.R <= a.R ? a.R : b.R;
     G = b.G <= a.G ? a.G : b.G;
     B = b.B <= a.B ? a.B : b.B;
 }
 public void effectDarken(PixelClassRGB a, PixelClassRGB b)
 {
     R = b.R <= a.R ? b.R : a.R;
     G = b.G <= a.G ? b.G : a.G;
     B = b.B <= a.B ? b.B : a.B;
 }
 public void effectDiff(PixelClassRGB a, PixelClassRGB b)
 {
     R = Convert.ToByte(Math.Abs(a.R - b.R));
     G = Convert.ToByte(Math.Abs(a.G - b.G));
     B = Convert.ToByte(Math.Abs(a.B - b.B));
 }
示例#17
0
        public Bitmap drawImage(string mode)
        {
            if (img != null)
            {
                IntPtr ptr     = IntPtr.Zero;
                int    Height  = img.GetLength(1);
                int    Width   = img.GetLength(0);
                var    bmp     = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
                var    bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
                                              ImageLockMode.WriteOnly, bmp.PixelFormat);
                var line = new byte[bmp.Width * 3];

                for (int y = 0; y < bmpData.Height; y++)
                {
                    for (int x = 0; x < bmpData.Width; x++)
                    {
                        switch (mode)
                        {
                        case "transformation":
                        {
                            if (((img[x, y].X + x0) > 0) && ((img[x, y].Y + y0) > 0) &&
                                (((img[x, y].X + x0) < bmpData.Width) && ((img[x, y].Y + y0) < bmpData.Height)))
                            {
                                line[3 * x + 2] = img[img[x, y].X + x0, y0 + img[x, y].Y].R;
                                line[3 * x + 1] = img[img[x, y].X + x0, y0 + img[x, y].Y].G;
                                line[3 * x]     = img[img[x, y].X + x0, y0 + img[x, y].Y].B;
                            }
                            else
                            {
                                line[3 * x + 2] = 0;
                                line[3 * x + 1] = 0;
                                line[3 * x]     = 0;
                            }
                            break;
                        }

                        case "RGB":
                        {
                            line[3 * x]         = img[x, y].B;
                            line[3 * x + 1]     = img[x, y].G;
                            line[3 * x + 2]     = img[x, y].R;
                            imgChartRGB[x, y].B = line[3 * x];
                            imgChartRGB[x, y].G = line[3 * x + 1];
                            imgChartRGB[x, y].R = line[3 * x + 2];
                            imgChartRGB[x, y].I = img[x, y].I;
                            break;
                        }

                        case "R":
                        {
                            line[3 * x]         = 0;
                            line[3 * x + 1]     = 0;
                            line[3 * x + 2]     = img[x, y].R;
                            imgChartRGB[x, y].B = 0;
                            imgChartRGB[x, y].G = 0;
                            imgChartRGB[x, y].R = img[x, y].R;
                            imgChartRGB[x, y].I = 0;
                            break;
                        }

                        case "G":
                        {
                            line[3 * x]         = 0;
                            line[3 * x + 1]     = img[x, y].G;
                            line[3 * x + 2]     = 0;
                            imgChartRGB[x, y].B = 0;
                            imgChartRGB[x, y].G = img[x, y].G;
                            imgChartRGB[x, y].R = 0;
                            imgChartRGB[x, y].I = 0;
                            break;
                        }

                        case "B":
                        {
                            line[3 * x]         = img[x, y].B;
                            line[3 * x + 1]     = 0;
                            line[3 * x + 2]     = 0;
                            imgChartRGB[x, y].B = img[x, y].B;
                            imgChartRGB[x, y].G = 0;
                            imgChartRGB[x, y].R = 0;
                            imgChartRGB[x, y].I = 0;
                            break;
                        }

                        case "I":
                        {
                            line[3 * x]         = img[x, y].I;
                            line[3 * x + 1]     = img[x, y].I;
                            line[3 * x + 2]     = img[x, y].I;
                            imgChartRGB[x, y].B = 0;
                            imgChartRGB[x, y].G = 0;
                            imgChartRGB[x, y].R = 0;
                            imgChartRGB[x, y].I = img[x, y].I;
                            break;
                        }

                        case "Invert":
                        {
                            line[3 * x]       = Convert.ToByte(255 - img[x, y].B);
                            line[3 * x + 1]   = Convert.ToByte(255 - img[x, y].G);
                            line[3 * x + 2]   = Convert.ToByte(255 - img[x, y].R);
                            imgChartRGB[x, y] = new PixelClassRGB(line[3 * x], line[3 * x + 1], line[3 * x + 2]);
                            break;
                        }

                        case "Strech":
                        {
                            line[3 * x]     = imgChartRGB[x, y].B;
                            line[3 * x + 1] = imgChartRGB[x, y].G;
                            line[3 * x + 2] = imgChartRGB[x, y].R;
                            break;
                        }

                        case "transition":
                        {
                            line[3 * x]     = img[x, y].B;
                            line[3 * x + 1] = img[x, y].G;
                            line[3 * x + 2] = img[x, y].R;
                            break;
                        }

                        case "Strech R":
                        {
                            line[3 * x]     = 0;
                            line[3 * x + 1] = 0;
                            line[3 * x + 2] = imgChartRGB[x, y].R;
                            break;
                        }

                        case "Strech G":
                        {
                            line[3 * x]     = 0;
                            line[3 * x + 1] = imgChartRGB[x, y].G;
                            line[3 * x + 2] = 0;
                            break;
                        }

                        case "Strech B":
                        {
                            line[3 * x]     = imgChartRGB[x, y].B;
                            line[3 * x + 1] = 0;
                            line[3 * x + 2] = 0;
                            break;
                        }

                        case "Strech I":
                        {
                            line[3 * x]     = imgChartRGB[x, y].I;
                            line[3 * x + 1] = imgChartRGB[x, y].I;
                            line[3 * x + 2] = imgChartRGB[x, y].I;
                            break;
                        }

                        case "HSV":
                        {
                            line[3 * x]       = img[x, y].hsvToRGB(imghsv[x, y].H, imghsv[x, y].S, imghsv[x, y].V).B;
                            line[3 * x + 1]   = img[x, y].hsvToRGB(imghsv[x, y].H, imghsv[x, y].S, imghsv[x, y].V).G;
                            line[3 * x + 2]   = img[x, y].hsvToRGB(imghsv[x, y].H, imghsv[x, y].S, imghsv[x, y].V).R;
                            imgChartHSV[x, y] = new PixelClassHSV(imghsv[x, y]);
                            break;
                        }

                        case "Strech HSV":
                        {
                            line[3 * x]     = img[x, y].hsvToRGB(imgChartHSV[x, y].H, imgChartHSV[x, y].S, imgChartHSV[x, y].V).B;
                            line[3 * x + 1] = img[x, y].hsvToRGB(imgChartHSV[x, y].H, imgChartHSV[x, y].S, imgChartHSV[x, y].V).G;
                            line[3 * x + 2] = img[x, y].hsvToRGB(imgChartHSV[x, y].H, imgChartHSV[x, y].S, imgChartHSV[x, y].V).R;
                            break;
                        }

                        case "Strech S":
                        {
                            line[3 * x]     = imgChartHSV[x, y].S;
                            line[3 * x + 1] = imgChartHSV[x, y].S;
                            line[3 * x + 2] = imgChartHSV[x, y].S;
                            break;
                        }

                        case "H":
                        {
                            line[3 * x]       = img[x, y].hsvToRGB(imghsv[x, y].H, 255, 255).B;
                            line[3 * x + 1]   = img[x, y].hsvToRGB(imghsv[x, y].H, 255, 255).G;
                            line[3 * x + 2]   = img[x, y].hsvToRGB(imghsv[x, y].H, 255, 255).R;
                            imgChartHSV[x, y] = new PixelClassHSV(imghsv[x, y].H, 0, 0, 0);
                            break;
                        }

                        case "S":
                        {
                            line[3 * x]       = imghsv[x, y].S;
                            line[3 * x + 1]   = imghsv[x, y].S;
                            line[3 * x + 2]   = imghsv[x, y].S;
                            imgChartHSV[x, y] = new PixelClassHSV(0, imghsv[x, y].S, 0, 0);
                            break;
                        }

                        case "V":
                        {
                            line[3 * x]       = imghsv[x, y].V;
                            line[3 * x + 1]   = imghsv[x, y].V;
                            line[3 * x + 2]   = imghsv[x, y].V;
                            imgChartHSV[x, y] = new PixelClassHSV(0, 0, imghsv[x, y].V, 0);
                            break;
                        }

                        case "CMYK":
                        {
                            line[3 * x]        = img[x, y].cmykToRGB(imgcmyk[x, y].C, imgcmyk[x, y].M, imgcmyk[x, y].Y, imgcmyk[x, y].K).B;
                            line[3 * x + 1]    = img[x, y].cmykToRGB(imgcmyk[x, y].C, imgcmyk[x, y].M, imgcmyk[x, y].Y, imgcmyk[x, y].K).G;
                            line[3 * x + 2]    = img[x, y].cmykToRGB(imgcmyk[x, y].C, imgcmyk[x, y].M, imgcmyk[x, y].Y, imgcmyk[x, y].K).R;
                            imgChartCMYK[x, y] = new PixelClassCMYK(imgcmyk[x, y]);
                            break;
                        }

                        case "C":
                        {
                            line[3 * x]        = img[x, y].cmykToRGB(imgcmyk[x, y].C, 0, 0, 0).B;
                            line[3 * x + 1]    = img[x, y].cmykToRGB(imgcmyk[x, y].C, 0, 0, 0).G;
                            line[3 * x + 2]    = img[x, y].cmykToRGB(imgcmyk[x, y].C, 0, 0, 0).R;
                            imgChartCMYK[x, y] = new PixelClassCMYK(imgcmyk[x, y].C, 0, 0, 0);

                            break;
                        }

                        case "M":
                        {
                            line[3 * x]        = img[x, y].cmykToRGB(0, imgcmyk[x, y].M, 0, 0).B;
                            line[3 * x + 1]    = img[x, y].cmykToRGB(0, imgcmyk[x, y].M, 0, 0).G;
                            line[3 * x + 2]    = img[x, y].cmykToRGB(0, imgcmyk[x, y].M, 0, 0).R;
                            imgChartCMYK[x, y] = new PixelClassCMYK(0, imgcmyk[x, y].M, 0, 0);
                            break;
                        }

                        case "Y":
                        {
                            line[3 * x]        = img[x, y].cmykToRGB(0, 0, imgcmyk[x, y].Y, 0).B;
                            line[3 * x + 1]    = img[x, y].cmykToRGB(0, 0, imgcmyk[x, y].Y, 0).G;
                            line[3 * x + 2]    = img[x, y].cmykToRGB(0, 0, imgcmyk[x, y].Y, 0).R;
                            imgChartCMYK[x, y] = new PixelClassCMYK(0, 0, imgcmyk[x, y].Y, 0);
                            break;
                        }

                        case "K":
                        {
                            line[3 * x]        = img[x, y].cmykToRGB(0, 0, 0, imgcmyk[x, y].K).B;
                            line[3 * x + 1]    = img[x, y].cmykToRGB(0, 0, 0, imgcmyk[x, y].K).G;
                            line[3 * x + 2]    = img[x, y].cmykToRGB(0, 0, 0, imgcmyk[x, y].K).R;
                            imgChartCMYK[x, y] = new PixelClassCMYK(0, 0, 0, imgcmyk[x, y].K);
                            break;
                        }

                        case "YUV":
                        {
                            line[3 * x]       = img[x, y].yuvToRGB(imgyuv[x, y].Y, imgyuv[x, y].U, imgyuv[x, y].V).B;
                            line[3 * x + 1]   = img[x, y].yuvToRGB(imgyuv[x, y].Y, imgyuv[x, y].U, imgyuv[x, y].V).G;
                            line[3 * x + 2]   = img[x, y].yuvToRGB(imgyuv[x, y].Y, imgyuv[x, y].U, imgyuv[x, y].V).R;
                            imgChartYUV[x, y] = new PixelClassYUV(imgyuv[x, y]);
                            break;
                        }

                        case "Y1":
                        {
                            line[3 * x]       = imgyuv[x, y].Y;
                            line[3 * x + 1]   = imgyuv[x, y].Y;
                            line[3 * x + 2]   = imgyuv[x, y].Y;
                            imgChartYUV[x, y] = new PixelClassYUV(imgyuv[x, y].Y, 0, 0, 0);
                            break;
                        }

                        case "U1":
                        {
                            line[3 * x]       = img[x, y].yuvToRGB(0, imgyuv[x, y].U, 0).B;
                            line[3 * x + 1]   = img[x, y].yuvToRGB(0, imgyuv[x, y].U, 0).G;
                            line[3 * x + 2]   = img[x, y].yuvToRGB(0, imgyuv[x, y].U, 0).R;
                            imgChartYUV[x, y] = new PixelClassYUV(0, imgyuv[x, y].U, 0, 0);
                            break;
                        }

                        case "V1":
                        {
                            line[3 * x]       = img[x, y].yuvToRGB(0, 0, imgyuv[x, y].V).B;
                            line[3 * x + 1]   = img[x, y].yuvToRGB(0, 0, imgyuv[x, y].V).G;
                            line[3 * x + 2]   = img[x, y].yuvToRGB(0, 0, imgyuv[x, y].V).R;
                            imgChartYUV[x, y] = new PixelClassYUV(0, 0, imgyuv[x, y].V, 0);
                            break;
                        }
                        }
                    }
                    ptr = bmpData.Scan0 + y * bmpData.Stride;
                    Marshal.Copy(line, 0, ptr, line.Length);
                }
                bmp.UnlockBits(bmpData);
                switch (mode)
                {
                case "RGB":
                case "R":
                case "G":
                case "B":
                case "I": histEdited.readGraph(imgChartRGB); break;

                case "CMYK":
                case "C":
                case "M":
                case "Y":
                case "K": histEdited.readGraph(imgChartCMYK); break;

                case "HSV":
                case "H":
                case "S":
                case "V": histEdited.readGraph(imgChartHSV); break;

                case "YUV":
                case "Y1":
                case "U1":
                case "V1": histEdited.readGraph(imgChartYUV); break;
                }
                return(bmp);
            }
            else
            {
                return(null);
            }
        }
示例#18
0
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (pictureBox1.Image != null)
            {
                double kX      = (double)pictureBox1.Image.Width / pictureBox1.Width;
                double kY      = (double)pictureBox1.Image.Height / pictureBox1.Height;
                double k       = Math.Max(kX, kY);
                double nobideX = (pictureBox1.Width * k - pictureBox1.Image.Width) / 2;
                double nobideY = (pictureBox1.Height * k - pictureBox1.Image.Height) / 2;
                double kx      = Math.Round(e.X * k - nobideX);
                double ky      = Math.Round(e.Y * k - nobideY);

                label7.Text = "X: " + kx.ToString() + ", Y: " + ky.ToString();

                imgData imgDateObj = new imgData();
                Color[] pixels     = getPixel((int)kx, (int)ky, new Bitmap(pictureBox1.Image), new Bitmap(pictureBox2.Image));
                label2.Text = "R: " + pixels[0].R.ToString();
                label3.Text = "G: " + pixels[0].G.ToString();
                label4.Text = "B: " + pixels[0].B.ToString();

                if (radioButton1.Checked)
                {
                    PixelClassRGB rgbi = new PixelClassRGB(pixels[1].R, pixels[1].G, pixels[1].B);
                    label12.Text = "R: " + rgbi.R.ToString();
                    label11.Text = "G: " + rgbi.G.ToString();
                    label10.Text = "B: " + rgbi.B.ToString();
                    label9.Text  = "I: " + rgbi.I.ToString();
                }
                else if (radioButton2.Checked)
                {
                    if (inverted)
                    {
                        PixelClassHSV hsv = new PixelClassHSV(pixels[1].R, pixels[1].G, pixels[1].B);
                        label12.Text = "H: " + hsv.H.ToString();
                        label11.Text = "S: " + hsv.S.ToString();
                        label10.Text = "V: " + hsv.V.ToString();
                    }
                    else
                    {
                        PixelClassHSV hsv = new PixelClassHSV(pixels[0].R, pixels[0].G, pixels[0].B);
                        label12.Text = "H: " + hsv.H.ToString();
                        label11.Text = "S: " + hsv.S.ToString();
                        label10.Text = "V: " + hsv.V.ToString();
                    }
                }
                else if (radioButton8.Checked)
                {
                    if (inverted)
                    {
                        PixelClassCMYK cmyk = new PixelClassCMYK(pixels[1].R, pixels[1].G, pixels[1].B);
                        label12.Text = "C: " + cmyk.C.ToString();
                        label11.Text = "M: " + cmyk.M.ToString();
                        label10.Text = "Y: " + cmyk.Y.ToString();
                        label9.Text  = "K: " + cmyk.K.ToString();
                    }
                    else
                    {
                        PixelClassCMYK cmyk = new PixelClassCMYK(pixels[0].R, pixels[0].G, pixels[0].B);
                        label12.Text = "C: " + cmyk.C.ToString();
                        label11.Text = "M: " + cmyk.M.ToString();
                        label10.Text = "Y: " + cmyk.Y.ToString();
                        label9.Text  = "K: " + cmyk.K.ToString();
                    }
                }
                else if (radioButton9.Checked)
                {
                    if (inverted)
                    {
                        PixelClassYUV yuv = new PixelClassYUV(pixels[1].R, pixels[1].G, pixels[1].B);
                        label12.Text = "Y: " + yuv.Y.ToString();
                        label11.Text = "U: " + yuv.U.ToString();
                        label10.Text = "V: " + yuv.V.ToString();
                    }
                    else
                    {
                        PixelClassYUV yuv = new PixelClassYUV(pixels[0].R, pixels[0].G, pixels[0].B);
                        label12.Text = "Y: " + yuv.Y.ToString();
                        label11.Text = "U: " + yuv.U.ToString();
                        label10.Text = "V: " + yuv.V.ToString();
                    }
                }
            }
        }