Browse Source

Add support decoding for 12 bits per channel tiff's

pull/1652/head
Brian Popow 5 years ago
parent
commit
bbd71e2ce7
  1. 10
      src/ImageSharp/Formats/Tiff/PhotometricInterpretation/TiffColorDecoderFactory{TPixel}.cs
  2. 5
      src/ImageSharp/Formats/Tiff/PhotometricInterpretation/TiffColorType.cs
  3. 7
      src/ImageSharp/Formats/Tiff/TiffBitsPerPixel.cs
  4. 4
      src/ImageSharp/Formats/Tiff/TiffDecoderOptionsParser.cs
  5. 1
      src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
  6. 5
      tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs
  7. 1
      tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs
  8. 1
      tests/ImageSharp.Tests/TestImages.cs
  9. 3
      tests/Images/Input/Tiff/flower-rgb-contig-12.tiff

10
src/ImageSharp/Formats/Tiff/PhotometricInterpretation/TiffColorDecoderFactory{TPixel}.cs

@ -97,6 +97,16 @@ namespace SixLabors.ImageSharp.Formats.Tiff.PhotometricInterpretation
DebugGuard.IsTrue(colorMap == null, "colorMap");
return new RgbTiffColor<TPixel>(bitsPerSample);
case TiffColorType.Rgb121212:
DebugGuard.IsTrue(
bitsPerSample.Length == 3
&& bitsPerSample[2] == 12
&& bitsPerSample[1] == 12
&& bitsPerSample[0] == 12,
"bitsPerSample");
DebugGuard.IsTrue(colorMap == null, "colorMap");
return new RgbTiffColor<TPixel>(bitsPerSample);
case TiffColorType.Rgb141414:
DebugGuard.IsTrue(
bitsPerSample.Length == 3

5
src/ImageSharp/Formats/Tiff/PhotometricInterpretation/TiffColorType.cs

@ -78,6 +78,11 @@ namespace SixLabors.ImageSharp.Formats.Tiff.PhotometricInterpretation
/// </summary>
Rgb101010,
/// <summary>
/// RGB color image with 12 bits for each channel.
/// </summary>
Rgb121212,
/// <summary>
/// RGB color image with 14 bits for each channel.
/// </summary>

7
src/ImageSharp/Formats/Tiff/TiffBitsPerPixel.cs

@ -70,6 +70,13 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// </summary>
Bit30 = 30,
/// <summary>
/// 36 bits per pixel. 12 bit for each color channel.
///
/// Note: The TiffEncoder does not yet support 12 bits per color channel and will default to 24 bits per pixel instead.
/// </summary>
Bit36 = 36,
/// <summary>
/// 42 bits per pixel. 14 bit for each color channel.
///

4
src/ImageSharp/Formats/Tiff/TiffDecoderOptionsParser.cs

@ -189,6 +189,10 @@ namespace SixLabors.ImageSharp.Formats.Tiff
options.ColorType = TiffColorType.Rgb141414;
break;
case 12:
options.ColorType = TiffColorType.Rgb121212;
break;
case 10:
options.ColorType = TiffColorType.Rgb101010;
break;

1
src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs

@ -325,6 +325,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
case TiffBitsPerPixel.Bit14:
case TiffBitsPerPixel.Bit16:
case TiffBitsPerPixel.Bit30:
case TiffBitsPerPixel.Bit36:
case TiffBitsPerPixel.Bit42:
// Encoding not yet supported bits per pixel will default to 24 bits.
this.SetEncoderOptions(TiffBitsPerPixel.Bit24, TiffPhotometricInterpretation.Rgb, compression, TiffPredictor.None);

5
tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs

@ -149,6 +149,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
public void TiffDecoder_CanDecode_30Bit<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffDecoder(provider);
[Theory]
[WithFile(FlowerRgb121212Contiguous, PixelTypes.Rgba32)]
public void TiffDecoder_CanDecode_36Bit<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffDecoder(provider);
[Theory]
[WithFile(FlowerRgb141414Contiguous, PixelTypes.Rgba32)]
[WithFile(FlowerRgb141414Planar, PixelTypes.Rgba32)]

1
tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs

@ -79,6 +79,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[Theory]
[InlineData(TiffBitsPerPixel.Bit42)]
[InlineData(TiffBitsPerPixel.Bit36)]
[InlineData(TiffBitsPerPixel.Bit30)]
[InlineData(TiffBitsPerPixel.Bit12)]
[InlineData(TiffBitsPerPixel.Bit10)]

1
tests/ImageSharp.Tests/TestImages.cs

@ -564,6 +564,7 @@ namespace SixLabors.ImageSharp.Tests
public const string FlowerRgb141414Planar = "Tiff/flower-rgb-planar-14.tiff";
public const string FlowerRgb101010Contiguous = "Tiff/flower-rgb-contig-10.tiff";
public const string FlowerRgb101010Planar = "Tiff/flower-rgb-planar-10.tiff";
public const string FlowerRgb121212Contiguous = "Tiff/flower-rgb-contig-12.tiff";
public const string FlowerRgb444Contiguous = "Tiff/flower-rgb-contig-04.tiff";
public const string FlowerRgb444Planar = "Tiff/flower-rgb-planar-04.tiff";
public const string FlowerRgb222Contiguous = "Tiff/flower-rgb-contig-02.tiff";

3
tests/Images/Input/Tiff/flower-rgb-contig-12.tiff

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5f7a63eb8636e2b1ee39dfda4d0bddfc98bdc9eb94bea2dd657619331fa38b5b
size 14483
Loading…
Cancel
Save