我正在尝试将RGB值转换为YCbCr颜色格式。使用Afroge库。但它给出的结果如下:Y:0.611,Cb:0.15,Cr:-0.18。这意味着所有的值< 1.但我需要0到255之间的值。这是我的代码。
Bitmap bitmap = (Bitmap)pictureBox1.Image;
double xRatio = (double)bitmap.Width / (double)pictureBox1.Width;
double yRatio = (double)bitmap.Height / (double)pictureBox1.Height;
Color gotColor = bitmap.GetPixel((int)((double)mX * xRatio), (int)((double)mY * yRatio));
label1.Text = (" R : " + gotColor.R);
label2.Text = (" G : " + gotColor.G);
label3.Text = (" B : " + gotColor.B);
YCbCr ycrcb = new YCbCr();
RGB rgbcolor = new RGB(gotColor);
ycrcb.Y = YCbCr.FromRGB(rgbcolor).Y;
ycrcb.Cr = YCbCr.FromRGB(rgbcolor).Cr;
ycrcb.Cb = YCbCr.FromRGB(rgbcolor).Cb;
label4.Text = ycrcb.Y.ToString();
label5.Text = ycrcb.Cr.ToString();
label6.Text = ycrcb.Cb.ToString();
请帮帮我。
答案 0 :(得分:1)
这些是YCrCb的标准范围
但是,您可以将结果重新调整为0 - 255范围
label4.Text = (ycrcb.Y *255).ToString();
label5.Text = ((ycrcb.Cr + 0.5)*255).ToString();
label6.Text = ((ycrcb.Cb + 0.5)*255).ToString();
答案 1 :(得分:0)
公式为:
Y = (byte)((0.299 * red) + (0.587 * green) + (0.114 * blue));
Cb = (byte)(128 - (0.168736 * red) + (0.331264 * green) + (0.5 * blue));
Cr = (byte)(128 + (0.5 * red) + (0.418688 * green) + (0.081312 * blue));
你可以使用jpg格式的YCbCr。结果值为betewn 0和255。