Browse Source

DeduceJpegColorSpace

af/merge-core
James Jackson-South 9 years ago
parent
commit
7d77583a83
  1. 35
      src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegDecoderCore.cs

35
src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegDecoderCore.cs

@ -818,34 +818,31 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort
{ {
switch (this.ComponentCount) switch (this.ComponentCount)
{ {
case 1: return JpegColorSpace.GrayScale; case 1:
case 3: return this.IsRGB() ? JpegColorSpace.RGB : JpegColorSpace.YCbCr; return JpegColorSpace.GrayScale;
case 4: case 3:
if (!this.isAdobe || this.adobe.ColorTransform == OrigJpegConstants.Adobe.ColorTransformYCbCr)
if (!this.adobeTransformValid)
{ {
throw new ImageFormatException( return JpegColorSpace.YCbCr;
"Unknown color model: 4-component JPEG doesn't have Adobe APP14 metadata");
} }
// See http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe if (this.adobe.ColorTransform == OrigJpegConstants.Adobe.ColorTransformUnknown)
// See https://docs.oracle.com/javase/8/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html
// TODO: YCbCrA?
if (this.adobeTransform == OrigJpegConstants.Adobe.ColorTransformYcck)
{ {
return JpegColorSpace.Ycck; return JpegColorSpace.RGB;
} }
else if (this.adobeTransform == OrigJpegConstants.Adobe.ColorTransformUnknown)
break;
case 4:
if (this.adobe.ColorTransform == OrigJpegConstants.Adobe.ColorTransformYcck)
{ {
// Assume CMYK return JpegColorSpace.Ycck;
return JpegColorSpace.Cmyk;
} }
goto default; return JpegColorSpace.Cmyk;
default:
throw new ImageFormatException("JpegDecoder only supports RGB, CMYK and Grayscale color spaces.");
} }
throw new ImageFormatException($"Unsupported color mode. Max components 4; found {this.ComponentCount}."
+ "JpegDecoder only supports YCbCr, RGB, YccK, CMYK and Grayscale color spaces.");
} }
private Image<TPixel> PostProcessIntoImage<TPixel>() private Image<TPixel> PostProcessIntoImage<TPixel>()

Loading…
Cancel
Save