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); }
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)); }
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); } }
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(); } } } }