init commit
This commit is contained in:
64
output/Libraries/AForge.Imaging/AForge/Imaging/YCbCr.cs
Normal file
64
output/Libraries/AForge.Imaging/AForge/Imaging/YCbCr.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace AForge.Imaging;
|
||||
|
||||
public class YCbCr
|
||||
{
|
||||
public const short YIndex = 0;
|
||||
|
||||
public const short CbIndex = 1;
|
||||
|
||||
public const short CrIndex = 2;
|
||||
|
||||
public float Y;
|
||||
|
||||
public float Cb;
|
||||
|
||||
public float Cr;
|
||||
|
||||
public YCbCr()
|
||||
{
|
||||
}
|
||||
|
||||
public YCbCr(float y, float cb, float cr)
|
||||
{
|
||||
Y = System.Math.Max(0f, System.Math.Min(1f, y));
|
||||
Cb = System.Math.Max(-0.5f, System.Math.Min(0.5f, cb));
|
||||
Cr = System.Math.Max(-0.5f, System.Math.Min(0.5f, cr));
|
||||
}
|
||||
|
||||
public static void FromRGB(RGB rgb, YCbCr ycbcr)
|
||||
{
|
||||
float num = (float)(int)rgb.Red / 255f;
|
||||
float num2 = (float)(int)rgb.Green / 255f;
|
||||
float num3 = (float)(int)rgb.Blue / 255f;
|
||||
ycbcr.Y = (float)(0.2989 * (double)num + 0.5866 * (double)num2 + 0.1145 * (double)num3);
|
||||
ycbcr.Cb = (float)(-0.1687 * (double)num - 0.3313 * (double)num2 + 0.5 * (double)num3);
|
||||
ycbcr.Cr = (float)(0.5 * (double)num - 0.4184 * (double)num2 - 0.0816 * (double)num3);
|
||||
}
|
||||
|
||||
public static YCbCr FromRGB(RGB rgb)
|
||||
{
|
||||
YCbCr yCbCr = new YCbCr();
|
||||
FromRGB(rgb, yCbCr);
|
||||
return yCbCr;
|
||||
}
|
||||
|
||||
public static void ToRGB(YCbCr ycbcr, RGB rgb)
|
||||
{
|
||||
float num = System.Math.Max(0f, System.Math.Min(1f, (float)((double)ycbcr.Y + 0.0 * (double)ycbcr.Cb + 1.4022 * (double)ycbcr.Cr)));
|
||||
float num2 = System.Math.Max(0f, System.Math.Min(1f, (float)((double)ycbcr.Y - 0.3456 * (double)ycbcr.Cb - 0.7145 * (double)ycbcr.Cr)));
|
||||
float num3 = System.Math.Max(0f, System.Math.Min(1f, (float)((double)ycbcr.Y + 1.771 * (double)ycbcr.Cb + 0.0 * (double)ycbcr.Cr)));
|
||||
rgb.Red = (byte)(num * 255f);
|
||||
rgb.Green = (byte)(num2 * 255f);
|
||||
rgb.Blue = (byte)(num3 * 255f);
|
||||
rgb.Alpha = byte.MaxValue;
|
||||
}
|
||||
|
||||
public RGB ToRGB()
|
||||
{
|
||||
RGB rGB = new RGB();
|
||||
ToRGB(this, rGB);
|
||||
return rGB;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user