private TiffYCbCrConverter16(TiffRational[] luma, TiffRational[] referenceBlackWhite) { _expanderY = new CodingRangeExpander(referenceBlackWhite[0], referenceBlackWhite[1], ushort.MaxValue); _expanderCb = new CodingRangeExpander(referenceBlackWhite[2], referenceBlackWhite[3], ushort.MaxValue / 2); _expanderCr = new CodingRangeExpander(referenceBlackWhite[4], referenceBlackWhite[5], ushort.MaxValue / 2); _converterFrom = new YCbCrToRgbConverter(luma[0], luma[1], luma[2]); }
public void ConvertToRgba32(ReadOnlySpan <byte> ycbcr, Span <TiffRgba32> destination, int count) { CodingRangeExpander expanderY = _expanderY; CodingRangeExpander expanderCb = _expanderCb; CodingRangeExpander expanderCr = _expanderCr; YCbCrToRgbConverter converter = _converterFrom; ref byte sourceRef = ref MemoryMarshal.GetReference(ycbcr);
private TiffYCbCrConverter8(TiffRational[] luma, TiffRational[] referenceBlackWhite) { _expanderY = new CodingRangeExpander(referenceBlackWhite[0], referenceBlackWhite[1], 255); _expanderCb = new CodingRangeExpander(referenceBlackWhite[2], referenceBlackWhite[3], 127); _expanderCr = new CodingRangeExpander(referenceBlackWhite[4], referenceBlackWhite[5], 127); _converterFrom = new YCbCrToRgbConverter(luma[0], luma[1], luma[2]); _shrinkerY = new CodingRangeShrinker(referenceBlackWhite[0], referenceBlackWhite[1], 255); _shrinkerCb = new CodingRangeShrinker(referenceBlackWhite[2], referenceBlackWhite[3], 127); _shrinkerCr = new CodingRangeShrinker(referenceBlackWhite[4], referenceBlackWhite[5], 127); _converterTo = new RgbToYCbCrConverter(luma[0], luma[1], luma[2]); }
public TiffRgba32 ConvertToRgba32(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); TiffRgba32 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]); }