Browse Source

Report 1-bit mode bug. Enable test images. Change test files.

pull/1570/head
Ildar Khayrutdinov 5 years ago
parent
commit
586f8e5ee2
  1. 12
      tests/ImageSharp.Benchmarks/Codecs/DecodeTiff.cs
  2. 18
      tests/ImageSharp.Benchmarks/Codecs/EncodeTiff.cs
  3. 2
      tests/ImageSharp.Benchmarks/Config.cs
  4. 34
      tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs

12
tests/ImageSharp.Benchmarks/Codecs/DecodeTiff.cs

@ -53,12 +53,12 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
[Params( [Params(
TestImages.Tiff.CcittFax3AllTermCodes, TestImages.Tiff.CcittFax3AllTermCodes,
TestImages.Tiff.HuffmanRleAllMakeupCodes, TestImages.Tiff.HuffmanRleAllMakeupCodes,
TestImages.Tiff.GrayscaleUncompressed, TestImages.Tiff.Calliphora_GrayscaleUncompressed,
TestImages.Tiff.PaletteUncompressed, TestImages.Tiff.Calliphora_RgbPaletteLzw_Predictor,
TestImages.Tiff.RgbDeflate, TestImages.Tiff.Calliphora_RgbDeflate_Predictor,
TestImages.Tiff.RgbLzwPredictor, TestImages.Tiff.Calliphora_RgbLzwPredictor,
TestImages.Tiff.RgbPackbits, TestImages.Tiff.Calliphora_RgbPackbits,
TestImages.Tiff.RgbUncompressed)] TestImages.Tiff.Calliphora_RgbUncompressed)]
public string TestImage { get; set; } public string TestImage { get; set; }
#endif #endif

18
tests/ImageSharp.Benchmarks/Codecs/EncodeTiff.cs

@ -24,14 +24,14 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage); private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage);
[Params(TestImages.Tiff.RgbUncompressed)] [Params(TestImages.Tiff.Calliphora_RgbUncompressed)]
public string TestImage { get; set; } public string TestImage { get; set; }
[Params( [Params(
TiffEncoderCompression.None, TiffEncoderCompression.None,
////TiffEncoderCompression.Deflate, TiffEncoderCompression.Deflate,
TiffEncoderCompression.Lzw, TiffEncoderCompression.Lzw,
////TiffEncoderCompression.PackBits, TiffEncoderCompression.PackBits,
TiffEncoderCompression.CcittGroup3Fax, TiffEncoderCompression.CcittGroup3Fax,
TiffEncoderCompression.ModifiedHuffman)] TiffEncoderCompression.ModifiedHuffman)]
public TiffEncoderCompression Compression { get; set; } public TiffEncoderCompression Compression { get; set; }
@ -70,7 +70,15 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
[Benchmark(Description = "ImageSharp Tiff")] [Benchmark(Description = "ImageSharp Tiff")]
public void TiffCore() public void TiffCore()
{ {
var encoder = new TiffEncoder() { Compression = this.Compression }; TiffEncodingMode mode = TiffEncodingMode.Default;
// workaround for 1-bit bug
if (this.Compression == TiffEncoderCompression.CcittGroup3Fax || this.Compression == TiffEncoderCompression.ModifiedHuffman)
{
mode = TiffEncodingMode.BiColor;
}
var encoder = new TiffEncoder() { Compression = this.Compression, Mode = mode };
using var memoryStream = new MemoryStream(); using var memoryStream = new MemoryStream();
this.core.SaveAsTiff(memoryStream, encoder); this.core.SaveAsTiff(memoryStream, encoder);
} }
@ -107,7 +115,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
return EncoderValue.CompressionLZW; return EncoderValue.CompressionLZW;
default: default:
throw new System.ArgumentOutOfRangeException(nameof(compression)); throw new System.NotSupportedException(compression.ToString());
} }
} }
} }

2
tests/ImageSharp.Benchmarks/Config.cs

@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.Benchmarks
} }
#endif #endif
this.SummaryStyle = SummaryStyle.Default.WithMaxParameterColumnWidth(40); this.SummaryStyle = SummaryStyle.Default.WithMaxParameterColumnWidth(50);
} }
public class MultiFramework : Config public class MultiFramework : Config

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

@ -90,6 +90,40 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.Equal(expectedBitsPerPixel, meta.BitsPerPixel); Assert.Equal(expectedBitsPerPixel, meta.BitsPerPixel);
} }
[Theory]
[WithFile(RgbUncompressed, PixelTypes.Rgba32, TiffEncoderCompression.CcittGroup3Fax, TiffCompression.CcittGroup3Fax)]
[WithFile(RgbUncompressed, PixelTypes.Rgba32, TiffEncoderCompression.ModifiedHuffman, TiffCompression.Ccitt1D)]
[WithFile(GrayscaleUncompressed, PixelTypes.L8, TiffEncoderCompression.CcittGroup3Fax, TiffCompression.CcittGroup3Fax)]
[WithFile(PaletteDeflateMultistrip, PixelTypes.L8, TiffEncoderCompression.ModifiedHuffman, TiffCompression.Ccitt1D)]
public void TiffEncoder_CorrectBiMode_Bug<TPixel>(TestImageProvider<TPixel> provider, TiffEncoderCompression compression, TiffCompression expectedCompression)
where TPixel : unmanaged, IPixel<TPixel>
{
// arrange
var encoder = new TiffEncoder() { Compression = compression };
using Image<TPixel> input = provider.GetImage();
using var memStream = new MemoryStream();
// act
input.Save(memStream, encoder);
// assert
memStream.Position = 0;
using var output = Image.Load<Rgba32>(this.configuration, memStream);
TiffMetadata meta = output.Metadata.GetTiffMetadata();
// This is bug!
// BitsPerPixel must be 1, and compression must be eqals which was setted in encoder
Assert.NotEqual(TiffBitsPerPixel.Pixel1, meta.BitsPerPixel);
Assert.NotEqual(expectedCompression, meta.Compression);
Assert.Equal(input.Metadata.GetTiffMetadata().BitsPerPixel, meta.BitsPerPixel);
Assert.Equal(TiffCompression.None, meta.Compression);
// expected values
//// Assert.Equal(TiffBitsPerPixel.Pixel1, meta.BitsPerPixel);
//// Assert.Equal(expectedCompression, meta.Compression);
}
[Theory] [Theory]
[WithFile(Calliphora_RgbUncompressed, PixelTypes.Rgba32)] [WithFile(Calliphora_RgbUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeRgb_Works<TPixel>(TestImageProvider<TPixel> provider) public void TiffEncoder_EncodeRgb_Works<TPixel>(TestImageProvider<TPixel> provider)

Loading…
Cancel
Save