|
|
|
@ -620,7 +620,12 @@ internal static class TiffDecoderOptionsParser |
|
|
|
} |
|
|
|
|
|
|
|
options.CompressionType = TiffDecoderCompressionType.OldJpeg; |
|
|
|
AdjustOptionsYCbCrJpegCompression(options); |
|
|
|
if (options.PhotometricInterpretation is TiffPhotometricInterpretation.YCbCr) |
|
|
|
{ |
|
|
|
// Note: Setting PhotometricInterpretation and color type to RGB here, since the jpeg decoder will handle the conversion of the pixel data.
|
|
|
|
options.PhotometricInterpretation = TiffPhotometricInterpretation.Rgb; |
|
|
|
options.ColorType = TiffColorType.Rgb; |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
@ -628,7 +633,20 @@ internal static class TiffDecoderOptionsParser |
|
|
|
case TiffCompression.Jpeg: |
|
|
|
{ |
|
|
|
options.CompressionType = TiffDecoderCompressionType.Jpeg; |
|
|
|
AdjustOptionsYCbCrJpegCompression(options); |
|
|
|
if (options.PhotometricInterpretation is TiffPhotometricInterpretation.YCbCr && options.JpegTables is null) |
|
|
|
{ |
|
|
|
// Note: Setting PhotometricInterpretation and color type to RGB here, since the jpeg decoder will handle the conversion of the pixel data.
|
|
|
|
options.PhotometricInterpretation = TiffPhotometricInterpretation.Rgb; |
|
|
|
options.ColorType = TiffColorType.Rgb; |
|
|
|
} |
|
|
|
|
|
|
|
// Some tiff encoder set this to values different from [1, 1]. The jpeg decoder already handles this,
|
|
|
|
// so we set this always to [1, 1], see: https://github.com/SixLabors/ImageSharp/issues/2679
|
|
|
|
if (options.PhotometricInterpretation is TiffPhotometricInterpretation.YCbCr) |
|
|
|
{ |
|
|
|
options.YcbcrSubSampling[0] = 1; |
|
|
|
options.YcbcrSubSampling[1] = 1; |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
@ -647,24 +665,6 @@ internal static class TiffDecoderOptionsParser |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static void AdjustOptionsYCbCrJpegCompression(TiffDecoderCore options) |
|
|
|
{ |
|
|
|
if (options.PhotometricInterpretation is TiffPhotometricInterpretation.YCbCr) |
|
|
|
{ |
|
|
|
// Note: Setting PhotometricInterpretation and color type to RGB here, since the jpeg decoder will handle the conversion of the pixel data.
|
|
|
|
options.PhotometricInterpretation = TiffPhotometricInterpretation.Rgb; |
|
|
|
options.ColorType = TiffColorType.Rgb; |
|
|
|
} |
|
|
|
|
|
|
|
if (options.PhotometricInterpretation is TiffPhotometricInterpretation.YCbCr) |
|
|
|
{ |
|
|
|
// Some tiff encoder set this to values different from [1, 1]. The jpeg decoder already handles this,
|
|
|
|
// so we set this always to [1, 1], see: https://github.com/SixLabors/ImageSharp/issues/2679
|
|
|
|
options.YcbcrSubSampling[0] = 1; |
|
|
|
options.YcbcrSubSampling[1] = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static bool IsBiColorCompression(TiffCompression? compression) |
|
|
|
{ |
|
|
|
if (compression is TiffCompression.Ccitt1D or TiffCompression.CcittGroup3Fax or |
|
|
|
|