public TiffRgb24 ConvertToRgb24(byte y, byte cb, byte cr) { CodingRangeExpander expanderY = _expanderY; CodingRangeExpander expanderCb = _expanderCb; CodingRangeExpander expanderCr = _expanderCr; YCbCrToRgbConverter converter = _converterFrom; float y64 = expanderY.Expand(y); float cb64 = expanderCb.Expand(cb); float cr64 = expanderCr.Expand(cr); TiffRgb24 pixel = default; // TODO: SkipInit converter.Convert(y64, cb64, cr64, ref pixel); return(pixel); }
public YCbCrConverter(Rational[] referenceBlackAndWhite, Rational[] coefficients) { referenceBlackAndWhite ??= DefaultReferenceBlackWhite; coefficients ??= DefaultLuma; if (referenceBlackAndWhite.Length != 6) { TiffThrowHelper.ThrowImageFormatException("reference black and white array should have 6 entry's"); } if (coefficients.Length != 3) { TiffThrowHelper.ThrowImageFormatException("luma coefficients array should have 6 entry's"); } this.yExpander = new CodingRangeExpander(referenceBlackAndWhite[0], referenceBlackAndWhite[1], 255); this.cbExpander = new CodingRangeExpander(referenceBlackAndWhite[2], referenceBlackAndWhite[3], 127); this.crExpander = new CodingRangeExpander(referenceBlackAndWhite[4], referenceBlackAndWhite[5], 127); this.converter = new YCbCrToRgbConverter(coefficients[0], coefficients[1], coefficients[2]); }
public void Rgb_ConvertToYCbCrAndBack_SameResult() { var rgb = new RgbPixel(50, 150, 255); var yCbCr = RgbToYCbCrConverter.Convert(rgb); var newRgb = YCbCrToRgbConverter.Convert(yCbCr); }