From 9d62a2c989957e8ca67cdd2400f6dcd267db8324 Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Thu, 19 Sep 2019 09:30:13 -0700 Subject: [PATCH 001/130] Added: ability to skip unneeded chunks for optimization mode --- src/ImageSharp/Formats/Png/IPngEncoderOptions.cs | 5 +++++ src/ImageSharp/Formats/Png/PngEncoderCore.cs | 13 +++++++++---- src/ImageSharp/Formats/Png/PngEncoderOptions.cs | 6 ++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 87fd2582a..0f416cb7b 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -57,5 +57,10 @@ namespace SixLabors.ImageSharp.Formats.Png /// Gets a value indicating whether this instance should write an Adam7 interlaced image. /// PngInterlaceMode? InterlaceMethod { get; } + + /// + /// Gets a value indicating whether this instance should skip certain chunks to decrease file size + /// + bool Optimized { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 09575bb28..4442bdb0d 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -155,10 +155,15 @@ namespace SixLabors.ImageSharp.Formats.Png this.WriteHeaderChunk(stream); this.WritePaletteChunk(stream, quantized); this.WriteTransparencyChunk(stream, pngMetadata); - this.WritePhysicalChunk(stream, metadata); - this.WriteGammaChunk(stream); - this.WriteExifChunk(stream, metadata); - this.WriteTextChunks(stream, pngMetadata); + + if (!this.options.Optimized) + { + this.WritePhysicalChunk(stream, metadata); + this.WriteGammaChunk(stream); + this.WriteExifChunk(stream, metadata); + this.WriteTextChunks(stream, pngMetadata); + } + this.WriteDataChunks(image.Frames.RootFrame, quantized, stream); this.WriteEndChunk(stream); stream.Flush(); diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index dd6c66cb7..5d4be8f14 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -29,6 +29,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.Quantizer = source.Quantizer; this.Threshold = source.Threshold; this.InterlaceMethod = source.InterlaceMethod; + this.Optimized = source.Optimized; } /// @@ -78,5 +79,10 @@ namespace SixLabors.ImageSharp.Formats.Png /// Gets or sets a value indicating whether this instance should write an Adam7 interlaced image. /// public PngInterlaceMode? InterlaceMethod { get; set; } + + /// + /// Gets or sets a value indicating whether this instance should skip certain chunks to decrease file size + /// + public bool Optimized { get; set; } } } From 69f01c3df5c9316988d20e7788c9ea707e8305f1 Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Thu, 19 Sep 2019 10:21:41 -0700 Subject: [PATCH 002/130] Update: forgot to implement Optimized property --- src/ImageSharp/Formats/Png/PngEncoder.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 3e46ad29e..adad47f43 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -62,6 +62,11 @@ namespace SixLabors.ImageSharp.Formats.Png /// public PngInterlaceMode? InterlaceMethod { get; set; } + /// + /// Gets a value indicating whether this instance should skip certain chunks to decrease file size + /// + public bool Optimized { get; } + /// /// Encodes the image to the specified stream from the . /// From 9ee2066713a99afc36cc0a3bb9dff116ba5fd0f6 Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Thu, 19 Sep 2019 11:22:37 -0700 Subject: [PATCH 003/130] Added: test + fixed optimized property --- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- .../Formats/Png/PngEncoderTests.cs | 40 ++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index adad47f43..43d7f1ea6 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets a value indicating whether this instance should skip certain chunks to decrease file size /// - public bool Optimized { get; } + public bool Optimized { get; set; } /// /// Encodes the image to the specified stream from the . diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 2584391bb..05a68a463 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -195,6 +195,40 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } + [Theory] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Rgb, PngBitDepth.Bit8)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.Rgb, PngBitDepth.Bit16)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.RgbWithAlpha, PngBitDepth.Bit8)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.RgbWithAlpha, PngBitDepth.Bit16)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit1)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit2)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit4)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit8)] + [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit1)] + [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit2)] + [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit4)] + [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit8)] + [WithTestPatternImages(24, 24, PixelTypes.Rgb48, PngColorType.Grayscale, PngBitDepth.Bit16)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.GrayscaleWithAlpha, PngBitDepth.Bit8)] + [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.GrayscaleWithAlpha, PngBitDepth.Bit16)] + public void WorksWithAllBitDepthsOptimized(TestImageProvider provider, PngColorType pngColorType, PngBitDepth pngBitDepth) + where TPixel : struct, IPixel + { + foreach (PngInterlaceMode interlaceMode in InterlaceMode) + { + TestPngEncoderCore( + provider, + pngColorType, + PngFilterMethod.Adaptive, + pngBitDepth, + interlaceMode, + appendPngColorType: true, + appendPixelType: true, + appendPngBitDepth: true, + optimized: true); + } + } + [Theory] [WithFile(TestImages.Png.Palette8Bpp, nameof(PaletteLargeOnly), PixelTypes.Rgba32)] public void PaletteColorType_WuQuantizer(TestImageProvider provider, int paletteSize) @@ -356,7 +390,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png bool appendPixelType = false, bool appendCompressionLevel = false, bool appendPaletteSize = false, - bool appendPngBitDepth = false) + bool appendPngBitDepth = false, + bool optimized = false) where TPixel : struct, IPixel { using (Image image = provider.GetImage()) @@ -368,7 +403,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png CompressionLevel = compressionLevel, BitDepth = bitDepth, Quantizer = new WuQuantizer(paletteSize), - InterlaceMethod = interlaceMode + InterlaceMethod = interlaceMode, + Optimized = optimized, }; string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : string.Empty; From 8d9fbb78697075450a6692c706561057353ba65f Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Thu, 19 Sep 2019 16:52:56 -0700 Subject: [PATCH 004/130] Fixed property documentation + Optimized transparency --- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 43d7f1ea6..5a79915de 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -63,7 +63,7 @@ namespace SixLabors.ImageSharp.Formats.Png public PngInterlaceMode? InterlaceMethod { get; set; } /// - /// Gets a value indicating whether this instance should skip certain chunks to decrease file size + /// Gets or sets a value indicating whether this instance should skip certain chunks to decrease file size /// public bool Optimized { get; set; } diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 4442bdb0d..8833389e7 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -153,7 +153,7 @@ namespace SixLabors.ImageSharp.Formats.Png stream.Write(PngConstants.HeaderBytes, 0, PngConstants.HeaderBytes.Length); this.WriteHeaderChunk(stream); - this.WritePaletteChunk(stream, quantized); + this.WritePaletteChunk(stream, quantized, this.options.Optimized); this.WriteTransparencyChunk(stream, pngMetadata); if (!this.options.Optimized) @@ -552,7 +552,8 @@ namespace SixLabors.ImageSharp.Formats.Png /// The pixel format. /// The containing image data. /// The quantized frame. - private void WritePaletteChunk(Stream stream, IQuantizedFrame quantized) + /// If optimized make fully transparent pixels black. + private void WritePaletteChunk(Stream stream, IQuantizedFrame quantized, bool optimized) where TPixel : struct, IPixel { if (quantized == null) @@ -584,9 +585,9 @@ namespace SixLabors.ImageSharp.Formats.Png byte alpha = rgba.A; - Unsafe.Add(ref colorTableRef, offset) = rgba.R; - Unsafe.Add(ref colorTableRef, offset + 1) = rgba.G; - Unsafe.Add(ref colorTableRef, offset + 2) = rgba.B; + Unsafe.Add(ref colorTableRef, offset) = optimized && alpha == 0 ? (byte)0 : rgba.R; + Unsafe.Add(ref colorTableRef, offset + 1) = optimized && alpha == 0 ? (byte)0 : rgba.G; + Unsafe.Add(ref colorTableRef, offset + 2) = optimized && alpha == 0 ? (byte)0 : rgba.B; if (alpha > this.options.Threshold) { From 81bc719c211029cfe2f5b6fe9e0a3ee769cb165c Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Fri, 20 Sep 2019 07:31:55 -0700 Subject: [PATCH 005/130] Update: expanded optimize options --- .../Formats/Png/IPngEncoderOptions.cs | 4 +- src/ImageSharp/Formats/Png/PngEncoder.cs | 4 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 37 +++++++++++--- .../Formats/Png/PngEncoderOptions.cs | 6 +-- .../Formats/Png/PngOptimizeMethod.cs | 49 +++++++++++++++++++ 5 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 src/ImageSharp/Formats/Png/PngOptimizeMethod.cs diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 0f416cb7b..38c3484c8 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -59,8 +59,8 @@ namespace SixLabors.ImageSharp.Formats.Png PngInterlaceMode? InterlaceMethod { get; } /// - /// Gets a value indicating whether this instance should skip certain chunks to decrease file size + /// Gets the optimize method. /// - bool Optimized { get; } + PngOptimizeMethod? OptimizeMethod { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 5a79915de..16bd538c3 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -63,9 +63,9 @@ namespace SixLabors.ImageSharp.Formats.Png public PngInterlaceMode? InterlaceMethod { get; set; } /// - /// Gets or sets a value indicating whether this instance should skip certain chunks to decrease file size + /// Gets or sets the optimize method. /// - public bool Optimized { get; set; } + public PngOptimizeMethod? OptimizeMethod { get; set; } /// /// Encodes the image to the specified stream from the . diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 8833389e7..02bb67c72 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -153,14 +153,26 @@ namespace SixLabors.ImageSharp.Formats.Png stream.Write(PngConstants.HeaderBytes, 0, PngConstants.HeaderBytes.Length); this.WriteHeaderChunk(stream); - this.WritePaletteChunk(stream, quantized, this.options.Optimized); + this.WritePaletteChunk(stream, quantized, this.options.OptimizeMethod); this.WriteTransparencyChunk(stream, pngMetadata); - if (!this.options.Optimized) + if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressPhysicalChunk) != PngOptimizeMethod.SuppressPhysicalChunk) { this.WritePhysicalChunk(stream, metadata); + } + + if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressGammaChunk) != PngOptimizeMethod.SuppressGammaChunk) + { this.WriteGammaChunk(stream); + } + + if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressExifChunk) != PngOptimizeMethod.SuppressExifChunk) + { this.WriteExifChunk(stream, metadata); + } + + if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressTextChunks) != PngOptimizeMethod.SuppressTextChunks) + { this.WriteTextChunks(stream, pngMetadata); } @@ -552,8 +564,8 @@ namespace SixLabors.ImageSharp.Formats.Png /// The pixel format. /// The containing image data. /// The quantized frame. - /// If optimized make fully transparent pixels black. - private void WritePaletteChunk(Stream stream, IQuantizedFrame quantized, bool optimized) + /// The optimize method. + private void WritePaletteChunk(Stream stream, IQuantizedFrame quantized, PngOptimizeMethod? optimizeMethod) where TPixel : struct, IPixel { if (quantized == null) @@ -576,6 +588,8 @@ namespace SixLabors.ImageSharp.Formats.Png Rgba32 rgba = default; + bool makeTransparentBlack = ((optimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.MakeTransparentBlack) == PngOptimizeMethod.MakeTransparentBlack; + for (int i = 0; i < paletteLength; i++) { if (quantizedSpan.IndexOf((byte)i) > -1) @@ -585,9 +599,18 @@ namespace SixLabors.ImageSharp.Formats.Png byte alpha = rgba.A; - Unsafe.Add(ref colorTableRef, offset) = optimized && alpha == 0 ? (byte)0 : rgba.R; - Unsafe.Add(ref colorTableRef, offset + 1) = optimized && alpha == 0 ? (byte)0 : rgba.G; - Unsafe.Add(ref colorTableRef, offset + 2) = optimized && alpha == 0 ? (byte)0 : rgba.B; + if (makeTransparentBlack && alpha == 0) + { + Unsafe.Add(ref colorTableRef, offset) = 0; + Unsafe.Add(ref colorTableRef, offset + 1) = 0; + Unsafe.Add(ref colorTableRef, offset + 2) = 0; + } + else + { + Unsafe.Add(ref colorTableRef, offset) = rgba.R; + Unsafe.Add(ref colorTableRef, offset + 1) = rgba.G; + Unsafe.Add(ref colorTableRef, offset + 2) = rgba.B; + } if (alpha > this.options.Threshold) { diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index 5d4be8f14..89d7b0d5e 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.Quantizer = source.Quantizer; this.Threshold = source.Threshold; this.InterlaceMethod = source.InterlaceMethod; - this.Optimized = source.Optimized; + this.OptimizeMethod = source.OptimizeMethod; } /// @@ -81,8 +81,8 @@ namespace SixLabors.ImageSharp.Formats.Png public PngInterlaceMode? InterlaceMethod { get; set; } /// - /// Gets or sets a value indicating whether this instance should skip certain chunks to decrease file size + /// Gets or sets a the optimize method. /// - public bool Optimized { get; set; } + public PngOptimizeMethod? OptimizeMethod { get; set; } } } diff --git a/src/ImageSharp/Formats/Png/PngOptimizeMethod.cs b/src/ImageSharp/Formats/Png/PngOptimizeMethod.cs new file mode 100644 index 000000000..7ad664638 --- /dev/null +++ b/src/ImageSharp/Formats/Png/PngOptimizeMethod.cs @@ -0,0 +1,49 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System; + +namespace SixLabors.ImageSharp.Formats.Png +{ + /// + /// Provides enumeration of available PNG optimization methods. + /// + [Flags] + public enum PngOptimizeMethod + { + /// + /// With the None filter, the scanline is transmitted unmodified. + /// + None = 0, + + /// + /// Suppress the physical dimension information chunk. + /// + SuppressPhysicalChunk = 1, + + /// + /// Suppress the gamma information chunk. + /// + SuppressGammaChunk = 2, + + /// + /// Suppress the eXIf chunk. + /// + SuppressExifChunk = 4, + + /// + /// Suppress the tTXt, iTXt or zTXt chunk. + /// + SuppressTextChunks = 8, + + /// + /// Make funlly transparent pixels black. + /// + MakeTransparentBlack = 16, + + /// + /// All possible optimizations. + /// + All = 31, + } +} From fc8f5e3eaa0418352a91f1e1ae15d7a84c3b78ba Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Fri, 20 Sep 2019 07:57:53 -0700 Subject: [PATCH 006/130] Update: transparent pixels to black before quantization --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 56 +++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 02bb67c72..12a681fea 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -147,13 +147,43 @@ namespace SixLabors.ImageSharp.Formats.Png ImageMetadata metadata = image.Metadata; PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); - IQuantizedFrame quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, image); - this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, image, quantized); + + IQuantizedFrame quantized; + + if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.MakeTransparentBlack) == PngOptimizeMethod.MakeTransparentBlack) + { + using (Image tempImage = image.Clone()) + { + Span span = tempImage.GetPixelSpan(); + foreach (TPixel pixel in span) + { + Rgba32 rgba32 = Rgba32.Transparent; + pixel.ToRgba32(ref rgba32); + + if (rgba32.A == 0) + { + rgba32.R = 0; + rgba32.G = 0; + rgba32.B = 0; + } + + pixel.FromRgba32(rgba32); + } + + quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, tempImage); + this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, tempImage, quantized); + } + } + else + { + quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, image); + this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, image, quantized); + } stream.Write(PngConstants.HeaderBytes, 0, PngConstants.HeaderBytes.Length); this.WriteHeaderChunk(stream); - this.WritePaletteChunk(stream, quantized, this.options.OptimizeMethod); + this.WritePaletteChunk(stream, quantized); this.WriteTransparencyChunk(stream, pngMetadata); if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressPhysicalChunk) != PngOptimizeMethod.SuppressPhysicalChunk) @@ -564,8 +594,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// The pixel format. /// The containing image data. /// The quantized frame. - /// The optimize method. - private void WritePaletteChunk(Stream stream, IQuantizedFrame quantized, PngOptimizeMethod? optimizeMethod) + private void WritePaletteChunk(Stream stream, IQuantizedFrame quantized) where TPixel : struct, IPixel { if (quantized == null) @@ -588,8 +617,6 @@ namespace SixLabors.ImageSharp.Formats.Png Rgba32 rgba = default; - bool makeTransparentBlack = ((optimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.MakeTransparentBlack) == PngOptimizeMethod.MakeTransparentBlack; - for (int i = 0; i < paletteLength; i++) { if (quantizedSpan.IndexOf((byte)i) > -1) @@ -599,18 +626,9 @@ namespace SixLabors.ImageSharp.Formats.Png byte alpha = rgba.A; - if (makeTransparentBlack && alpha == 0) - { - Unsafe.Add(ref colorTableRef, offset) = 0; - Unsafe.Add(ref colorTableRef, offset + 1) = 0; - Unsafe.Add(ref colorTableRef, offset + 2) = 0; - } - else - { - Unsafe.Add(ref colorTableRef, offset) = rgba.R; - Unsafe.Add(ref colorTableRef, offset + 1) = rgba.G; - Unsafe.Add(ref colorTableRef, offset + 2) = rgba.B; - } + Unsafe.Add(ref colorTableRef, offset) = rgba.R; + Unsafe.Add(ref colorTableRef, offset + 1) = rgba.G; + Unsafe.Add(ref colorTableRef, offset + 2) = rgba.B; if (alpha > this.options.Threshold) { From ba08c64755ddea5cdbc02669ba11dac7b5f68e10 Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Fri, 20 Sep 2019 08:21:45 -0700 Subject: [PATCH 007/130] Fixed tests --- tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 05a68a463..c72dbe289 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -225,14 +225,14 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png appendPngColorType: true, appendPixelType: true, appendPngBitDepth: true, - optimized: true); + optimizeMethod: PngOptimizeMethod.All); } } [Theory] [WithFile(TestImages.Png.Palette8Bpp, nameof(PaletteLargeOnly), PixelTypes.Rgba32)] public void PaletteColorType_WuQuantizer(TestImageProvider provider, int paletteSize) - where TPixel : struct, IPixel + where TPixel : struct, IPixel { foreach (PngInterlaceMode interlaceMode in InterlaceMode) { @@ -391,7 +391,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png bool appendCompressionLevel = false, bool appendPaletteSize = false, bool appendPngBitDepth = false, - bool optimized = false) + PngOptimizeMethod optimizeMethod = PngOptimizeMethod.None) where TPixel : struct, IPixel { using (Image image = provider.GetImage()) @@ -404,7 +404,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png BitDepth = bitDepth, Quantizer = new WuQuantizer(paletteSize), InterlaceMethod = interlaceMode, - Optimized = optimized, + OptimizeMethod = optimizeMethod, }; string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : string.Empty; From f8c5277fb4012da6967cc84a0c83c96533cf43d2 Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Fri, 20 Sep 2019 09:32:39 -0700 Subject: [PATCH 008/130] Fixed transparency update --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 12a681fea..d8be4c80a 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -155,19 +155,17 @@ namespace SixLabors.ImageSharp.Formats.Png using (Image tempImage = image.Clone()) { Span span = tempImage.GetPixelSpan(); - foreach (TPixel pixel in span) + for (int i = 0; i < span.Length; i++) { - Rgba32 rgba32 = Rgba32.Transparent; - pixel.ToRgba32(ref rgba32); - + Rgba32 rgba32 = default; + span[i].ToRgba32(ref rgba32); if (rgba32.A == 0) { rgba32.R = 0; rgba32.G = 0; rgba32.B = 0; } - - pixel.FromRgba32(rgba32); + span[i].FromRgba32(rgba32); } quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, tempImage); From 6e3e4ce19fd8573a736bea67cd6b493dff7a85d6 Mon Sep 17 00:00:00 2001 From: Peter Tribe Date: Fri, 20 Sep 2019 10:52:42 -0700 Subject: [PATCH 009/130] Fixed formatting --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index d8be4c80a..a3cc1d018 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -159,12 +159,14 @@ namespace SixLabors.ImageSharp.Formats.Png { Rgba32 rgba32 = default; span[i].ToRgba32(ref rgba32); + if (rgba32.A == 0) { rgba32.R = 0; rgba32.G = 0; rgba32.B = 0; } + span[i].FromRgba32(rgba32); } From f0e5379ba614c3bd598575bb22d2bf883d01ee42 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 19 Apr 2020 14:01:00 +0100 Subject: [PATCH 010/130] Update license and readme. --- LICENSE | 862 +++++++++++++++++++++++++++++++++++++++++------------- README.md | 156 ++-------- 2 files changed, 682 insertions(+), 336 deletions(-) diff --git a/LICENSE b/LICENSE index 2eeb57968..0ad25db4b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,661 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018 Six Labors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md index 1e5203956..820ceb11b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ SixLabors.ImageSharp [![Build Status](https://img.shields.io/github/workflow/status/SixLabors/ImageSharp/Build/master)](https://github.com/SixLabors/ImageSharp/actions) [![Code coverage](https://codecov.io/gh/SixLabors/ImageSharp/branch/master/graph/badge.svg)](https://codecov.io/gh/SixLabors/ImageSharp) -[![GitHub license](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/SixLabors/ImageSharp/master/LICENSE) +[![License: AGPL v3](https://img.shields.io/badge/license-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ImageSharp/General?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=flat&logo=twitter)](https://twitter.com/intent/tweet?hashtags=imagesharp,dotnet,oss&text=ImageSharp.+A+new+cross-platform+2D+graphics+API+in+C%23&url=https%3a%2f%2fgithub.com%2fSixLabors%2fImageSharp&via=sixlabors) [![OpenCollective](https://opencollective.com/imagesharp/backers/badge.svg)](#backers) @@ -20,83 +20,41 @@ SixLabors.ImageSharp ### **ImageSharp** is a new, fully featured, fully managed, cross-platform, 2D graphics API. -Designed to democratize image processing, ImageSharp brings you an incredibly powerful yet beautifully simple API. +ImageSharp is a new, fully featured, fully managed, cross-platform, 2D graphics library. Designed to simplify image processing, ImageSharp brings you an incredibly powerful yet beautifully simple API. -Compared to `System.Drawing` we have been able to develop something much more flexible, easier to code against, and much, much less prone to memory leaks. Gone are system-wide process-locks; ImageSharp images are thread-safe and fully supported in web environments. +ImageSharp is designed from the ground up to be flexible and extensible. The library provides API endpoints for common image processing operations and the building blocks to allow for the development of addtional operations. -Built against .NET Standard 1.3, ImageSharp can be used in device, cloud, and embedded/IoT scenarios. +Built against [.NET Standard 1.3](https://docs.microsoft.com/en-us/dotnet/standard/net-standard), ImageSharp can be used in device, cloud, and embedded/IoT scenarios. -### Documentation -For all SixLabors projects, including ImageSharp: -https://sixlabors.github.io/docs/ - -### Installation -Install stable releases via Nuget; development releases are available via MyGet. +### License + +- ImageSharp is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0) +- In addition to this license, ImageSharp is offered under a commercial license. +Please visit https://sixlabors.com/pricing for details. +- Open Source projects who whave taken a dependency on ImageSharp prior to adoption of the AGPLv3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). -| Package Name | Release (NuGet) | Nightly (MyGet) | -|--------------------------------|-----------------|-----------------| -| `SixLabors.ImageSharp` | [![NuGet](https://img.shields.io/nuget/v/SixLabors.ImageSharp.svg)](https://www.nuget.org/packages/SixLabors.ImageSharp/) | [![MyGet](https://img.shields.io/myget/sixlabors/v/SixLabors.ImageSharp.svg)](https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp) | - -### Packages +### Documentation -The **ImageSharp** library is made up of multiple packages: -- **SixLabors.ImageSharp** - - Contains the generic `Image` class, PixelFormats, Primitives, Configuration, and other core functionality - - The `IImageFormat` interface, Jpeg, Png, Bmp, and Gif formats - - Transform methods like Resize, Crop, Skew, Rotate - anything that alters the dimensions of the image - - Non-transform methods like Gaussian Blur, Pixelate, Edge Detection - anything that maintains the original image dimensions +- [Detailed documentation](https://sixlabors.github.io/docs/) for the ImageSharp API is available. This includes additional conceptual documentation to help you get started. +- Our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) is also available containing buildable code samples demonstrating commmon activities. ### Questions? -- Do you have questions? We are happy to help! Please [join our gitter channel](https://gitter.im/ImageSharp/General), or ask them on [stackoverflow](https://stackoverflow.com) using the `ImageSharp` tag. **Do not** open issues for questions! +- Do you have questions? We are happy to help! Please [join our Gitter channel](https://gitter.im/ImageSharp/General), or ask them on [Stack Overflow](https://stackoverflow.com) using the `ImageSharp` tag. Please do not open issues for questions. - Please read our [Contribution Guide](https://github.com/SixLabors/ImageSharp/blob/master/.github/CONTRIBUTING.md) before opening issues or pull requests! ### Code of Conduct This project has adopted the code of conduct defined by the [Contributor Covenant](https://contributor-covenant.org/) to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). -### API - -Our API is designed to be simple to consume. Here's an example of the code required to resize an image using the default Bicubic resampler then turn the colors into their grayscale equivalent using the BT709 standard matrix. - -On platforms supporting netstandard 1.3+ - -```csharp -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.Processing; -using SixLabors.ImageSharp.PixelFormats; +### Installation -// Image.Load(string path) is a shortcut for our default type. -// Other pixel formats use Image.Load(string path)) -using (Image image = Image.Load("foo.jpg")) -{ - image.Mutate(x => x - .Resize(image.Width / 2, image.Height / 2) - .Grayscale()); - image.Save("bar.jpg"); // Automatic encoder selected based on extension. -} -``` - -Setting individual pixel values can be performed as follows: - -```csharp -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.PixelFormats; - -// Individual pixels -using (var image = new Image(400, 400)) -{ - image[200, 200] = Rgba32.White; -} -``` - -`Rgba32` is our default PixelFormat, equivalent to `System.Drawing Color`. For advanced pixel format usage there are multiple [PixelFormat implementations](https://github.com/SixLabors/ImageSharp/tree/master/src/ImageSharp/PixelFormats) available allowing developers to implement their own color models in the same manner as Microsoft XNA Game Studio and MonoGame. +Install stable releases via Nuget; development releases are available via MyGet. -For more examples check out: -- [Our Documentation](https://sixlabors.github.io/docs/) -- Our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) -- The [beta1 blog post](https://sixlabors.com/blog/announcing-imagesharp-beta-1/) +| Package Name | Release (NuGet) | Nightly (MyGet) | +|--------------------------------|-----------------|-----------------| +| `SixLabors.ImageSharp` | [![NuGet](https://img.shields.io/nuget/v/SixLabors.ImageSharp.svg)](https://www.nuget.org/packages/SixLabors.ImageSharp/) | [![MyGet](https://img.shields.io/myget/sixlabors/v/SixLabors.ImageSharp.svg)](https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp) | ### Manual build @@ -123,8 +81,6 @@ If working with Windows please ensure that you have enabled log file paths in gi git config --system core.longpaths true ``` -### Submodules - This repository contains [git submodules](https://blog.github.com/2016-02-01-working-with-submodules/). To add the submodules to the project, navigate to the repository root and type: ``` bash @@ -137,81 +93,11 @@ Please... Spread the word, contribute algorithms, submit performance improvement ### The ImageSharp Team -Grand High Eternal Dictator +Project Owner - [James Jackson-South](https://github.com/jimbobsquarepants) Core Team - [Dirk Lemstra](https://github.com/dlemstra) - [Anton Firsov](https://github.com/antonfirsov) - [Scott Williams](https://github.com/tocsoft) -- [Brian Popow](https://github.com/brianpopow) - -### Backers - -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/imagesharp#backer)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -### Sponsors - -Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/imagesharp#sponsor)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- [Brian Popow](https://github.com/brianpopow) \ No newline at end of file From faf1a67fcc64a42d3af35cba08dc9cda42055d2a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 19 Apr 2020 14:03:49 +0100 Subject: [PATCH 011/130] Bump font --- README.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 820ceb11b..fcd5fed2d 100644 --- a/README.md +++ b/README.md @@ -27,28 +27,28 @@ ImageSharp is designed from the ground up to be flexible and extensible. The lib Built against [.NET Standard 1.3](https://docs.microsoft.com/en-us/dotnet/standard/net-standard), ImageSharp can be used in device, cloud, and embedded/IoT scenarios. -### License +## License - ImageSharp is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0) - In addition to this license, ImageSharp is offered under a commercial license. Please visit https://sixlabors.com/pricing for details. - Open Source projects who whave taken a dependency on ImageSharp prior to adoption of the AGPLv3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). -### Documentation +## Documentation - [Detailed documentation](https://sixlabors.github.io/docs/) for the ImageSharp API is available. This includes additional conceptual documentation to help you get started. - Our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) is also available containing buildable code samples demonstrating commmon activities. -### Questions? +## Questions? - Do you have questions? We are happy to help! Please [join our Gitter channel](https://gitter.im/ImageSharp/General), or ask them on [Stack Overflow](https://stackoverflow.com) using the `ImageSharp` tag. Please do not open issues for questions. - Please read our [Contribution Guide](https://github.com/SixLabors/ImageSharp/blob/master/.github/CONTRIBUTING.md) before opening issues or pull requests! -### Code of Conduct +## Code of Conduct This project has adopted the code of conduct defined by the [Contributor Covenant](https://contributor-covenant.org/) to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). -### Installation +## Installation Install stable releases via Nuget; development releases are available via MyGet. @@ -56,7 +56,7 @@ Install stable releases via Nuget; development releases are available via MyGet. |--------------------------------|-----------------|-----------------| | `SixLabors.ImageSharp` | [![NuGet](https://img.shields.io/nuget/v/SixLabors.ImageSharp.svg)](https://www.nuget.org/packages/SixLabors.ImageSharp/) | [![MyGet](https://img.shields.io/myget/sixlabors/v/SixLabors.ImageSharp.svg)](https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp) | -### Manual build +## Manual build If you prefer, you can compile ImageSharp yourself (please do and help!) @@ -87,16 +87,13 @@ This repository contains [git submodules](https://blog.github.com/2016-02-01-wor git submodule update --init --recursive ``` -### How can you help? +## How can you help? Please... Spread the word, contribute algorithms, submit performance improvements, unit tests, no input is too little. Make sure to read our [Contribution Guide](https://github.com/SixLabors/ImageSharp/blob/master/.github/CONTRIBUTING.md) before opening a PR. -### The ImageSharp Team +## The ImageSharp Team -Project Owner - [James Jackson-South](https://github.com/jimbobsquarepants) - -Core Team - [Dirk Lemstra](https://github.com/dlemstra) - [Anton Firsov](https://github.com/antonfirsov) - [Scott Williams](https://github.com/tocsoft) From ff2d59ea08cf18441698271e083e16d0122e63e5 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 20 Apr 2020 00:02:54 +0100 Subject: [PATCH 012/130] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fcd5fed2d..5e48aaa47 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

-SixLabors.ImageSharp +SixLabors.ImageSharp
SixLabors.ImageSharp

@@ -30,16 +30,16 @@ Built against [.NET Standard 1.3](https://docs.microsoft.com/en-us/dotnet/standa ## License - ImageSharp is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0) -- In addition to this license, ImageSharp is offered under a commercial license. +- An alternative Commercial License can be purchased for Closed Source projects and applications. Please visit https://sixlabors.com/pricing for details. -- Open Source projects who whave taken a dependency on ImageSharp prior to adoption of the AGPLv3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). +- Open Source projects who whave taken a dependency on ImageSharp prior to adoption of the AGPL v3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). ## Documentation - [Detailed documentation](https://sixlabors.github.io/docs/) for the ImageSharp API is available. This includes additional conceptual documentation to help you get started. - Our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) is also available containing buildable code samples demonstrating commmon activities. -## Questions? +## Questions - Do you have questions? We are happy to help! Please [join our Gitter channel](https://gitter.im/ImageSharp/General), or ask them on [Stack Overflow](https://stackoverflow.com) using the `ImageSharp` tag. Please do not open issues for questions. - Please read our [Contribution Guide](https://github.com/SixLabors/ImageSharp/blob/master/.github/CONTRIBUTING.md) before opening issues or pull requests! From e7f65b940e9e0ca070b2c1d7e4cc5d15fef3798f Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 22 Apr 2020 16:22:01 +0100 Subject: [PATCH 013/130] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 5e48aaa47..68c574652 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,6 @@ SixLabors.ImageSharp [![License: AGPL v3](https://img.shields.io/badge/license-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ImageSharp/General?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=flat&logo=twitter)](https://twitter.com/intent/tweet?hashtags=imagesharp,dotnet,oss&text=ImageSharp.+A+new+cross-platform+2D+graphics+API+in+C%23&url=https%3a%2f%2fgithub.com%2fSixLabors%2fImageSharp&via=sixlabors) -[![OpenCollective](https://opencollective.com/imagesharp/backers/badge.svg)](#backers) -[![OpenCollective](https://opencollective.com/imagesharp/sponsors/badge.svg)](#sponsors) From 6555e5499b88af9422c33bf3b7a18bd268a97ccf Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 24 Apr 2020 20:12:34 +0100 Subject: [PATCH 014/130] Fix nuget package icon. --- Directory.Build.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 50c09fbb3..388f87357 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -84,7 +84,7 @@ 8.0 en true - icon.png + sixlabors.imagesharp.128.png Apache-2.0 $(RepositoryUrl) true @@ -107,7 +107,7 @@ - + From 159b18b16d00f2cbff02761b3b3e7a5893061f5e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 24 Apr 2020 22:42:01 +0100 Subject: [PATCH 015/130] Update package license details --- Directory.Build.props | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 388f87357..b82b3c106 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -78,14 +78,14 @@ $(MSBuildThisFileDirectory)shared-infrastructure/SixLabors.snk - Copyright © Six Labors and Contributors + Copyright © Six Labors strict;IOperation true 8.0 en true sixlabors.imagesharp.128.png - Apache-2.0 + LICENSE.md $(RepositoryUrl) true git @@ -108,6 +108,7 @@ + From 6f2304bf6f9b80456c764aa06284b5b2f4ae26dc Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sun, 26 Apr 2020 16:19:50 +0200 Subject: [PATCH 016/130] Identify now parses zTXt and iTXt chunks --- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 6 ++ .../Formats/Png/PngMetadataTests.cs | 59 +++++++++++-------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index 0247dba35..7d9011a55 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -273,6 +273,12 @@ namespace SixLabors.ImageSharp.Formats.Png case PngChunkType.Text: this.ReadTextChunk(pngMetadata, chunk.Data.Array.AsSpan(0, chunk.Length)); break; + case PngChunkType.CompressedText: + this.ReadCompressedTextChunk(pngMetadata, chunk.Data.Array.AsSpan(0, chunk.Length)); + break; + case PngChunkType.InternationalText: + this.ReadInternationalTextChunk(pngMetadata, chunk.Data.Array.AsSpan(0, chunk.Length)); + break; case PngChunkType.End: this.isEndChunkReached = true; break; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs index 5f5d5fd3d..ee4e4f3c2 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs @@ -56,17 +56,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png using (Image image = provider.GetImage(new PngDecoder())) { PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && m.LanguageTag.Equals("chinese")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + VerifyTextDataIsPresent(meta); } } @@ -85,17 +75,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png using (Image image = decoder.Decode(Configuration.Default, memoryStream)) { PngMetadata meta = image.Metadata.GetFormatMetadata(PngFormat.Instance); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && m.LanguageTag.Equals("chinese")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); - Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + VerifyTextDataIsPresent(meta); } } } @@ -178,7 +158,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png IgnoreMetadata = true }; - var testFile = TestFile.Create(TestImages.Png.Blur); + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); using (Image image = testFile.CreateRgba32Image(options)) { @@ -220,5 +200,38 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png Assert.Equal(resolutionUnit, meta.ResolutionUnits); } } + + [Theory] + [InlineData(TestImages.Png.PngWithMetadata)] + public void Identify_ReadsTextData(string imagePath) + { + var testFile = TestFile.Create(imagePath); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + IImageInfo imageInfo = Image.Identify(stream); + Assert.NotNull(imageInfo); + PngMetadata meta = imageInfo.Metadata.GetFormatMetadata(PngFormat.Instance); + VerifyTextDataIsPresent(meta); + } + } + + private static void VerifyTextDataIsPresent(PngMetadata meta) + { + Assert.NotNull(meta); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Comment") && m.Value.Equals("comment")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Author") && m.Value.Equals("ImageSharp")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Copyright") && m.Value.Equals("ImageSharp")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Title") && m.Value.Equals("unittest")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("Description") && m.Value.Equals("compressed-text")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("International") && m.Value.Equals("'e', mu'tlheghvam, ghaH yu'") && + m.LanguageTag.Equals("x-klingon") && m.TranslatedKeyword.Equals("warning")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("International2") && m.Value.Equals("ИМАГЕШАРП") && m.LanguageTag.Equals("rus")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational") && m.Value.Equals("la plume de la mante") && + m.LanguageTag.Equals("fra") && m.TranslatedKeyword.Equals("foobar")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("CompressedInternational2") && m.Value.Equals("這是一個考驗") && + m.LanguageTag.Equals("chinese")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoLang") && m.Value.Equals("this text chunk is missing a language tag")); + Assert.Contains(meta.TextData, m => m.Keyword.Equals("NoTranslatedKeyword") && m.Value.Equals("dieser chunk hat kein übersetztes Schlüßelwort")); + } } } From 03547d078c5d47a4bcc8185a869daf1237baeab0 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sun, 26 Apr 2020 17:32:22 +0200 Subject: [PATCH 017/130] Identify reads now exif data --- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 9 +++ .../Formats/Png/PngMetadataTests.cs | 58 ++++++++++++++++++ tests/Images/Input/Png/PngWithMetaData.png | Bin 805 -> 751 bytes 3 files changed, 67 insertions(+) diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index 7d9011a55..a5bcff3b2 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -278,6 +278,15 @@ namespace SixLabors.ImageSharp.Formats.Png break; case PngChunkType.InternationalText: this.ReadInternationalTextChunk(pngMetadata, chunk.Data.Array.AsSpan(0, chunk.Length)); + break; + case PngChunkType.Exif: + if (!this.ignoreMetadata) + { + var exifData = new byte[chunk.Length]; + Buffer.BlockCopy(chunk.Data.Array, 0, exifData, 0, chunk.Length); + metadata.ExifProfile = new ExifProfile(exifData); + } + break; case PngChunkType.End: this.isEndChunkReached = true; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs index ee4e4f3c2..bf4206600 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Metadata; +using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; using Xunit; @@ -129,6 +130,40 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } + [Theory] + [WithFile(TestImages.Png.PngWithMetadata, PixelTypes.Rgba32)] + public void Decode_ReadsExifData(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + var decoder = new PngDecoder + { + IgnoreMetadata = false + }; + + using (Image image = provider.GetImage(decoder)) + { + Assert.NotNull(image.Metadata.ExifProfile); + ExifProfile exif = image.Metadata.ExifProfile; + VerifyExifDataIsPresent(exif); + } + } + + [Theory] + [WithFile(TestImages.Png.PngWithMetadata, PixelTypes.Rgba32)] + public void Decode_IgnoresExifData_WhenIgnoreMetadataIsTrue(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + var decoder = new PngDecoder + { + IgnoreMetadata = true + }; + + using (Image image = provider.GetImage(decoder)) + { + Assert.Null(image.Metadata.ExifProfile); + } + } + [Fact] public void Decode_IgnoreMetadataIsFalse_TextChunkIsRead() { @@ -215,6 +250,29 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } + [Theory] + [InlineData(TestImages.Png.PngWithMetadata)] + public void Identify_ReadsExifData(string imagePath) + { + var testFile = TestFile.Create(imagePath); + using (var stream = new MemoryStream(testFile.Bytes, false)) + { + IImageInfo imageInfo = Image.Identify(stream); + Assert.NotNull(imageInfo); + Assert.NotNull(imageInfo.Metadata.ExifProfile); + ExifProfile exif = imageInfo.Metadata.ExifProfile; + VerifyExifDataIsPresent(exif); + } + } + + private static void VerifyExifDataIsPresent(ExifProfile exif) + { + Assert.Equal(1, exif.Values.Count); + IExifValue software = exif.GetValue(ExifTag.Software); + Assert.NotNull(software); + Assert.Equal("ImageSharp", software.Value); + } + private static void VerifyTextDataIsPresent(PngMetadata meta) { Assert.NotNull(meta); diff --git a/tests/Images/Input/Png/PngWithMetaData.png b/tests/Images/Input/Png/PngWithMetaData.png index af417b1f307329d72b536ab69170c1a06399d745..b5d0d344d7cf111b4f5d1784fac9b4fb1439b61a 100644 GIT binary patch delta 251 zcmZ3=_MUZu3J-IDPl#)2Qgob=n8m~ziHRx#2I{F1o@t(*S_~Wv3=E76hKx)M+(4ET z5UT>QXKrG8YH&tkQ2~&1JGcAg#9gH-(j~4DB`&GO$wiq3C7Jno49WSq1x2aF#i=Q} zC8-r9q8%#tCdV-PFj`Jt$tVLfCaoxuAuT^YDY1wlCsCmwr!+TJAthA-$j(j7D@ncM z6&^PE6XOC#TcCPrEhC^+$r+h>sl}-b&QSVg!^~$h)<4=1|x&vL^h2(ALIT{R%G;HbetT(B(2B5$dFc)$dHzw zpOjbx)N|T1MB{|!S>I3(&(IT|At!v#XnV3Uc>ZFSSvfU1eDZq61&nS$jk1P}49OXp zd8x&z49-xxVovog6zWSG$*yO&byLjPG(bE!!a%Y|ZmJF38lczFSb250k`njxg HN@xNA#T9AI From 386d942e1203439580ce9b182991a3f10016d125 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sun, 26 Apr 2020 20:29:30 +0200 Subject: [PATCH 018/130] Fix png test image: Some text chunks unintentional changed to none compressed --- tests/Images/Input/Png/PngWithMetaData.png | Bin 751 -> 777 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/Images/Input/Png/PngWithMetaData.png b/tests/Images/Input/Png/PngWithMetaData.png index b5d0d344d7cf111b4f5d1784fac9b4fb1439b61a..2f167bd794368f92d6c86014deb14530cce4b4c5 100644 GIT binary patch delta 173 zcmaFQ+Q~NIudYf}NJNQCYH@N=W3VjE<87n56X>7#Y%v5*gC+^OF*bfO<}QhG?A7JnI|k;Td|uGvtKt8EsEi z2G3vYGApMhhfiM5xPZ|Os8QCCks&!FGcUC`mBATGSInutY4G`G&sYC46Pw%@br&!E VDSBGMQ0~kVz>=Y|Wb#y|C;)~DL6QIf delta 147 zcmeBVd(S%IuZnbuYeb1lYH@N=WlGHn1;bD^xFfL%U1!|Dh tU|>kj$jnPEPGxY0(k~lkKAW-r$&QAn4c#vqnqRJ*zH@<>)a3O{Q2 Date: Mon, 27 Apr 2020 11:55:47 +0200 Subject: [PATCH 019/130] Write gamma chunk before palette --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index fcbbc6697..34d5ee773 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -149,10 +149,10 @@ namespace SixLabors.ImageSharp.Formats.Png stream.Write(PngConstants.HeaderBytes); this.WriteHeaderChunk(stream); + this.WriteGammaChunk(stream); this.WritePaletteChunk(stream, quantized); this.WriteTransparencyChunk(stream, pngMetadata); this.WritePhysicalChunk(stream, metadata); - this.WriteGammaChunk(stream); this.WriteExifChunk(stream, metadata); this.WriteTextChunks(stream, pngMetadata); this.WriteDataChunks(image.Frames.RootFrame, quantized, stream); @@ -538,6 +538,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Writes the palette chunk to the stream. + /// Should be written before the first IDAT chunk. /// /// The pixel format. /// The containing image data. @@ -595,6 +596,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Writes the physical dimension information to the stream. + /// Should be written before IDAT chunk. /// /// The containing image data. /// The image metadata. @@ -716,6 +718,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Writes the gamma information to the stream. + /// Should be written before PLTE and IDAT chunk. /// /// The containing image data. private void WriteGammaChunk(Stream stream) @@ -733,6 +736,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Writes the transparency chunk to the stream. + /// Should be written after PLTE and before IDAT. /// /// The containing image data. /// The image metadata. From 7af7d41e1bda9160446e971d4e775b84ffacb123 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Mon, 27 Apr 2020 11:56:15 +0200 Subject: [PATCH 020/130] Add tests to ensure chunk order --- .../Formats/Png/PngEncoderTests.cs | 142 ++++++++++++++++-- tests/Images/Input/Png/PngWithMetaData.png | Bin 777 -> 60544 bytes 2 files changed, 130 insertions(+), 12 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 5a31d2d93..0407ef295 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -2,6 +2,9 @@ // Licensed under the Apache License, Version 2.0. // ReSharper disable InconsistentNaming + +using System; +using System.Buffers.Binary; using System.IO; using System.Linq; @@ -18,6 +21,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { public class PngEncoderTests { + private static PngEncoder PngEncoder => new PngEncoder(); + public static readonly TheoryData PngBitDepthFiles = new TheoryData { @@ -234,8 +239,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { using (Stream stream = new MemoryStream()) { - var encoder = new PngEncoder(); - encoder.Encode(provider.GetImage(), stream); + PngEncoder.Encode(provider.GetImage(), stream); stream.Seek(0, SeekOrigin.Begin); @@ -281,7 +285,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png using (Image image = provider.GetImage()) using (var ms = new MemoryStream()) { - image.Save(ms, new PngEncoder()); + image.Save(ms, PngEncoder); byte[] data = ms.ToArray().Take(8).ToArray(); byte[] expected = @@ -304,14 +308,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png [MemberData(nameof(RatioFiles))] public void Encode_PreserveRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit) { - var options = new PngEncoder(); - var testFile = TestFile.Create(imagePath); using (Image input = testFile.CreateRgba32Image()) { using (var memStream = new MemoryStream()) { - input.Save(memStream, options); + input.Save(memStream, PngEncoder); memStream.Position = 0; using (var output = Image.Load(memStream)) @@ -329,14 +331,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png [MemberData(nameof(PngBitDepthFiles))] public void Encode_PreserveBits(string imagePath, PngBitDepth pngBitDepth) { - var options = new PngEncoder(); - var testFile = TestFile.Create(imagePath); using (Image input = testFile.CreateRgba32Image()) { using (var memStream = new MemoryStream()) { - input.Save(memStream, options); + input.Save(memStream, PngEncoder); memStream.Position = 0; using (var output = Image.Load(memStream)) @@ -353,8 +353,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png [MemberData(nameof(PngTrnsFiles))] public void Encode_PreserveTrns(string imagePath, PngBitDepth pngBitDepth, PngColorType pngColorType) { - var options = new PngEncoder(); - var testFile = TestFile.Create(imagePath); using (Image input = testFile.CreateRgba32Image()) { @@ -363,7 +361,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png using (var memStream = new MemoryStream()) { - input.Save(memStream, options); + input.Save(memStream, PngEncoder); memStream.Position = 0; using (var output = Image.Load(memStream)) { @@ -404,6 +402,126 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } + [Fact] + public void HeaderChunk_ComesFirst() + { + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + input.Save(memStream, PngEncoder); + memStream.Position = 0; + + // Skip header. + Span bytesSpan = memStream.ToArray().AsSpan(8); + BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.Equal(PngChunkType.Header, type); + } + + [Fact] + public void EndChunk_IsLast() + { + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + input.Save(memStream, PngEncoder); + memStream.Position = 0; + + // Skip header. + Span bytesSpan = memStream.ToArray().AsSpan(8); + + bool endChunkFound = false; + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.False(endChunkFound); + if (type == PngChunkType.End) + { + endChunkFound = true; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + + [Theory] + [InlineData(PngChunkType.Gamma)] + [InlineData(PngChunkType.Chroma)] + [InlineData(PngChunkType.EmbeddedColorProfile)] + [InlineData(PngChunkType.SignificantBits)] + [InlineData(PngChunkType.StandardRgbColourSpace)] + public void Chunk_ComesBeforePlteAndIDat(object chunkTypeObj) + { + var chunkType = (PngChunkType)chunkTypeObj; + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + input.Save(memStream, PngEncoder); + memStream.Position = 0; + + // Skip header. + Span bytesSpan = memStream.ToArray().AsSpan(8); + + bool palFound = false; + bool dataFound = false; + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + if (chunkType == type) + { + Assert.False(palFound || dataFound, $"{chunkType} chunk should come before data and palette chunk"); + } + + switch (type) + { + case PngChunkType.Data: + dataFound = true; + break; + case PngChunkType.Palette: + palFound = true; + break; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + + [Theory] + [InlineData(PngChunkType.Physical)] + [InlineData(PngChunkType.SuggestedPalette)] + public void Chunk_ComesBeforeIDat(object chunkTypeObj) + { + var chunkType = (PngChunkType)chunkTypeObj; + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + input.Save(memStream, PngEncoder); + memStream.Position = 0; + + // Skip header. + Span bytesSpan = memStream.ToArray().AsSpan(8); + + bool dataFound = false; + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + if (chunkType == type) + { + Assert.False(dataFound, $"{chunkType} chunk should come before data chunk"); + } + + if (type == PngChunkType.Data) + { + dataFound = true; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + [Theory] [WithTestPatternImages(587, 821, PixelTypes.Rgba32)] [WithTestPatternImages(677, 683, PixelTypes.Rgba32)] diff --git a/tests/Images/Input/Png/PngWithMetaData.png b/tests/Images/Input/Png/PngWithMetaData.png index 2f167bd794368f92d6c86014deb14530cce4b4c5..b8a8b6d6b1f3118829f6a5e6b7798da71777459c 100644 GIT binary patch delta 60290 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

EulU*NE<2t^V14f# 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 vQchFr8wnRXh``fV00000NkvXXu0mjfEO;#X delta 72 zcmZp;$=t~{LB)_cz$e7DG$}gHNX&wPfq}EYBeIx*fm;}a85w5HkpK#^q&xaLGB9lH Y=l+w(x_Rfz)l8fWp00i_>zopr0Egcb6#xJL From 7161aa6f27aed77f4a119d96f386132c2a8b06f4 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Mon, 27 Apr 2020 12:41:23 +0200 Subject: [PATCH 021/130] Fix warning --- tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 0407ef295..fb5dc9a63 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. // ReSharper disable InconsistentNaming - using System; using System.Buffers.Binary; using System.IO; From 6545bbd77e90b18440f5d525995e5aafc387644e Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Mon, 27 Apr 2020 19:11:29 +0200 Subject: [PATCH 022/130] Remove obsolete PngTextProperties from png metadata --- src/ImageSharp/Formats/Png/PngMetadata.cs | 24 +---------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngMetadata.cs b/src/ImageSharp/Formats/Png/PngMetadata.cs index 341fc53ed..1e4567548 100644 --- a/src/ImageSharp/Formats/Png/PngMetadata.cs +++ b/src/ImageSharp/Formats/Png/PngMetadata.cs @@ -91,34 +91,12 @@ namespace SixLabors.ImageSharp.Formats.Png public bool HasTransparency { get; set; } ///

- /// Gets or sets the collection of text data stored within the iTXt, tEXt, and zTXt chunks. + /// Gets or sets the collection of text data stored within the iTXt, tEXt, and zTXt chunks. /// Used for conveying textual information associated with the image. /// public IList TextData { get; set; } = new List(); - /// - /// Gets the list of png text properties for storing meta information about this image. - /// - public IList PngTextProperties { get; } = new List(); - /// public IDeepCloneable DeepClone() => new PngMetadata(this); - - internal bool TryGetPngTextProperty(string keyword, out PngTextData result) - { - for (int i = 0; i < this.TextData.Count; i++) - { - if (this.TextData[i].Keyword == keyword) - { - result = this.TextData[i]; - - return true; - } - } - - result = default; - - return false; - } } } From 8c9ec4f3a3a10ea8563ba201ec6f49a433435297 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 28 Apr 2020 10:15:34 +0200 Subject: [PATCH 023/130] Throw exception when width or height is zero --- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index de5aa7884..e0d8b3cd9 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -6,7 +6,7 @@ using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; -using SixLabors.ImageSharp.Advanced; + using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.Formats.Gif /// Decodes the stream to the image. ///
/// The pixel format. - /// The stream containing image data. + /// The stream containing image data. /// The decoded image public Image Decode(Stream stream) where TPixel : unmanaged, IPixel @@ -241,6 +241,10 @@ namespace SixLabors.ImageSharp.Formats.Gif this.stream.Read(this.buffer, 0, 9); this.imageDescriptor = GifImageDescriptor.Parse(this.buffer); + if (this.imageDescriptor.Height == 0 || this.imageDescriptor.Width == 0) + { + GifThrowHelper.ThrowInvalidImageContentException("Width or height should not be 0"); + } } /// From 08b5c4cb8331fbba13a51ac7139975db83853851 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 28 Apr 2020 10:26:32 +0200 Subject: [PATCH 024/130] Change ImageFormatException to InvalidImageContentException --- .../Exceptions/InvalidImageContentException.cs | 14 ++++++++++++++ src/ImageSharp/Formats/Bmp/BmpDecoder.cs | 4 +--- src/ImageSharp/Formats/Gif/GifDecoder.cs | 4 +--- src/ImageSharp/Formats/Jpeg/JpegDecoder.cs | 4 +--- src/ImageSharp/Formats/Png/PngDecoder.cs | 4 +--- src/ImageSharp/Formats/Tga/TgaDecoder.cs | 4 +--- 6 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs index 7069e8982..8be13919f 100644 --- a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs +++ b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs @@ -1,6 +1,8 @@ // Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. +using System; + namespace SixLabors.ImageSharp { /// @@ -18,5 +20,17 @@ namespace SixLabors.ImageSharp : base(errorMessage) { } + + /// + /// Initializes a new instance of the class with the name of the + /// parameter that causes this exception. + /// + /// The error message that explains the reason for this exception. + /// The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) + /// if no inner exception is specified. + public InvalidImageContentException(string errorMessage, Exception innerException) + : base(errorMessage, innerException) + { + } } } diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs index a956f19c7..cafe10106 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs @@ -43,9 +43,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp { Size dims = decoder.Dimensions; - // TODO: use InvalidImageContentException here, if we decide to define it - // https://github.com/SixLabors/ImageSharp/issues/1110 - throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}. This error can happen for very large RLE bitmaps, which are not supported.", ex); + throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}. This error can happen for very large RLE bitmaps, which are not supported.", ex); } } diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index caa076553..358d68e27 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -38,9 +38,7 @@ namespace SixLabors.ImageSharp.Formats.Gif { Size dims = decoder.Dimensions; - // TODO: use InvalidImageContentException here, if we decide to define it - // https://github.com/SixLabors/ImageSharp/issues/1110 - throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs index b1144508e..424890cc2 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs @@ -32,9 +32,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { (int w, int h) = (decoder.ImageWidth, decoder.ImageHeight); - // TODO: use InvalidImageContentException here, if we decide to define it - // https://github.com/SixLabors/ImageSharp/issues/1110 - throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex); + throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex); } } diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs index d605577e7..74903bcc2 100644 --- a/src/ImageSharp/Formats/Png/PngDecoder.cs +++ b/src/ImageSharp/Formats/Png/PngDecoder.cs @@ -54,9 +54,7 @@ namespace SixLabors.ImageSharp.Formats.Png { Size dims = decoder.Dimensions; - // TODO: use InvalidImageContentException here, if we decide to define it - // https://github.com/SixLabors/ImageSharp/issues/1110 - throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); } } diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index c3b8526ce..b61a6ae28 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -28,9 +28,7 @@ namespace SixLabors.ImageSharp.Formats.Tga { Size dims = decoder.Dimensions; - // TODO: use InvalidImageContentException here, if we decide to define it - // https://github.com/SixLabors/ImageSharp/issues/1110 - throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); } } From b9a5c92cc1fc86f0348a3a1205a0c2af37d88e82 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 28 Apr 2020 10:48:28 +0200 Subject: [PATCH 025/130] Minor formatting change to get GitVersion going --- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index de5aa7884..2e849ba1b 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.Formats.Gif /// Decodes the stream to the image. /// /// The pixel format. - /// The stream containing image data. + /// The stream containing image data. /// The decoded image public Image Decode(Stream stream) where TPixel : unmanaged, IPixel From 08de04b505ca60620b969e7cf73f673df90bb378 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 28 Apr 2020 11:07:57 +0200 Subject: [PATCH 026/130] Change test expectations due to exception change --- tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs index 85cdf6d11..f63fc0a16 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs @@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp where TPixel : unmanaged, IPixel { provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10); - ImageFormatException ex = Assert.Throws(() => provider.GetImage(BmpDecoder)); + InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(BmpDecoder)); Assert.IsType(ex.InnerException); } diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs index b3a99aa1c..80675a5eb 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs @@ -179,7 +179,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif where TPixel : unmanaged, IPixel { provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10); - ImageFormatException ex = Assert.Throws(() => provider.GetImage(GifDecoder)); + InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(GifDecoder)); Assert.IsType(ex.InnerException); } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index 25cf5dd37..a35bb177c 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -107,7 +107,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg where TPixel : unmanaged, IPixel { provider.LimitAllocatorBufferCapacity().InBytesSqrt(10); - ImageFormatException ex = Assert.Throws(() => provider.GetImage(JpegDecoder)); + InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(JpegDecoder)); this.Output.WriteLine(ex.Message); Assert.IsType(ex.InnerException); } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs index 6eb6e93db..72b27ec5d 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs @@ -397,7 +397,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png where TPixel : unmanaged, IPixel { provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10); - ImageFormatException ex = Assert.Throws(() => provider.GetImage(PngDecoder)); + InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(PngDecoder)); Assert.IsType(ex.InnerException); } diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs index 840bb55f2..6f886b73d 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs @@ -740,7 +740,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga where TPixel : unmanaged, IPixel { provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10); - ImageFormatException ex = Assert.Throws(() => provider.GetImage(TgaDecoder)); + InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(TgaDecoder)); Assert.IsType(ex.InnerException); } From 210c4817e45e328d18b5216d867418aa2ea50dff Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 28 Apr 2020 10:15:58 +0200 Subject: [PATCH 027/130] Additional gif test cases --- src/ImageSharp/Formats/Gif/README.md | 8 +- .../Formats/Gif/GifDecoderTests.cs | 82 ++++++++++-------- tests/ImageSharp.Tests/TestImages.cs | 7 ++ tests/Images/Input/Gif/image-zero-height.gif | Bin 0 -> 30 bytes tests/Images/Input/Gif/image-zero-size.gif | Bin 0 -> 30 bytes tests/Images/Input/Gif/image-zero-width.gif | Bin 0 -> 30 bytes tests/Images/Input/Gif/max-height.gif | Bin 0 -> 405 bytes tests/Images/Input/Gif/max-width.gif | Bin 0 -> 405 bytes 8 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 tests/Images/Input/Gif/image-zero-height.gif create mode 100644 tests/Images/Input/Gif/image-zero-size.gif create mode 100644 tests/Images/Input/Gif/image-zero-width.gif create mode 100644 tests/Images/Input/Gif/max-height.gif create mode 100644 tests/Images/Input/Gif/max-width.gif diff --git a/src/ImageSharp/Formats/Gif/README.md b/src/ImageSharp/Formats/Gif/README.md index d47a4c683..eeda20c06 100644 --- a/src/ImageSharp/Formats/Gif/README.md +++ b/src/ImageSharp/Formats/Gif/README.md @@ -1,4 +1,6 @@ -Encoder/Decoder adapted and extended from: +Encoder/Decoder adapted and extended from: -https://github.com/yufeih/Nine.Imaging/ -https://imagetools.codeplex.com/ +- [Nine.Imaging](https://github.com/yufeih/Nine.Imaging/) +- [imagetools.codeplex](https://imagetools.codeplex.com/) + +A useful set of gif test images can be found at [pygif](https://github.com/robert-ancell/pygif/tree/master/test-suite) \ No newline at end of file diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs index b3a99aa1c..199c6c0b2 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs @@ -2,11 +2,9 @@ // Licensed under the Apache License, Version 2.0. using System; -using System.Collections.Generic; using System.IO; using Microsoft.DotNet.RemoteExecutor; -using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; @@ -30,32 +28,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif TestImages.Gif.Giphy, TestImages.Gif.Kumin }; - public static readonly string[] BasicVerificationFiles = - { - TestImages.Gif.Cheers, - TestImages.Gif.Rings, - - // previously DecodeBadApplicationExtensionLength: - TestImages.Gif.Issues.BadAppExtLength, - TestImages.Gif.Issues.BadAppExtLength_2, - - // previously DecodeBadDescriptorDimensionsLength: - TestImages.Gif.Issues.BadDescriptorWidth - }; - - private static readonly Dictionary BasicVerificationFrameCount = - new Dictionary - { - [TestImages.Gif.Cheers] = 93, - [TestImages.Gif.Issues.BadDescriptorWidth] = 36, - }; - - public static readonly string[] BadAppExtFiles = - { - TestImages.Gif.Issues.BadAppExtLength, - TestImages.Gif.Issues.BadAppExtLength_2 - }; - [Theory] [WithFileCollection(nameof(MultiFrameTestFiles), PixelTypes.Rgba32)] public void Decode_VerifyAllFrames(TestImageProvider provider) @@ -100,15 +72,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif } [Theory] - [WithFileCollection(nameof(BasicVerificationFiles), PixelTypes.Rgba32)] - public void Decode_VerifyRootFrameAndFrameCount(TestImageProvider provider) + [WithFile(TestImages.Gif.Cheers, PixelTypes.Rgba32, 93)] + [WithFile(TestImages.Gif.Rings, PixelTypes.Rgba32, 1)] + [WithFile(TestImages.Gif.Issues.BadDescriptorWidth, PixelTypes.Rgba32, 36)] + public void Decode_VerifyRootFrameAndFrameCount(TestImageProvider provider, int expectedFrameCount) where TPixel : unmanaged, IPixel { - if (!BasicVerificationFrameCount.TryGetValue(provider.SourceFileOrDescription, out int expectedFrameCount)) - { - expectedFrameCount = 1; - } - using (Image image = provider.GetImage()) { Assert.Equal(expectedFrameCount, image.Frames.Count); @@ -153,6 +122,35 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif } } + [Theory] + [WithFile(TestImages.Gif.ZeroSize, PixelTypes.Rgba32)] + [WithFile(TestImages.Gif.ZeroWidth, PixelTypes.Rgba32)] + [WithFile(TestImages.Gif.ZeroHeight, PixelTypes.Rgba32)] + public void Decode_WithInvalidDimensions_DoesThrowException(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + System.Exception ex = Record.Exception( + () => + { + using Image image = provider.GetImage(GifDecoder); + }); + Assert.NotNull(ex); + Assert.Contains("Width or height should not be 0", ex.Message); + } + + [Theory] + [WithFile(TestImages.Gif.MaxWidth, PixelTypes.Rgba32, 65535, 1)] + [WithFile(TestImages.Gif.MaxHeight, PixelTypes.Rgba32, 1, 65535)] + public void Decode_WithMaxDimensions_Works(TestImageProvider provider, int expectedWidth, int expectedHeight) + where TPixel : unmanaged, IPixel + { + using (Image image = provider.GetImage(GifDecoder)) + { + Assert.Equal(expectedWidth, image.Width); + Assert.Equal(expectedHeight, image.Height); + } + } + [Fact] public void CanDecodeIntermingledImages() { @@ -172,6 +170,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif } } + // https://github.com/SixLabors/ImageSharp/issues/405 + [Theory] + [WithFile(TestImages.Gif.Issues.BadAppExtLength, PixelTypes.Rgba32)] + [WithFile(TestImages.Gif.Issues.BadAppExtLength_2, PixelTypes.Rgba32)] + public void Issue405_BadApplicationExtensionBlockLength(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + using (Image image = provider.GetImage()) + { + image.DebugSave(provider); + image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider); + } + } + [Theory] [WithFile(TestImages.Gif.Giphy, PixelTypes.Rgba32)] [WithFile(TestImages.Gif.Kumin, PixelTypes.Rgba32)] diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index bec0c6624..141a8d1c3 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -397,6 +397,13 @@ namespace SixLabors.ImageSharp.Tests public const string Ratio1x4 = "Gif/base_1x4.gif"; public const string LargeComment = "Gif/large_comment.gif"; + // Test images from https://github.com/robert-ancell/pygif/tree/master/test-suite + public const string ZeroSize = "Gif/image-zero-size.gif"; + public const string ZeroHeight = "Gif/image-zero-height.gif"; + public const string ZeroWidth = "Gif/image-zero-width.gif"; + public const string MaxWidth = "Gif/max-width.gif"; + public const string MaxHeight = "Gif/max-height.gif"; + public static class Issues { public const string BadAppExtLength = "Gif/issues/issue405_badappextlength252.gif"; diff --git a/tests/Images/Input/Gif/image-zero-height.gif b/tests/Images/Input/Gif/image-zero-height.gif new file mode 100644 index 0000000000000000000000000000000000000000..ddd3c43e885ff6c1a89cddd39d4ab477600edaf2 GIT binary patch literal 30 fcmZ?wbhEHbWMp7u_`t{j1poj4*8$NWPJ=Z7YKI1a literal 0 HcmV?d00001 diff --git a/tests/Images/Input/Gif/image-zero-size.gif b/tests/Images/Input/Gif/image-zero-size.gif new file mode 100644 index 0000000000000000000000000000000000000000..8cb8c9e80f1d1d4878e2314ed9da92e61b219102 GIT binary patch literal 30 fcmZ?wbhEHbWMp7u_`t{j1poj4*8$NW&|nP!YJmoT literal 0 HcmV?d00001 diff --git a/tests/Images/Input/Gif/image-zero-width.gif b/tests/Images/Input/Gif/image-zero-width.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba61320c8a1bf1cb52572e845dc556724d333c32 GIT binary patch literal 30 gcmZ?wbhEHbWMp7u_`t{j1poj4*8$NCKoJIO0BMB=0RR91 literal 0 HcmV?d00001 diff --git a/tests/Images/Input/Gif/max-height.gif b/tests/Images/Input/Gif/max-height.gif new file mode 100644 index 0000000000000000000000000000000000000000..586d03071bbb0384dfe23646ae4a2cd34b711e6b GIT binary patch literal 405 zcmV;G0c!q7Nk%w1VF3XD|MCC;00030|Ns900093000930|Ns90|Ns90EC2ui00991 z{{RF37`oj4Fv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj@VIs;jK6uCK7Mva__cwzs&s zy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS-rwNi;^XAy=I7|?>g(+7 z?(gvN^7Hid_V@Vt`uqI-{{H|23LHqVpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$F zqsNaRLy8oJq5$&6_xL>fFh*r_Y~2g9;r=w5ZXeNRujE z%CxD|r%}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj@VIs;jK6uCK7Mva__cwzs&s zy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS-rwNi;^XAy=I7|?>g(+7 z?(gvN^7Hid_V@Vt`uqI-{{H|23LHqVpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$F zqsNaRLy8oJq5$&6_xL>fFh*r_Y~2g9;r=w5ZXeNRujE z%CxD|r% Date: Tue, 28 Apr 2020 12:31:57 +0200 Subject: [PATCH 028/130] Use ThrowHelper --- src/ImageSharp/Formats/Gif/GifDecoder.cs | 5 ++++- src/ImageSharp/Formats/Gif/GifThrowHelper.cs | 12 +++++++++++- src/ImageSharp/Formats/Jpeg/JpegDecoder.cs | 5 ++++- src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs | 9 +++++++++ src/ImageSharp/Formats/Png/PngDecoder.cs | 5 ++++- src/ImageSharp/Formats/Png/PngThrowHelper.cs | 4 ++++ src/ImageSharp/Formats/Tga/TgaDecoder.cs | 5 ++++- src/ImageSharp/Formats/Tga/TgaThrowHelper.cs | 14 ++++++++++++-- 8 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index 358d68e27..553163bd7 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -38,7 +38,10 @@ namespace SixLabors.ImageSharp.Formats.Gif { Size dims = decoder.Dimensions; - throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + GifThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; } } diff --git a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs index 1d81008a0..1b20c9f64 100644 --- a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs +++ b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. +using System; using System.Runtime.CompilerServices; namespace SixLabors.ImageSharp.Formats.Gif @@ -11,8 +12,17 @@ namespace SixLabors.ImageSharp.Formats.Gif /// Cold path optimization for throwing 's /// /// The error message for the exception. - [MethodImpl(MethodImplOptions.NoInlining)] + [MethodImpl(InliningOptions.ColdPath)] public static void ThrowInvalidImageContentException(string errorMessage) => throw new InvalidImageContentException(errorMessage); + + /// + /// Cold path optimization for throwing 's. + /// + /// The error message for the exception. + /// The exception that is the cause of the current exception, or a null reference + /// if no inner exception is specified. + [MethodImpl(InliningOptions.ColdPath)] + public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException) => throw new InvalidImageContentException(errorMessage, innerException); } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs index 424890cc2..e60901d91 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs @@ -32,7 +32,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { (int w, int h) = (decoder.ImageWidth, decoder.ImageHeight); - throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex); + JpegThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs index dd44cb2d1..da4c3f9ee 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs @@ -15,6 +15,15 @@ namespace SixLabors.ImageSharp.Formats.Jpeg [MethodImpl(InliningOptions.ColdPath)] public static void ThrowInvalidImageContentException(string errorMessage) => throw new InvalidImageContentException(errorMessage); + /// + /// Cold path optimization for throwing 's. + /// + /// The error message for the exception. + /// The exception that is the cause of the current exception, or a null reference + /// if no inner exception is specified. + [MethodImpl(InliningOptions.ColdPath)] + public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException) => throw new InvalidImageContentException(errorMessage, innerException); + /// /// Cold path optimization for throwing 's /// diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs index 74903bcc2..eceb4e592 100644 --- a/src/ImageSharp/Formats/Png/PngDecoder.cs +++ b/src/ImageSharp/Formats/Png/PngDecoder.cs @@ -54,7 +54,10 @@ namespace SixLabors.ImageSharp.Formats.Png { Size dims = decoder.Dimensions; - throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + PngThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; } } diff --git a/src/ImageSharp/Formats/Png/PngThrowHelper.cs b/src/ImageSharp/Formats/Png/PngThrowHelper.cs index b0a2571ea..a72a4a0d8 100644 --- a/src/ImageSharp/Formats/Png/PngThrowHelper.cs +++ b/src/ImageSharp/Formats/Png/PngThrowHelper.cs @@ -11,6 +11,10 @@ namespace SixLabors.ImageSharp.Formats.Png ///
internal static class PngThrowHelper { + [MethodImpl(InliningOptions.ColdPath)] + public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException) + => throw new InvalidImageContentException(errorMessage, innerException); + [MethodImpl(InliningOptions.ColdPath)] public static void ThrowNoHeader() => throw new InvalidImageContentException("PNG Image does not contain a header chunk"); diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index b61a6ae28..64dbdf58a 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -28,7 +28,10 @@ namespace SixLabors.ImageSharp.Formats.Tga { Size dims = decoder.Dimensions; - throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + TgaThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; } } diff --git a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs index 1714a2025..fc158e781 100644 --- a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs +++ b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs @@ -12,15 +12,25 @@ namespace SixLabors.ImageSharp.Formats.Tga /// Cold path optimization for throwing 's ///
/// The error message for the exception. - [MethodImpl(MethodImplOptions.NoInlining)] + [MethodImpl(InliningOptions.ColdPath)] public static void ThrowInvalidImageContentException(string errorMessage) => throw new InvalidImageContentException(errorMessage); + /// + /// Cold path optimization for throwing 's + /// + /// The error message for the exception. + /// The exception that is the cause of the current exception, or a null reference + /// if no inner exception is specified. + [MethodImpl(InliningOptions.ColdPath)] + public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException) + => throw new InvalidImageContentException(errorMessage, innerException); + /// /// Cold path optimization for throwing 's /// /// The error message for the exception. - [MethodImpl(MethodImplOptions.NoInlining)] + [MethodImpl(InliningOptions.ColdPath)] public static void ThrowNotSupportedException(string errorMessage) => throw new NotSupportedException(errorMessage); } From 5854921c86f65313434aae8fcd18c4f3def2e65f Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 28 Apr 2020 17:33:16 +0200 Subject: [PATCH 029/130] Update external due to test file name changes --- tests/Images/External | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Images/External b/tests/Images/External index 6fdc6d19b..0d1f91e2f 160000 --- a/tests/Images/External +++ b/tests/Images/External @@ -1 +1 @@ -Subproject commit 6fdc6d19b101dc1c00a297d3e92257df60c413d0 +Subproject commit 0d1f91e2fe1491f6dc2c137a8ea20460fde4404c From a651570b48f517072c587458d91067cb8fd8ec9a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 29 Apr 2020 10:33:54 +0100 Subject: [PATCH 030/130] Use enum over int. --- .../Formats/Png/IPngEncoderOptions.cs | 4 +- .../Formats/Png/PngCompressionLevel.cs | 81 +++++++++++++++++++ src/ImageSharp/Formats/Png/PngEncoder.cs | 38 +++------ .../Formats/Png/PngEncoderOptions.cs | 39 +++------ .../Formats/Png/Zlib/ZlibDeflateStream.cs | 5 +- .../Formats/Png/PngEncoderTests.cs | 18 ++++- 6 files changed, 118 insertions(+), 67 deletions(-) create mode 100644 src/ImageSharp/Formats/Png/PngCompressionLevel.cs diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 87fd2582a..0b27539c2 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -28,9 +28,9 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets the compression level 1-9. - /// Defaults to 6. + /// Defaults to . /// - int CompressionLevel { get; } + PngCompressionLevel CompressionLevel { get; } /// /// Gets the threshold of characters in text metadata, when compression should be used. diff --git a/src/ImageSharp/Formats/Png/PngCompressionLevel.cs b/src/ImageSharp/Formats/Png/PngCompressionLevel.cs new file mode 100644 index 000000000..1d93884a3 --- /dev/null +++ b/src/ImageSharp/Formats/Png/PngCompressionLevel.cs @@ -0,0 +1,81 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +namespace SixLabors.ImageSharp.Formats.Png +{ + /// + /// Provides enumeration of available PNG compression levels. + /// + public enum PngCompressionLevel + { + /// + /// Level 0. Equivalent to . + /// + Level0 = 0, + + /// + /// No compression. Equivalent to . + /// + NoCompression = Level0, + + /// + /// Level 1. Equivalent to . + /// + Level1 = 1, + + /// + /// Best speed compression level. + /// + BestSpeed = Level1, + + /// + /// Level 2. + /// + Level2 = 2, + + /// + /// Level 3. + /// + Level3 = 3, + + /// + /// Level 4. + /// + Level4 = 4, + + /// + /// Level 5. + /// + Level5 = 5, + + /// + /// Level 6. Equivalent to . + /// + Level6 = 6, + + /// + /// The default compression level. Equivalent to . + /// + DefaultCompression = Level6, + + /// + /// Level 7. + /// + Level7 = 7, + + /// + /// Level 8. + /// + Level8 = 8, + + /// + /// Level 9. Equivalent to . + /// + Level9 = 9, + + /// + /// Best compression level. Equivalent to . + /// + BestCompression = Level9, + } +} diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index e654036a8..95c02b348 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -13,43 +13,25 @@ namespace SixLabors.ImageSharp.Formats.Png /// public sealed class PngEncoder : IImageEncoder, IPngEncoderOptions { - /// - /// Gets or sets the number of bits per sample or per palette index (not per pixel). - /// Not all values are allowed for all values. - /// + /// public PngBitDepth? BitDepth { get; set; } - /// - /// Gets or sets the color type. - /// + /// public PngColorType? ColorType { get; set; } - /// - /// Gets or sets the filter method. - /// + /// public PngFilterMethod? FilterMethod { get; set; } - /// - /// Gets or sets the compression level 1-9. - /// Defaults to 6. - /// - public int CompressionLevel { get; set; } = 6; + /// + public PngCompressionLevel CompressionLevel { get; set; } = PngCompressionLevel.DefaultCompression; - /// - /// Gets or sets the threshold of characters in text metadata, when compression should be used. - /// Defaults to 1024. - /// + /// public int TextCompressionThreshold { get; set; } = 1024; - /// - /// Gets or sets the gamma value, that will be written the image. - /// + /// public float? Gamma { get; set; } - /// - /// Gets or sets quantizer for reducing the color count. - /// Defaults to the . - /// + /// public IQuantizer Quantizer { get; set; } /// @@ -57,9 +39,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// public byte Threshold { get; set; } = byte.MaxValue; - /// - /// Gets or sets a value indicating whether this instance should write an Adam7 interlaced image. - /// + /// public PngInterlaceMode? InterlaceMethod { get; set; } /// diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index dd6c66cb7..a6ac86d54 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -31,52 +31,31 @@ namespace SixLabors.ImageSharp.Formats.Png this.InterlaceMethod = source.InterlaceMethod; } - /// - /// Gets or sets the number of bits per sample or per palette index (not per pixel). - /// Not all values are allowed for all values. - /// + /// public PngBitDepth? BitDepth { get; set; } - /// - /// Gets or sets the color type. - /// + /// public PngColorType? ColorType { get; set; } - /// - /// Gets the filter method. - /// + /// public PngFilterMethod? FilterMethod { get; } - /// - /// Gets the compression level 1-9. - /// Defaults to 6. - /// - public int CompressionLevel { get; } + /// + public PngCompressionLevel CompressionLevel { get; } = PngCompressionLevel.DefaultCompression; /// public int TextCompressionThreshold { get; } - /// - /// Gets or sets the gamma value, that will be written the image. - /// - /// - /// The gamma value of the image. - /// + /// public float? Gamma { get; set; } - /// - /// Gets or sets the quantizer for reducing the color count. - /// + /// public IQuantizer Quantizer { get; set; } - /// - /// Gets the transparency threshold. - /// + /// public byte Threshold { get; } - /// - /// Gets or sets a value indicating whether this instance should write an Adam7 interlaced image. - /// + /// public PngInterlaceMode? InterlaceMethod { get; set; } } } diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs index c723b463f..182933033 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs @@ -46,9 +46,10 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// /// The memory allocator to use for buffer allocations. /// The stream to compress. - /// The compression level. - public ZlibDeflateStream(MemoryAllocator memoryAllocator, Stream stream, int compressionLevel) + /// The compression level. + public ZlibDeflateStream(MemoryAllocator memoryAllocator, Stream stream, PngCompressionLevel level) { + int compressionLevel = (int)level; this.rawStream = stream; // Write the zlib header : http://tools.ietf.org/html/rfc1950 diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index fb5dc9a63..2d5b2e25d 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -65,9 +65,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png /// /// All types except Palette /// - public static readonly TheoryData CompressionLevels = new TheoryData + public static readonly TheoryData CompressionLevels + = new TheoryData { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + PngCompressionLevel.Level0, + PngCompressionLevel.Level1, + PngCompressionLevel.Level2, + PngCompressionLevel.Level3, + PngCompressionLevel.Level4, + PngCompressionLevel.Level5, + PngCompressionLevel.Level6, + PngCompressionLevel.Level7, + PngCompressionLevel.Level8, + PngCompressionLevel.Level9, }; public static readonly TheoryData PaletteSizes = new TheoryData @@ -150,7 +160,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png [Theory] [WithTestPatternImages(nameof(CompressionLevels), 24, 24, PixelTypes.Rgba32)] - public void WorksWithAllCompressionLevels(TestImageProvider provider, int compressionLevel) + public void WorksWithAllCompressionLevels(TestImageProvider provider, PngCompressionLevel compressionLevel) where TPixel : unmanaged, IPixel { foreach (PngInterlaceMode interlaceMode in InterlaceMode) @@ -547,7 +557,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png PngFilterMethod pngFilterMethod, PngBitDepth bitDepth, PngInterlaceMode interlaceMode, - int compressionLevel = 6, + PngCompressionLevel compressionLevel = PngCompressionLevel.DefaultCompression, int paletteSize = 255, bool appendPngColorType = false, bool appendPngFilterMethod = false, From e343d36b8374ccdbee169c9932f116dc34d663d2 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 29 Apr 2020 11:24:28 +0100 Subject: [PATCH 031/130] Cleanup props/targets --- Directory.Build.props | 34 ++++++++++++++++++++++++++-------- src/Directory.Build.props | 2 +- tests/Directory.Build.props | 2 +- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index b82b3c106..b5f5f1279 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -13,7 +13,7 @@ $(MSBuildThisFileDirectory)artifacts/ - $(ImageSharpProjectCategory)/$(MSBuildProjectName) + $(SixLaborsProjectCategory)/$(MSBuildProjectName) https://github.com/SixLabors/ImageSharp/ @@ -45,22 +45,40 @@ --> - $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE;SUPPORTS_HOTPATH + $(DefineConstants);SUPPORTS_MATHF + $(DefineConstants);SUPPORTS_HASHCODE + $(DefineConstants);SUPPORTS_EXTENDED_INTRINSICS + $(DefineConstants);SUPPORTS_SPAN_STREAM + $(DefineConstants);SUPPORTS_ENCODING_STRING + $(DefineConstants);SUPPORTS_RUNTIME_INTRINSICS + $(DefineConstants);SUPPORTS_CODECOVERAGE + $(DefineConstants);SUPPORTS_HOTPATH - $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE + $(DefineConstants);SUPPORTS_MATHF + $(DefineConstants);SUPPORTS_HASHCODE + $(DefineConstants);SUPPORTS_EXTENDED_INTRINSICS + $(DefineConstants);SUPPORTS_SPAN_STREAM + $(DefineConstants);SUPPORTS_ENCODING_STRING + $(DefineConstants);SUPPORTS_CODECOVERAGE - $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_CODECOVERAGE + $(DefineConstants);SUPPORTS_MATHF + $(DefineConstants);SUPPORTS_CODECOVERAGE - $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE + $(DefineConstants);SUPPORTS_MATHF + $(DefineConstants);SUPPORTS_HASHCODE + $(DefineConstants);SUPPORTS_SPAN_STREAM + $(DefineConstants);SUPPORTS_ENCODING_STRING + $(DefineConstants);SUPPORTS_CODECOVERAGE $(DefineConstants);SUPPORTS_CODECOVERAGE - $(DefineConstants);SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_CODECOVERAGE + $(DefineConstants);SUPPORTS_EXTENDED_INTRINSICS + $(DefineConstants);SUPPORTS_CODECOVERAGE @@ -77,7 +95,6 @@ - $(MSBuildThisFileDirectory)shared-infrastructure/SixLabors.snk Copyright © Six Labors strict;IOperation true @@ -95,9 +112,10 @@ https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json; + true + $(MSBuildThisFileDirectory)shared-infrastructure/SixLabors.snk 00240000048000009400000006020000002400005253413100040000010001000147e6fe6766715eec6cfed61f1e7dcdbf69748a3e355c67e9d8dfd953acab1d5e012ba34b23308166fdc61ee1d0390d5f36d814a6091dd4b5ed9eda5a26afced924c683b4bfb4b3d64b0586a57eff9f02b1f84e3cb0ddd518bd1697f2c84dcbb97eb8bb5c7801be12112ed0ec86db934b0e9a5171e6bb1384b6d2f7d54dfa97 true - true diff --git a/src/Directory.Build.props b/src/Directory.Build.props index a78a75d42..87482af6f 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -12,7 +12,7 @@ $(MSBuildAllProjects);$(MSBuildThisFileDirectory)..\Directory.Build.props - src + src diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index 07d333276..23a69362b 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -12,7 +12,7 @@ $(MSBuildAllProjects);$(MSBuildThisFileDirectory)..\Directory.Build.props - tests + tests false From 6765f961203429d6336099d9639210f744962b7c Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Apr 2020 12:35:52 +0200 Subject: [PATCH 032/130] Renamed enum to PngChunkFilter and also renamed enum names --- .../Formats/Png/IPngEncoderOptions.cs | 2 +- ...PngOptimizeMethod.cs => PngChunkFilter.cs} | 24 +++++++++---------- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 10 ++++---- .../Formats/Png/PngEncoderOptions.cs | 2 +- .../Formats/Png/PngEncoderTests.cs | 4 ++-- 6 files changed, 22 insertions(+), 22 deletions(-) rename src/ImageSharp/Formats/Png/{PngOptimizeMethod.cs => PngChunkFilter.cs} (52%) diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 38c3484c8..d8af4c326 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -61,6 +61,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets the optimize method. /// - PngOptimizeMethod? OptimizeMethod { get; } + PngChunkFilter? OptimizeMethod { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngOptimizeMethod.cs b/src/ImageSharp/Formats/Png/PngChunkFilter.cs similarity index 52% rename from src/ImageSharp/Formats/Png/PngOptimizeMethod.cs rename to src/ImageSharp/Formats/Png/PngChunkFilter.cs index 7ad664638..49af6ce59 100644 --- a/src/ImageSharp/Formats/Png/PngOptimizeMethod.cs +++ b/src/ImageSharp/Formats/Png/PngChunkFilter.cs @@ -9,41 +9,41 @@ namespace SixLabors.ImageSharp.Formats.Png /// Provides enumeration of available PNG optimization methods. /// [Flags] - public enum PngOptimizeMethod + public enum PngChunkFilter { /// - /// With the None filter, the scanline is transmitted unmodified. + /// With the None filter, all chunks will be written. /// None = 0, /// - /// Suppress the physical dimension information chunk. + /// Excludes the physical dimension information chunk from encoding. /// - SuppressPhysicalChunk = 1, + ExcludePhysicalChunk = 1 << 0, /// - /// Suppress the gamma information chunk. + /// Excludes the gamma information chunk from encoding. /// - SuppressGammaChunk = 2, + ExcludeGammaChunk = 1 << 1, /// - /// Suppress the eXIf chunk. + /// Excludes the eXIf chunk from encoding. /// - SuppressExifChunk = 4, + ExcludeExifChunk = 1 << 2, /// - /// Suppress the tTXt, iTXt or zTXt chunk. + /// Excludes the tTXt, iTXt or zTXt chunk from encoding. /// - SuppressTextChunks = 8, + ExcludeTextChunks = 1 << 3, /// - /// Make funlly transparent pixels black. + /// Make fully transparent pixels black. /// MakeTransparentBlack = 16, /// /// All possible optimizations. /// - All = 31, + ExcludeAll = ExcludePhysicalChunk | ExcludeGammaChunk | ExcludeExifChunk | ExcludeTextChunks } } diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 0f83d3d42..c417ea872 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets or sets the optimize method. /// - public PngOptimizeMethod? OptimizeMethod { get; set; } + public PngChunkFilter? OptimizeMethod { get; set; } /// /// Encodes the image to the specified stream from the . diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 47a377e67..89c0b7f65 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -145,7 +145,7 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); IndexedImageFrame quantized; - if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.MakeTransparentBlack) == PngOptimizeMethod.MakeTransparentBlack) + if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.MakeTransparentBlack) == PngChunkFilter.MakeTransparentBlack) { using (Image tempImage = image.Clone()) { @@ -182,7 +182,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.WriteHeaderChunk(stream); - if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressGammaChunk) != PngOptimizeMethod.SuppressGammaChunk) + if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludeGammaChunk) != PngChunkFilter.ExcludeGammaChunk) { this.WriteGammaChunk(stream); } @@ -190,17 +190,17 @@ namespace SixLabors.ImageSharp.Formats.Png this.WritePaletteChunk(stream, quantized); this.WriteTransparencyChunk(stream, pngMetadata); - if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressPhysicalChunk) != PngOptimizeMethod.SuppressPhysicalChunk) + if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludePhysicalChunk) != PngChunkFilter.ExcludePhysicalChunk) { this.WritePhysicalChunk(stream, metadata); } - if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressExifChunk) != PngOptimizeMethod.SuppressExifChunk) + if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludeExifChunk) != PngChunkFilter.ExcludeExifChunk) { this.WriteExifChunk(stream, metadata); } - if (((this.options.OptimizeMethod ?? PngOptimizeMethod.None) & PngOptimizeMethod.SuppressTextChunks) != PngOptimizeMethod.SuppressTextChunks) + if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludeTextChunks) != PngChunkFilter.ExcludeTextChunks) { this.WriteTextChunks(stream, pngMetadata); } diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index 89d7b0d5e..4728b7ca8 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -83,6 +83,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets or sets a the optimize method. /// - public PngOptimizeMethod? OptimizeMethod { get; set; } + public PngChunkFilter? OptimizeMethod { get; set; } } } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index ce734f6cf..e2051ea27 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -235,7 +235,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png appendPngColorType: true, appendPixelType: true, appendPngBitDepth: true, - optimizeMethod: PngOptimizeMethod.All); + optimizeMethod: PngChunkFilter.ExcludeAll); } } @@ -589,7 +589,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png bool appendCompressionLevel = false, bool appendPaletteSize = false, bool appendPngBitDepth = false, - PngOptimizeMethod optimizeMethod = PngOptimizeMethod.None) + PngChunkFilter optimizeMethod = PngChunkFilter.None) where TPixel : unmanaged, IPixel { using (Image image = provider.GetImage()) From f257ef2217aa5a0bd8926de98a8191bd41f8bdbe Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Apr 2020 14:05:48 +0200 Subject: [PATCH 033/130] Add tests for exclude filter --- .../Formats/Png/IPngEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoder.cs | 4 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 10 +- .../Formats/Png/PngEncoderOptions.cs | 4 +- .../Formats/Png/PngEncoderTests.Chunks.cs | 242 ++++++++++++++++++ .../Formats/Png/PngEncoderTests.cs | 128 +-------- 6 files changed, 255 insertions(+), 135 deletions(-) create mode 100644 tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index d8af4c326..f5113d3d9 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -61,6 +61,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets the optimize method. /// - PngChunkFilter? OptimizeMethod { get; } + PngChunkFilter? ChunkFilter { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index c417ea872..d2eba47de 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -63,9 +63,9 @@ namespace SixLabors.ImageSharp.Formats.Png public PngInterlaceMode? InterlaceMethod { get; set; } /// - /// Gets or sets the optimize method. + /// Gets or sets the chunk filter. This can be used to exclude some ancillary chunks from being written. /// - public PngChunkFilter? OptimizeMethod { get; set; } + public PngChunkFilter? ChunkFilter { get; set; } /// /// Encodes the image to the specified stream from the . diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 89c0b7f65..1af5929fe 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -145,7 +145,7 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); IndexedImageFrame quantized; - if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.MakeTransparentBlack) == PngChunkFilter.MakeTransparentBlack) + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.MakeTransparentBlack) == PngChunkFilter.MakeTransparentBlack) { using (Image tempImage = image.Clone()) { @@ -182,7 +182,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.WriteHeaderChunk(stream); - if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludeGammaChunk) != PngChunkFilter.ExcludeGammaChunk) + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeGammaChunk) != PngChunkFilter.ExcludeGammaChunk) { this.WriteGammaChunk(stream); } @@ -190,17 +190,17 @@ namespace SixLabors.ImageSharp.Formats.Png this.WritePaletteChunk(stream, quantized); this.WriteTransparencyChunk(stream, pngMetadata); - if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludePhysicalChunk) != PngChunkFilter.ExcludePhysicalChunk) + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludePhysicalChunk) != PngChunkFilter.ExcludePhysicalChunk) { this.WritePhysicalChunk(stream, metadata); } - if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludeExifChunk) != PngChunkFilter.ExcludeExifChunk) + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeExifChunk) != PngChunkFilter.ExcludeExifChunk) { this.WriteExifChunk(stream, metadata); } - if (((this.options.OptimizeMethod ?? PngChunkFilter.None) & PngChunkFilter.ExcludeTextChunks) != PngChunkFilter.ExcludeTextChunks) + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeTextChunks) != PngChunkFilter.ExcludeTextChunks) { this.WriteTextChunks(stream, pngMetadata); } diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index 4728b7ca8..f11a23269 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.Quantizer = source.Quantizer; this.Threshold = source.Threshold; this.InterlaceMethod = source.InterlaceMethod; - this.OptimizeMethod = source.OptimizeMethod; + this.ChunkFilter = source.ChunkFilter; } /// @@ -83,6 +83,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Gets or sets a the optimize method. /// - public PngChunkFilter? OptimizeMethod { get; set; } + public PngChunkFilter? ChunkFilter { get; set; } } } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs new file mode 100644 index 000000000..9d28fd89b --- /dev/null +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs @@ -0,0 +1,242 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using SixLabors.ImageSharp.Formats.Png; +using SixLabors.ImageSharp.PixelFormats; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace SixLabors.ImageSharp.Tests.Formats.Png +{ + public partial class PngEncoderTests + { + [Fact] + public void HeaderChunk_ComesFirst() + { + // arrange + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + + // act + input.Save(memStream, PngEncoder); + + // assert + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.Equal(PngChunkType.Header, type); + } + + [Fact] + public void EndChunk_IsLast() + { + // arrange + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + + // act + input.Save(memStream, PngEncoder); + + // assert + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + bool endChunkFound = false; + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.False(endChunkFound); + if (type == PngChunkType.End) + { + endChunkFound = true; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + + [Theory] + [InlineData(PngChunkType.Gamma)] + [InlineData(PngChunkType.Chroma)] + [InlineData(PngChunkType.EmbeddedColorProfile)] + [InlineData(PngChunkType.SignificantBits)] + [InlineData(PngChunkType.StandardRgbColourSpace)] + public void Chunk_ComesBeforePlteAndIDat(object chunkTypeObj) + { + // arrange + var chunkType = (PngChunkType)chunkTypeObj; + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + + // act + input.Save(memStream, PngEncoder); + + // assert + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + bool palFound = false; + bool dataFound = false; + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + if (chunkType == type) + { + Assert.False(palFound || dataFound, $"{chunkType} chunk should come before data and palette chunk"); + } + + switch (type) + { + case PngChunkType.Data: + dataFound = true; + break; + case PngChunkType.Palette: + palFound = true; + break; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + + [Theory] + [InlineData(PngChunkType.Physical)] + [InlineData(PngChunkType.SuggestedPalette)] + public void Chunk_ComesBeforeIDat(object chunkTypeObj) + { + // arrange + var chunkType = (PngChunkType)chunkTypeObj; + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + + // act + input.Save(memStream, PngEncoder); + + // assert + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + bool dataFound = false; + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + if (chunkType == type) + { + Assert.False(dataFound, $"{chunkType} chunk should come before data chunk"); + } + + if (type == PngChunkType.Data) + { + dataFound = true; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + + [Theory] + [InlineData(PngChunkFilter.ExcludeGammaChunk)] + [InlineData(PngChunkFilter.ExcludeExifChunk)] + [InlineData(PngChunkFilter.ExcludePhysicalChunk)] + [InlineData(PngChunkFilter.ExcludeTextChunks)] + [InlineData(PngChunkFilter.ExcludeAll)] + public void ExcludeFilter_Works(object filterObj) + { + // arrange + var chunkFilter = (PngChunkFilter)filterObj; + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + var encoder = new PngEncoder() { ChunkFilter = chunkFilter, TextCompressionThreshold = 8 }; + var excludedChunkTypes = new List(); + switch (chunkFilter) + { + case PngChunkFilter.ExcludeGammaChunk: + excludedChunkTypes.Add(PngChunkType.Gamma); + break; + case PngChunkFilter.ExcludeExifChunk: + excludedChunkTypes.Add(PngChunkType.Exif); + break; + case PngChunkFilter.ExcludePhysicalChunk: + excludedChunkTypes.Add(PngChunkType.Physical); + break; + case PngChunkFilter.ExcludeTextChunks: + excludedChunkTypes.Add(PngChunkType.Text); + excludedChunkTypes.Add(PngChunkType.InternationalText); + excludedChunkTypes.Add(PngChunkType.CompressedText); + break; + case PngChunkFilter.ExcludeAll: + excludedChunkTypes.Add(PngChunkType.Gamma); + excludedChunkTypes.Add(PngChunkType.Exif); + excludedChunkTypes.Add(PngChunkType.Physical); + excludedChunkTypes.Add(PngChunkType.Text); + excludedChunkTypes.Add(PngChunkType.InternationalText); + excludedChunkTypes.Add(PngChunkType.CompressedText); + break; + } + + // act + input.Save(memStream, encoder); + + // assert + Assert.True(excludedChunkTypes.Count > 0); + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var chunkType = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.False(excludedChunkTypes.Contains(chunkType), $"{chunkType} chunk should have been excluded"); + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + + [Fact] + public void ExcludeFilter_WithNone_DoesNotExcludeChunks() + { + // arrange + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + var encoder = new PngEncoder() { ChunkFilter = PngChunkFilter.None, TextCompressionThreshold = 8 }; + var expectedChunkTypes = new List() + { + PngChunkType.Header, + PngChunkType.Gamma, + PngChunkType.Palette, + PngChunkType.Transparency, + PngChunkType.InternationalText, + PngChunkType.Text, + PngChunkType.CompressedText, + PngChunkType.Exif, + PngChunkType.Physical, + PngChunkType.Data, + PngChunkType.End, + }; + + // act + input.Save(memStream, encoder); + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var chunkType = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.True(expectedChunkTypes.Contains(chunkType), $"{chunkType} chunk should have been present"); + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + } + } +} diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index e2051ea27..cf5f5c4db 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -2,8 +2,6 @@ // Licensed under the Apache License, Version 2.0. // ReSharper disable InconsistentNaming -using System; -using System.Buffers.Binary; using System.IO; using System.Linq; @@ -18,7 +16,7 @@ using Xunit; namespace SixLabors.ImageSharp.Tests.Formats.Png { - public class PngEncoderTests + public partial class PngEncoderTests { private static PngEncoder PngEncoder => new PngEncoder(); @@ -221,7 +219,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png [WithTestPatternImages(24, 24, PixelTypes.Rgb48, PngColorType.Grayscale, PngBitDepth.Bit16)] [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.GrayscaleWithAlpha, PngBitDepth.Bit8)] [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.GrayscaleWithAlpha, PngBitDepth.Bit16)] - public void WorksWithAllBitDepthsOptimized(TestImageProvider provider, PngColorType pngColorType, PngBitDepth pngBitDepth) + public void WorksWithAllBitDepthsAndExcludeAllFilter(TestImageProvider provider, PngColorType pngColorType, PngBitDepth pngBitDepth) where TPixel : unmanaged, IPixel { foreach (PngInterlaceMode interlaceMode in InterlaceMode) @@ -435,126 +433,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } - [Fact] - public void HeaderChunk_ComesFirst() - { - var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, PngEncoder); - memStream.Position = 0; - - // Skip header. - Span bytesSpan = memStream.ToArray().AsSpan(8); - BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); - var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); - Assert.Equal(PngChunkType.Header, type); - } - - [Fact] - public void EndChunk_IsLast() - { - var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, PngEncoder); - memStream.Position = 0; - - // Skip header. - Span bytesSpan = memStream.ToArray().AsSpan(8); - - bool endChunkFound = false; - while (bytesSpan.Length > 0) - { - int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); - var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); - Assert.False(endChunkFound); - if (type == PngChunkType.End) - { - endChunkFound = true; - } - - bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); - } - } - - [Theory] - [InlineData(PngChunkType.Gamma)] - [InlineData(PngChunkType.Chroma)] - [InlineData(PngChunkType.EmbeddedColorProfile)] - [InlineData(PngChunkType.SignificantBits)] - [InlineData(PngChunkType.StandardRgbColourSpace)] - public void Chunk_ComesBeforePlteAndIDat(object chunkTypeObj) - { - var chunkType = (PngChunkType)chunkTypeObj; - var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, PngEncoder); - memStream.Position = 0; - - // Skip header. - Span bytesSpan = memStream.ToArray().AsSpan(8); - - bool palFound = false; - bool dataFound = false; - while (bytesSpan.Length > 0) - { - int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); - var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); - if (chunkType == type) - { - Assert.False(palFound || dataFound, $"{chunkType} chunk should come before data and palette chunk"); - } - - switch (type) - { - case PngChunkType.Data: - dataFound = true; - break; - case PngChunkType.Palette: - palFound = true; - break; - } - - bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); - } - } - - [Theory] - [InlineData(PngChunkType.Physical)] - [InlineData(PngChunkType.SuggestedPalette)] - public void Chunk_ComesBeforeIDat(object chunkTypeObj) - { - var chunkType = (PngChunkType)chunkTypeObj; - var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); - using Image input = testFile.CreateRgba32Image(); - using var memStream = new MemoryStream(); - input.Save(memStream, PngEncoder); - memStream.Position = 0; - - // Skip header. - Span bytesSpan = memStream.ToArray().AsSpan(8); - - bool dataFound = false; - while (bytesSpan.Length > 0) - { - int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); - var type = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); - if (chunkType == type) - { - Assert.False(dataFound, $"{chunkType} chunk should come before data chunk"); - } - - if (type == PngChunkType.Data) - { - dataFound = true; - } - - bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); - } - } - [Theory] [WithTestPatternImages(587, 821, PixelTypes.Rgba32)] [WithTestPatternImages(677, 683, PixelTypes.Rgba32)] @@ -602,7 +480,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png BitDepth = bitDepth, Quantizer = new WuQuantizer(new QuantizerOptions { MaxColors = paletteSize }), InterlaceMethod = interlaceMode, - OptimizeMethod = optimizeMethod, + ChunkFilter = optimizeMethod, }; string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : string.Empty; From f04e836587a87524d4cfe0ff19f54b50459c9c79 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Apr 2020 14:29:57 +0200 Subject: [PATCH 034/130] MakeTransparentBlack is now a png encoder option --- src/ImageSharp/Formats/Png/IPngEncoderOptions.cs | 5 +++++ src/ImageSharp/Formats/Png/PngChunkFilter.cs | 5 ----- src/ImageSharp/Formats/Png/PngEncoder.cs | 5 +++++ src/ImageSharp/Formats/Png/PngEncoderCore.cs | 4 ++-- src/ImageSharp/Formats/Png/PngEncoderOptions.cs | 4 ++++ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index f5113d3d9..be510b156 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -62,5 +62,10 @@ namespace SixLabors.ImageSharp.Formats.Png /// Gets the optimize method. /// PngChunkFilter? ChunkFilter { get; } + + /// + /// Gets a value indicating whether fully transparent pixels should be converted to black pixels. + /// + bool MakeTransparentBlack { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngChunkFilter.cs b/src/ImageSharp/Formats/Png/PngChunkFilter.cs index 49af6ce59..f859d44da 100644 --- a/src/ImageSharp/Formats/Png/PngChunkFilter.cs +++ b/src/ImageSharp/Formats/Png/PngChunkFilter.cs @@ -36,11 +36,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// ExcludeTextChunks = 1 << 3, - /// - /// Make fully transparent pixels black. - /// - MakeTransparentBlack = 16, - /// /// All possible optimizations. /// diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index d2eba47de..197506ffd 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -67,6 +67,11 @@ namespace SixLabors.ImageSharp.Formats.Png /// public PngChunkFilter? ChunkFilter { get; set; } + /// + /// Gets or sets a value indicating whether fully transparent pixels should be converted to black pixels. + /// + public bool MakeTransparentBlack { get; set; } + /// /// Encodes the image to the specified stream from the . /// diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 1af5929fe..416c26b0f 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -7,7 +7,7 @@ using System.Buffers.Binary; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using SixLabors.ImageSharp.Advanced; + using SixLabors.ImageSharp.Formats.Png.Chunks; using SixLabors.ImageSharp.Formats.Png.Filters; using SixLabors.ImageSharp.Formats.Png.Zlib; @@ -145,7 +145,7 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); IndexedImageFrame quantized; - if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.MakeTransparentBlack) == PngChunkFilter.MakeTransparentBlack) + if (this.options.MakeTransparentBlack) { using (Image tempImage = image.Clone()) { diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index f11a23269..ba8a897ce 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -30,6 +30,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.Threshold = source.Threshold; this.InterlaceMethod = source.InterlaceMethod; this.ChunkFilter = source.ChunkFilter; + this.MakeTransparentBlack = source.MakeTransparentBlack; } /// @@ -84,5 +85,8 @@ namespace SixLabors.ImageSharp.Formats.Png /// Gets or sets a the optimize method. /// public PngChunkFilter? ChunkFilter { get; set; } + + /// + public bool MakeTransparentBlack { get; set; } } } From 624591c421069484f6b1a9b5f61cf6b504cb6db6 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Apr 2020 14:44:39 +0200 Subject: [PATCH 035/130] Refactor --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 81 ++++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 416c26b0f..7d00e20e4 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -144,6 +144,34 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); + IndexedImageFrame quantized = this.CreateQuantizedImage(image); + + stream.Write(PngConstants.HeaderBytes); + + this.WriteHeaderChunk(stream); + this.WriteGammaChunk(stream); + this.WritePaletteChunk(stream, quantized); + this.WriteTransparencyChunk(stream, pngMetadata); + this.WritePhysicalChunk(stream, metadata); + this.WriteExifChunk(stream, metadata); + this.WriteTextChunks(stream, pngMetadata); + this.WriteDataChunks(image.Frames.RootFrame, quantized, stream); + this.WriteEndChunk(stream); + + stream.Flush(); + + quantized?.Dispose(); + } + + /// + /// Creates the quantized image and sets calculates and sets the bit depth. + /// + /// The type of the pixel. + /// The image to quantize. + /// The quantized image. + private IndexedImageFrame CreateQuantizedImage(Image image) + where TPixel : unmanaged, IPixel + { IndexedImageFrame quantized; if (this.options.MakeTransparentBlack) { @@ -178,38 +206,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, image, quantized); } - stream.Write(PngConstants.HeaderBytes); - - this.WriteHeaderChunk(stream); - - if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeGammaChunk) != PngChunkFilter.ExcludeGammaChunk) - { - this.WriteGammaChunk(stream); - } - - this.WritePaletteChunk(stream, quantized); - this.WriteTransparencyChunk(stream, pngMetadata); - - if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludePhysicalChunk) != PngChunkFilter.ExcludePhysicalChunk) - { - this.WritePhysicalChunk(stream, metadata); - } - - if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeExifChunk) != PngChunkFilter.ExcludeExifChunk) - { - this.WriteExifChunk(stream, metadata); - } - - if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeTextChunks) != PngChunkFilter.ExcludeTextChunks) - { - this.WriteTextChunks(stream, pngMetadata); - } - - this.WriteDataChunks(image.Frames.RootFrame, quantized, stream); - this.WriteEndChunk(stream); - stream.Flush(); - - quantized?.Dispose(); + return quantized; } /// @@ -652,6 +649,11 @@ namespace SixLabors.ImageSharp.Formats.Png /// The image metadata. private void WritePhysicalChunk(Stream stream, ImageMetadata meta) { + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludePhysicalChunk) == PngChunkFilter.ExcludePhysicalChunk) + { + return; + } + PhysicalChunkData.FromMetadata(meta).WriteTo(this.chunkDataBuffer); this.WriteChunk(stream, PngChunkType.Physical, this.chunkDataBuffer, 0, PhysicalChunkData.Size); @@ -664,6 +666,11 @@ namespace SixLabors.ImageSharp.Formats.Png /// The image metadata. private void WriteExifChunk(Stream stream, ImageMetadata meta) { + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeExifChunk) == PngChunkFilter.ExcludeExifChunk) + { + return; + } + if (meta.ExifProfile is null || meta.ExifProfile.Values.Count == 0) { return; @@ -681,6 +688,11 @@ namespace SixLabors.ImageSharp.Formats.Png /// The image metadata. private void WriteTextChunks(Stream stream, PngMetadata meta) { + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeTextChunks) == PngChunkFilter.ExcludeTextChunks) + { + return; + } + const int MaxLatinCode = 255; for (int i = 0; i < meta.TextData.Count; i++) { @@ -773,6 +785,11 @@ namespace SixLabors.ImageSharp.Formats.Png /// The containing image data. private void WriteGammaChunk(Stream stream) { + if (((this.options.ChunkFilter ?? PngChunkFilter.None) & PngChunkFilter.ExcludeGammaChunk) == PngChunkFilter.ExcludeGammaChunk) + { + return; + } + if (this.options.Gamma > 0) { // 4-byte unsigned integer of gamma * 100,000. From 5e479b1dc5505729c06b1a944fee04769a51cf70 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 29 Apr 2020 17:38:44 +0100 Subject: [PATCH 036/130] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68c574652..bd9007e4f 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Built against [.NET Standard 1.3](https://docs.microsoft.com/en-us/dotnet/standa - ImageSharp is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0) - An alternative Commercial License can be purchased for Closed Source projects and applications. Please visit https://sixlabors.com/pricing for details. -- Open Source projects who whave taken a dependency on ImageSharp prior to adoption of the AGPL v3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). +- Open Source projects who have taken a dependency on ImageSharp prior to adoption of the AGPL v3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). ## Documentation From a86713f25ebe5ec3dd4036f744aa72fd3d765a7f Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Apr 2020 18:48:07 +0200 Subject: [PATCH 037/130] Add tests for make transparent black option --- .../Formats/Png/PngEncoderTests.cs | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index cf5f5c4db..dff6cb8f8 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -380,6 +380,68 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } + [Theory] + [InlineData(PngColorType.Palette)] + [InlineData(PngColorType.Rgb)] + [InlineData(PngColorType.RgbWithAlpha)] + [InlineData(PngColorType.Grayscale)] + [InlineData(PngColorType.GrayscaleWithAlpha)] + public void Encode_WithMakeTransparentBlackOption_Works(PngColorType colorType) + { + // arrange + var image = new Image(50, 50); + var encoder = new PngEncoder() + { + MakeTransparentBlack = true, + ColorType = colorType + }; + Rgba32 rgba32 = Color.Blue; + for (int y = 0; y < image.Height; y++) + { + System.Span rowSpan = image.GetPixelRowSpan(y); + + // Half of the test image should be transparent. + if (y > 25) + { + rgba32.A = 0; + } + + for (int x = 0; x < image.Width; x++) + { + rowSpan[x].FromRgba32(rgba32); + } + } + + // act + using var memStream = new MemoryStream(); + image.Save(memStream, encoder); + + // assert + memStream.Position = 0; + using var actual = Image.Load(memStream); + Rgba32 expectedColor = Color.Blue; + if (colorType == PngColorType.Grayscale || colorType == PngColorType.GrayscaleWithAlpha) + { + var luminance = ImageMaths.Get8BitBT709Luminance(expectedColor.R, expectedColor.G, expectedColor.B); + expectedColor = new Rgba32(luminance, luminance, luminance); + } + + for (int y = 0; y < actual.Height; y++) + { + System.Span rowSpan = actual.GetPixelRowSpan(y); + + if (y > 25) + { + expectedColor = Color.Black; + } + + for (int x = 0; x < actual.Width; x++) + { + Assert.Equal(expectedColor, rowSpan[x]); + } + } + } + [Theory] [MemberData(nameof(PngTrnsFiles))] public void Encode_PreserveTrns(string imagePath, PngBitDepth pngBitDepth, PngColorType pngColorType) From 8ca9b97c9e182b7792a25d1d1b3a70b18b35417b Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 29 Apr 2020 18:58:43 +0200 Subject: [PATCH 038/130] MakeTransparentBlack option now work with all png color type --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 109 ++++++++++--------- 1 file changed, 60 insertions(+), 49 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 7d00e20e4..d8509548a 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -144,7 +144,14 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); - IndexedImageFrame quantized = this.CreateQuantizedImage(image); + Image clonedImage = null; + if (this.options.MakeTransparentBlack) + { + clonedImage = image.Clone(); + MakeTransparentPixelsBlack(clonedImage); + } + + IndexedImageFrame quantized = this.CreateQuantizedImage(image, clonedImage); stream.Write(PngConstants.HeaderBytes); @@ -155,12 +162,55 @@ namespace SixLabors.ImageSharp.Formats.Png this.WritePhysicalChunk(stream, metadata); this.WriteExifChunk(stream, metadata); this.WriteTextChunks(stream, pngMetadata); - this.WriteDataChunks(image.Frames.RootFrame, quantized, stream); + this.WriteDataChunks(this.options.MakeTransparentBlack ? clonedImage : image, quantized, stream); this.WriteEndChunk(stream); stream.Flush(); quantized?.Dispose(); + clonedImage?.Dispose(); + } + + /// + public void Dispose() + { + this.previousScanline?.Dispose(); + this.currentScanline?.Dispose(); + this.subFilter?.Dispose(); + this.averageFilter?.Dispose(); + this.paethFilter?.Dispose(); + this.filterBuffer?.Dispose(); + + this.previousScanline = null; + this.currentScanline = null; + this.subFilter = null; + this.averageFilter = null; + this.paethFilter = null; + this.filterBuffer = null; + } + + /// + /// Makes transparent pixels black. + /// + /// The type of the pixel. + /// The cloned image where the transparent pixels will be changed. + private static void MakeTransparentPixelsBlack(Image image) + where TPixel : unmanaged, IPixel + { + Rgba32 rgba32 = default; + for (int y = 0; y < image.Height; y++) + { + Span span = image.GetPixelRowSpan(y); + for (int x = 0; x < image.Width; x++) + { + span[x].ToRgba32(ref rgba32); + + if (rgba32.A == 0) + { + span[x].FromRgba32(Color.Black); + } + } + } } /// @@ -168,37 +218,16 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// The type of the pixel. /// The image to quantize. + /// Cloned image with transparent pixels are changed to black. /// The quantized image. - private IndexedImageFrame CreateQuantizedImage(Image image) + private IndexedImageFrame CreateQuantizedImage(Image image, Image clonedImage) where TPixel : unmanaged, IPixel { IndexedImageFrame quantized; if (this.options.MakeTransparentBlack) { - using (Image tempImage = image.Clone()) - { - for (int y = 0; y < image.Height; y++) - { - Span span = tempImage.GetPixelRowSpan(y); - for (int x = 0; x < image.Width; x++) - { - Rgba32 rgba32 = default; - span[x].ToRgba32(ref rgba32); - - if (rgba32.A == 0) - { - rgba32.R = 0; - rgba32.G = 0; - rgba32.B = 0; - } - - span[x].FromRgba32(rgba32); - } - } - - quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, tempImage); - this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, tempImage, quantized); - } + quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, clonedImage); + this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, clonedImage, quantized); } else { @@ -209,24 +238,6 @@ namespace SixLabors.ImageSharp.Formats.Png return quantized; } - /// - public void Dispose() - { - this.previousScanline?.Dispose(); - this.currentScanline?.Dispose(); - this.subFilter?.Dispose(); - this.averageFilter?.Dispose(); - this.paethFilter?.Dispose(); - this.filterBuffer?.Dispose(); - - this.previousScanline = null; - this.currentScanline = null; - this.subFilter = null; - this.averageFilter = null; - this.paethFilter = null; - this.filterBuffer = null; - } - /// Collects a row of grayscale pixels. /// The pixel format. /// The image row span. @@ -859,7 +870,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// The image. /// The quantized pixel data. Can be null. /// The stream. - private void WriteDataChunks(ImageFrame pixels, IndexedImageFrame quantized, Stream stream) + private void WriteDataChunks(Image pixels, IndexedImageFrame quantized, Stream stream) where TPixel : unmanaged, IPixel { byte[] buffer; @@ -957,8 +968,8 @@ namespace SixLabors.ImageSharp.Formats.Png /// The pixels. /// The quantized pixels span. /// The deflate stream. - private void EncodePixels(ImageFrame pixels, IndexedImageFrame quantized, ZlibDeflateStream deflateStream) - where TPixel : unmanaged, IPixel + private void EncodePixels(Image pixels, IndexedImageFrame quantized, ZlibDeflateStream deflateStream) + where TPixel : unmanaged, IPixel { int bytesPerScanline = this.CalculateScanlineLength(this.width); int resultLength = bytesPerScanline + 1; @@ -981,7 +992,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// The type of the pixel. /// The pixels. /// The deflate stream. - private void EncodeAdam7Pixels(ImageFrame pixels, ZlibDeflateStream deflateStream) + private void EncodeAdam7Pixels(Image pixels, ZlibDeflateStream deflateStream) where TPixel : unmanaged, IPixel { int width = pixels.Width; From 173659669e428f7c18c704c7ea50aeca5e2c93b5 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 29 Apr 2020 22:38:43 +0200 Subject: [PATCH 039/130] use only netcoreapp3.1 --- src/ImageSharp/ImageSharp.csproj | 3 ++- tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj | 3 ++- .../ImageSharp.Tests.ProfilingSandbox.csproj | 3 ++- tests/ImageSharp.Tests/ImageSharp.Tests.csproj | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ImageSharp/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj index baf4a2ce1..185638d19 100644 --- a/src/ImageSharp/ImageSharp.csproj +++ b/src/ImageSharp/ImageSharp.csproj @@ -10,7 +10,8 @@ $(packageversion) 0.0.1 - netcoreapp3.1;netcoreapp2.1;netstandard2.1;netstandard2.0;netstandard1.3;net472 + + netcoreapp3.1 true true diff --git a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj index f380d0a6a..101d27956 100644 --- a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj +++ b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj @@ -5,7 +5,8 @@ ImageSharp.Benchmarks Exe SixLabors.ImageSharp.Benchmarks - netcoreapp3.1;netcoreapp2.1;net472 + + netcoreapp3.1 false false diff --git a/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj b/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj index 7c8031693..f9e6c9da5 100644 --- a/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj +++ b/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj @@ -8,7 +8,8 @@ false SixLabors.ImageSharp.Tests.ProfilingSandbox win7-x64 - netcoreapp3.1;netcoreapp2.1;net472 + + netcoreapp3.1 SixLabors.ImageSharp.Tests.ProfilingSandbox.Program false diff --git a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj index fdb280ca9..d5c8ef16e 100644 --- a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj +++ b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj @@ -2,7 +2,8 @@ - netcoreapp3.1;netcoreapp2.1;net472 + + netcoreapp3.1 True True SixLabors.ImageSharp.Tests From c0494290e821fcb5201882eb7baa1d9ef34100ed Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 29 Apr 2020 23:45:58 +0200 Subject: [PATCH 040/130] add failing test for global quantization --- .../Formats/Gif/GifEncoderTests.cs | 25 ++++++++++++++++++ tests/ImageSharp.Tests/TestImages.cs | 1 + .../Input/Gif/GlobalQuantizationTest.gif | Bin 0 -> 101868 bytes 3 files changed, 26 insertions(+) create mode 100644 tests/Images/Input/Gif/GlobalQuantizationTest.gif diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs index 588f65254..cbaed758d 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. using System.IO; +using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -132,6 +133,30 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif } } + [Theory] + [WithFile(TestImages.Gif.GlobalQuantizationTest, PixelTypes.Rgba32)] + public void Encode_GlobalPalette_QuantizeMultipleFrames(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + using Image image = provider.GetImage(); + + var encoder = new GifEncoder() + { + ColorTableMode = GifColorTableMode.Global + }; + + string testOutputFile = provider.Utility.SaveTestOutputFile( + image, + "gif", + encoder, + appendPixelTypeToFileName: false, + appendSourceFileOrDescription: false); + + IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(testOutputFile); + using var encoded = Image.Load(testOutputFile, referenceDecoder); + ValidatorComparer.VerifySimilarity(image, encoded); + } + [Fact] public void NonMutatingEncodePreservesPaletteCount() { diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 141a8d1c3..e18ef3eef 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -396,6 +396,7 @@ namespace SixLabors.ImageSharp.Tests public const string Ratio4x1 = "Gif/base_4x1.gif"; public const string Ratio1x4 = "Gif/base_1x4.gif"; public const string LargeComment = "Gif/large_comment.gif"; + public const string GlobalQuantizationTest = "Gif/GlobalQuantizationTest.gif"; // Test images from https://github.com/robert-ancell/pygif/tree/master/test-suite public const string ZeroSize = "Gif/image-zero-size.gif"; diff --git a/tests/Images/Input/Gif/GlobalQuantizationTest.gif b/tests/Images/Input/Gif/GlobalQuantizationTest.gif new file mode 100644 index 0000000000000000000000000000000000000000..b7da48aea1326842d8a4fe258cfd5528919e9113 GIT binary patch literal 101868 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%0DmmV0`M`U49E|_0Oa5R|6JU}H$%aO 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%0A-A2j{F#>DFadLMf5PCu6-a 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 literal 0 HcmV?d00001 From 3e2f7dd310bf104d26746ecb5a92db752d0fb714 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 30 Apr 2020 03:01:34 +0200 Subject: [PATCH 041/130] BufferArea -> BufferRegion, introduce PixelSamplingStrategy --- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 4 +- src/ImageSharp/Formats/Gif/GifEncoder.cs | 2 + .../Formats/Gif/IGifEncoderOptions.cs | 3 + .../Jpeg/Components/Block8x8F.ScaledCopyTo.cs | 6 +- src/ImageSharp/Image{TPixel}.cs | 12 +++ src/ImageSharp/Memory/Buffer2DExtensions.cs | 26 ++--- .../{BufferArea{T}.cs => BufferRegion{T}.cs} | 92 +++++++++-------- .../DefaultPixelSamplingStrategy.cs | 90 +++++++++++++++++ .../ExtensivePixelSamplingStrategy.cs | 25 +++++ .../Quantization/IPixelSamplingStrategy.cs | 24 +++++ .../Resize/ResizeProcessor{TPixel}.cs | 4 +- .../Transforms/Resize/ResizeWorker.cs | 4 +- .../BlockOperations/Block8x8F_CopyTo2x2.cs | 28 +++--- .../Jpg/Block8x8FTests.CopyToBufferArea.cs | 10 +- .../Memory/BufferAreaTests.cs | 32 +++--- .../PixelSamplingStrategyTests.cs | 99 +++++++++++++++++++ 16 files changed, 362 insertions(+), 99 deletions(-) rename src/ImageSharp/Memory/{BufferArea{T}.cs => BufferRegion{T}.cs} (65%) create mode 100644 src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs create mode 100644 src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs create mode 100644 src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs create mode 100644 tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index e0d8b3cd9..ba94851f8 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -543,8 +543,8 @@ namespace SixLabors.ImageSharp.Formats.Gif return; } - BufferArea pixelArea = frame.PixelBuffer.GetArea(this.restoreArea.Value); - pixelArea.Clear(); + BufferRegion pixelRegion = frame.PixelBuffer.GetRegion(this.restoreArea.Value); + pixelRegion.Clear(); this.restoreArea = null; } diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index 53c4c6f3f..aa276cd98 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -25,6 +25,8 @@ namespace SixLabors.ImageSharp.Formats.Gif /// public GifColorTableMode? ColorTableMode { get; set; } + internal IPixelSamplingStrategy GlobalPixelSamplingStrategy { get; set; } + /// public void Encode(Image image, Stream stream) where TPixel : unmanaged, IPixel diff --git a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs index 5936d30cb..752e6866f 100644 --- a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs +++ b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs @@ -1,6 +1,9 @@ // Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. +using System.Collections.Generic; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Quantization; namespace SixLabors.ImageSharp.Formats.Gif diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs index 064ca7553..2fbc81707 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs @@ -15,10 +15,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components /// Copy block data into the destination color buffer pixel area with the provided horizontal and vertical scale factors. /// [MethodImpl(InliningOptions.ShortMethod)] - public void ScaledCopyTo(in BufferArea area, int horizontalScale, int verticalScale) + public void ScaledCopyTo(in BufferRegion region, int horizontalScale, int verticalScale) { - ref float areaOrigin = ref area.GetReferenceToOrigin(); - this.ScaledCopyTo(ref areaOrigin, area.Stride, horizontalScale, verticalScale); + ref float areaOrigin = ref region.GetReferenceToOrigin(); + this.ScaledCopyTo(ref areaOrigin, region.Stride, horizontalScale, verticalScale); } [MethodImpl(InliningOptions.ShortMethod)] diff --git a/src/ImageSharp/Image{TPixel}.cs b/src/ImageSharp/Image{TPixel}.cs index f6173db97..2ab472853 100644 --- a/src/ImageSharp/Image{TPixel}.cs +++ b/src/ImageSharp/Image{TPixel}.cs @@ -48,6 +48,18 @@ namespace SixLabors.ImageSharp { } + /// + /// Initializes a new instance of the class + /// with the height and the width of the image. + /// + /// The width of the image in pixels. + /// The height of the image in pixels. + /// The color to initialize the pixels with. + public Image(int width, int height, TPixel backgroundColor) + : this(Configuration.Default, width, height, backgroundColor, new ImageMetadata()) + { + } + /// /// Initializes a new instance of the class /// with the height and the width of the image. diff --git a/src/ImageSharp/Memory/Buffer2DExtensions.cs b/src/ImageSharp/Memory/Buffer2DExtensions.cs index fea44f52c..d61ac9087 100644 --- a/src/ImageSharp/Memory/Buffer2DExtensions.cs +++ b/src/ImageSharp/Memory/Buffer2DExtensions.cs @@ -80,29 +80,29 @@ namespace SixLabors.ImageSharp.Memory } /// - /// Return a to the subarea represented by 'rectangle' + /// Return a to the subarea represented by 'rectangle' /// /// The element type /// The /// The rectangle subarea - /// The - internal static BufferArea GetArea(this Buffer2D buffer, in Rectangle rectangle) - where T : struct => - new BufferArea(buffer, rectangle); + /// The + internal static BufferRegion GetRegion(this Buffer2D buffer, in Rectangle rectangle) + where T : unmanaged => + new BufferRegion(buffer, rectangle); - internal static BufferArea GetArea(this Buffer2D buffer, int x, int y, int width, int height) - where T : struct => - new BufferArea(buffer, new Rectangle(x, y, width, height)); + internal static BufferRegion GetRegion(this Buffer2D buffer, int x, int y, int width, int height) + where T : unmanaged => + new BufferRegion(buffer, new Rectangle(x, y, width, height)); /// - /// Return a to the whole area of 'buffer' + /// Return a to the whole area of 'buffer' /// /// The element type /// The - /// The - internal static BufferArea GetArea(this Buffer2D buffer) - where T : struct => - new BufferArea(buffer); + /// The + internal static BufferRegion GetRegion(this Buffer2D buffer) + where T : unmanaged => + new BufferRegion(buffer); /// /// Returns the size of the buffer. diff --git a/src/ImageSharp/Memory/BufferArea{T}.cs b/src/ImageSharp/Memory/BufferRegion{T}.cs similarity index 65% rename from src/ImageSharp/Memory/BufferArea{T}.cs rename to src/ImageSharp/Memory/BufferRegion{T}.cs index 076f7f37c..901c3217b 100644 --- a/src/ImageSharp/Memory/BufferArea{T}.cs +++ b/src/ImageSharp/Memory/BufferRegion{T}.cs @@ -6,45 +6,48 @@ using System.Runtime.CompilerServices; namespace SixLabors.ImageSharp.Memory { /// - /// Represents a rectangular area inside a 2D memory buffer (). - /// This type is kind-of 2D Span, but it can live on heap. + /// Represents a rectangular region inside a 2D memory buffer (). /// /// The element type. - internal readonly struct BufferArea - where T : struct + public readonly struct BufferRegion + where T : unmanaged { /// - /// The rectangle specifying the boundaries of the area in . + /// Initializes a new instance of the struct. /// - public readonly Rectangle Rectangle; - + /// The . + /// The defining a rectangular area within the buffer. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferArea(Buffer2D destinationBuffer, Rectangle rectangle) + public BufferRegion(Buffer2D buffer, Rectangle rectangle) { DebugGuard.MustBeGreaterThanOrEqualTo(rectangle.X, 0, nameof(rectangle)); DebugGuard.MustBeGreaterThanOrEqualTo(rectangle.Y, 0, nameof(rectangle)); - DebugGuard.MustBeLessThanOrEqualTo(rectangle.Width, destinationBuffer.Width, nameof(rectangle)); - DebugGuard.MustBeLessThanOrEqualTo(rectangle.Height, destinationBuffer.Height, nameof(rectangle)); + DebugGuard.MustBeLessThanOrEqualTo(rectangle.Width, buffer.Width, nameof(rectangle)); + DebugGuard.MustBeLessThanOrEqualTo(rectangle.Height, buffer.Height, nameof(rectangle)); - this.DestinationBuffer = destinationBuffer; + this.Buffer = buffer; this.Rectangle = rectangle; } + /// + /// Initializes a new instance of the struct. + /// + /// The . [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferArea(Buffer2D destinationBuffer) - : this(destinationBuffer, destinationBuffer.FullRectangle()) + public BufferRegion(Buffer2D buffer) + : this(buffer, buffer.FullRectangle()) { } /// - /// Gets the being pointed by this instance. + /// Gets the rectangle specifying the boundaries of the area in . /// - public Buffer2D DestinationBuffer { get; } + public Rectangle Rectangle { get; } /// - /// Gets the size of the area. + /// Gets the being pointed by this instance. /// - public Size Size => this.Rectangle.Size; + public Buffer2D Buffer { get; } /// /// Gets the width @@ -57,14 +60,19 @@ namespace SixLabors.ImageSharp.Memory public int Height => this.Rectangle.Height; /// - /// Gets the pixel stride which is equal to the width of . + /// Gets the pixel stride which is equal to the width of . /// - public int Stride => this.DestinationBuffer.Width; + public int Stride => this.Buffer.Width; /// - /// Gets a value indicating whether the area refers to the entire + /// Gets the size of the area. /// - public bool IsFullBufferArea => this.Size == this.DestinationBuffer.Size(); + internal Size Size => this.Rectangle.Size; + + /// + /// Gets a value indicating whether the area refers to the entire + /// + internal bool IsFullBufferArea => this.Size == this.Buffer.Size(); /// /// Gets or sets a value at the given index. @@ -72,19 +80,7 @@ namespace SixLabors.ImageSharp.Memory /// The position inside a row /// The row index /// The reference to the value - public ref T this[int x, int y] => ref this.DestinationBuffer[x + this.Rectangle.X, y + this.Rectangle.Y]; - - /// - /// Gets a reference to the [0,0] element. - /// - /// The reference to the [0,0] element - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public ref T GetReferenceToOrigin() - { - int y = this.Rectangle.Y; - int x = this.Rectangle.X; - return ref this.DestinationBuffer.GetRowSpan(y)[x]; - } + internal ref T this[int x, int y] => ref this.Buffer[x + this.Rectangle.X, y + this.Rectangle.Y]; /// /// Gets a span to row 'y' inside this area. @@ -98,11 +94,11 @@ namespace SixLabors.ImageSharp.Memory int xx = this.Rectangle.X; int width = this.Rectangle.Width; - return this.DestinationBuffer.GetRowSpan(yy).Slice(xx, width); + return this.Buffer.GetRowSpan(yy).Slice(xx, width); } /// - /// Returns a sub-area as . (Similar to .) + /// Returns a sub-area as . (Similar to .) /// /// The x index at the subarea origin. /// The y index at the subarea origin. @@ -110,19 +106,19 @@ namespace SixLabors.ImageSharp.Memory /// The desired height of the subarea. /// The subarea [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferArea GetSubArea(int x, int y, int width, int height) + public BufferRegion GetSubArea(int x, int y, int width, int height) { var rectangle = new Rectangle(x, y, width, height); return this.GetSubArea(rectangle); } /// - /// Returns a sub-area as . (Similar to .) + /// Returns a sub-area as . (Similar to .) /// /// The specifying the boundaries of the subarea /// The subarea [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferArea GetSubArea(Rectangle rectangle) + public BufferRegion GetSubArea(Rectangle rectangle) { DebugGuard.MustBeLessThanOrEqualTo(rectangle.Width, this.Rectangle.Width, nameof(rectangle)); DebugGuard.MustBeLessThanOrEqualTo(rectangle.Height, this.Rectangle.Height, nameof(rectangle)); @@ -130,15 +126,27 @@ namespace SixLabors.ImageSharp.Memory int x = this.Rectangle.X + rectangle.X; int y = this.Rectangle.Y + rectangle.Y; rectangle = new Rectangle(x, y, rectangle.Width, rectangle.Height); - return new BufferArea(this.DestinationBuffer, rectangle); + return new BufferRegion(this.Buffer, rectangle); + } + + /// + /// Gets a reference to the [0,0] element. + /// + /// The reference to the [0,0] element + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal ref T GetReferenceToOrigin() + { + int y = this.Rectangle.Y; + int x = this.Rectangle.X; + return ref this.Buffer.GetRowSpan(y)[x]; } - public void Clear() + internal void Clear() { // Optimization for when the size of the area is the same as the buffer size. if (this.IsFullBufferArea) { - this.DestinationBuffer.FastMemoryGroup.Clear(); + this.Buffer.FastMemoryGroup.Clear(); return; } diff --git a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs new file mode 100644 index 000000000..6653259c5 --- /dev/null +++ b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs @@ -0,0 +1,90 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System; +using System.Collections.Generic; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.PixelFormats; + +namespace SixLabors.ImageSharp.Processing.Processors.Quantization +{ + /// + /// A pixel sampling strategy that enumerates a limited amount of rows from different frames, + /// if the total number of pixels is over a threshold. + /// + public class DefaultPixelSamplingStrategy : IPixelSamplingStrategy + { + // TODO: This value shall be determined by benchmarking. + // (Maximum quality while decoding time is still tolerable.) + private const int DefaultMaximumPixels = 8192 * 8192; + + /// + /// Initializes a new instance of the class. + /// + public DefaultPixelSamplingStrategy() + : this(DefaultMaximumPixels) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The maximum number of pixels to process. + public DefaultPixelSamplingStrategy(int maximumPixels) + { + Guard.MustBeGreaterThan(maximumPixels, 0, nameof(maximumPixels)); + this.MaximumPixels = maximumPixels; + } + + /// + /// Gets the maximum number of pixels to process. (The threshold.) + /// + public long MaximumPixels { get; } + + /// + public IEnumerable> EnumeratePixelRegions(Image image) + where TPixel : unmanaged, IPixel + { + long maximumPixels = Math.Min(MaximumPixels, (long)image.Width * image.Height * image.Frames.Count); + long maxNumberOfRows = maximumPixels / image.Width; + long totalNumberOfRows = (long)image.Height * image.Frames.Count; + + if (totalNumberOfRows <= maxNumberOfRows) + { + // Enumerate all pixels + foreach (ImageFrame frame in image.Frames) + { + yield return frame.PixelBuffer.GetRegion(); + } + } + else + { + double r = maxNumberOfRows / (double)totalNumberOfRows; + + r = Math.Round(r, 1); // Use a rough approximation to make sure we don't leave out large contiguous regions: + r = Math.Max(0.1, r); // always visit at least 10% of the image + + var ratio = new Rational(r); + + int denom = (int)ratio.Denominator; + int num = (int)ratio.Numerator; + + for (int pos = 0; pos < totalNumberOfRows; pos++) + { + int subPos = pos % denom; + if (subPos < num) + { + yield return GetRow(pos); + } + } + + BufferRegion GetRow(int pos) + { + int frameIdx = pos / image.Height; + int y = pos % image.Height; + return image.Frames[frameIdx].PixelBuffer.GetRegion(0, y, image.Width, 1); + } + } + } + } +} diff --git a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs new file mode 100644 index 000000000..e2774850a --- /dev/null +++ b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs @@ -0,0 +1,25 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System.Collections.Generic; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.PixelFormats; + +namespace SixLabors.ImageSharp.Processing.Processors.Quantization +{ + /// + /// A pixel sampling strategy that enumerates all pixels. + /// + public class ExtensivePixelSamplingStrategy : IPixelSamplingStrategy + { + /// + public IEnumerable> EnumeratePixelRegions(Image image) + where TPixel : unmanaged, IPixel + { + foreach (ImageFrame frame in image.Frames) + { + yield return frame.PixelBuffer.GetRegion(); + } + } + } +} diff --git a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs new file mode 100644 index 000000000..71b20174d --- /dev/null +++ b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs @@ -0,0 +1,24 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System.Collections.Generic; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.PixelFormats; + +namespace SixLabors.ImageSharp.Processing.Processors.Quantization +{ + /// + /// Provides an abstraction to enumerate pixel regions within a multi-framed . + /// + public interface IPixelSamplingStrategy + { + /// + /// Enumerates pixel regions within the image as . + /// + /// The image. + /// The pixel type. + /// An enumeration of pixel regions. + IEnumerable> EnumeratePixelRegions(Image image) + where TPixel : unmanaged, IPixel; + } +} diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs index 6eafbda89..630c88bac 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs @@ -172,13 +172,13 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms PixelConversionModifiers conversionModifiers = PixelConversionModifiers.Premultiply.ApplyCompanding(compand); - BufferArea sourceArea = source.PixelBuffer.GetArea(sourceRectangle); + BufferRegion sourceRegion = source.PixelBuffer.GetRegion(sourceRectangle); // To reintroduce parallel processing, we would launch multiple workers // for different row intervals of the image. using (var worker = new ResizeWorker( configuration, - sourceArea, + sourceRegion, conversionModifiers, horizontalKernelMap, verticalKernelMap, diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs index 898809d5a..6cdb7934c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs @@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms private readonly ResizeKernelMap horizontalKernelMap; - private readonly BufferArea source; + private readonly BufferRegion source; private readonly Rectangle sourceRectangle; @@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms public ResizeWorker( Configuration configuration, - BufferArea source, + BufferRegion source, PixelConversionModifiers conversionModifiers, ResizeKernelMap horizontalKernelMap, ResizeKernelMap verticalKernelMap, diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs index 76068ab43..0237c8170 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs @@ -18,20 +18,20 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations private Buffer2D buffer; - private BufferArea destArea; + private BufferRegion destRegion; [GlobalSetup] public void Setup() { this.buffer = Configuration.Default.MemoryAllocator.Allocate2D(1000, 500); - this.destArea = this.buffer.GetArea(200, 100, 128, 128); + this.destRegion = this.buffer.GetRegion(200, 100, 128, 128); } [Benchmark(Baseline = true)] public void Original() { - ref float destBase = ref this.destArea.GetReferenceToOrigin(); - int destStride = this.destArea.Stride; + ref float destBase = ref this.destRegion.GetReferenceToOrigin(); + int destStride = this.destRegion.Stride; ref Block8x8F src = ref this.block; @@ -92,8 +92,8 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations [Benchmark] public void Original_V2() { - ref float destBase = ref this.destArea.GetReferenceToOrigin(); - int destStride = this.destArea.Stride; + ref float destBase = ref this.destRegion.GetReferenceToOrigin(); + int destStride = this.destRegion.Stride; ref Block8x8F src = ref this.block; @@ -160,8 +160,8 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations [Benchmark] public void UseVector2() { - ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin()); - int destStride = this.destArea.Stride / 2; + ref Vector2 destBase = ref Unsafe.As(ref this.destRegion.GetReferenceToOrigin()); + int destStride = this.destRegion.Stride / 2; ref Block8x8F src = ref this.block; @@ -220,8 +220,8 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations [Benchmark] public void UseVector4() { - ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin()); - int destStride = this.destArea.Stride / 2; + ref Vector2 destBase = ref Unsafe.As(ref this.destRegion.GetReferenceToOrigin()); + int destStride = this.destRegion.Stride / 2; ref Block8x8F src = ref this.block; @@ -280,8 +280,8 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations [Benchmark] public void UseVector4_SafeRightCorner() { - ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin()); - int destStride = this.destArea.Stride / 2; + ref Vector2 destBase = ref Unsafe.As(ref this.destRegion.GetReferenceToOrigin()); + int destStride = this.destRegion.Stride / 2; ref Block8x8F src = ref this.block; @@ -338,8 +338,8 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations [Benchmark] public void UseVector4_V2() { - ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin()); - int destStride = this.destArea.Stride / 2; + ref Vector2 destBase = ref Unsafe.As(ref this.destRegion.GetReferenceToOrigin()); + int destStride = this.destRegion.Stride / 2; ref Block8x8F src = ref this.block; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs index f55e46c3d..169b9c0fc 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs @@ -43,8 +43,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(20, 20, AllocationOptions.Clean)) { - BufferArea area = buffer.GetArea(5, 10, 8, 8); - block.Copy1x1Scale(ref area.GetReferenceToOrigin(), area.Stride); + BufferRegion region = buffer.GetRegion(5, 10, 8, 8); + block.Copy1x1Scale(ref region.GetReferenceToOrigin(), region.Stride); Assert.Equal(block[0, 0], buffer[5, 10]); Assert.Equal(block[1, 0], buffer[6, 10]); @@ -71,8 +71,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(100, 100, AllocationOptions.Clean)) { - BufferArea area = buffer.GetArea(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); - block.ScaledCopyTo(area, horizontalFactor, verticalFactor); + BufferRegion region = buffer.GetRegion(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); + block.ScaledCopyTo(region, horizontalFactor, verticalFactor); for (int y = 0; y < 8 * verticalFactor; y++) { @@ -82,7 +82,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg int xx = x / horizontalFactor; float expected = block[xx, yy]; - float actual = area[x, y]; + float actual = region[x, y]; Assert.Equal(expected, actual); } diff --git a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs index 77e899a4c..81173b456 100644 --- a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs +++ b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs @@ -16,9 +16,9 @@ namespace SixLabors.ImageSharp.Tests.Memory { using Buffer2D buffer = this.memoryAllocator.Allocate2D(10, 20); var rectangle = new Rectangle(3, 2, 5, 6); - var area = new BufferArea(buffer, rectangle); + var area = new BufferRegion(buffer, rectangle); - Assert.Equal(buffer, area.DestinationBuffer); + Assert.Equal(buffer, area.Buffer); Assert.Equal(rectangle, area.Rectangle); } @@ -47,9 +47,9 @@ namespace SixLabors.ImageSharp.Tests.Memory using Buffer2D buffer = this.CreateTestBuffer(20, 30); var r = new Rectangle(rx, ry, 5, 6); - BufferArea area = buffer.GetArea(r); + BufferRegion region = buffer.GetRegion(r); - int value = area[x, y]; + int value = region[x, y]; int expected = ((ry + y) * 100) + rx + x; Assert.Equal(expected, value); } @@ -66,9 +66,9 @@ namespace SixLabors.ImageSharp.Tests.Memory using Buffer2D buffer = this.CreateTestBuffer(20, 30); var r = new Rectangle(rx, ry, w, h); - BufferArea area = buffer.GetArea(r); + BufferRegion region = buffer.GetRegion(r); - Span span = area.GetRowSpan(y); + Span span = region.GetRowSpan(y); Assert.Equal(w, span.Length); @@ -85,13 +85,13 @@ namespace SixLabors.ImageSharp.Tests.Memory public void GetSubArea() { using Buffer2D buffer = this.CreateTestBuffer(20, 30); - BufferArea area0 = buffer.GetArea(6, 8, 10, 10); + BufferRegion area0 = buffer.GetRegion(6, 8, 10, 10); - BufferArea area1 = area0.GetSubArea(4, 4, 5, 5); + BufferRegion area1 = area0.GetSubArea(4, 4, 5, 5); var expectedRect = new Rectangle(10, 12, 5, 5); - Assert.Equal(buffer, area1.DestinationBuffer); + Assert.Equal(buffer, area1.Buffer); Assert.Equal(expectedRect, area1.Rectangle); int value00 = (12 * 100) + 10; @@ -106,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Memory this.memoryAllocator.BufferCapacityInBytes = sizeof(int) * bufferCapacity; using Buffer2D buffer = this.CreateTestBuffer(20, 30); - BufferArea area0 = buffer.GetArea(6, 8, 10, 10); + BufferRegion area0 = buffer.GetRegion(6, 8, 10, 10); ref int r = ref area0.GetReferenceToOrigin(); @@ -123,7 +123,7 @@ namespace SixLabors.ImageSharp.Tests.Memory using Buffer2D buffer = this.CreateTestBuffer(22, 13); var emptyRow = new int[22]; - buffer.GetArea().Clear(); + buffer.GetRegion().Clear(); for (int y = 0; y < 13; y++) { @@ -140,8 +140,8 @@ namespace SixLabors.ImageSharp.Tests.Memory this.memoryAllocator.BufferCapacityInBytes = sizeof(int) * bufferCapacity; using Buffer2D buffer = this.CreateTestBuffer(20, 30); - BufferArea area = buffer.GetArea(5, 5, 10, 10); - area.Clear(); + BufferRegion region = buffer.GetRegion(5, 5, 10, 10); + region.Clear(); Assert.NotEqual(0, buffer[4, 4]); Assert.NotEqual(0, buffer[15, 15]); @@ -149,10 +149,10 @@ namespace SixLabors.ImageSharp.Tests.Memory Assert.Equal(0, buffer[5, 5]); Assert.Equal(0, buffer[14, 14]); - for (int y = area.Rectangle.Y; y < area.Rectangle.Bottom; y++) + for (int y = region.Rectangle.Y; y < region.Rectangle.Bottom; y++) { - Span span = buffer.GetRowSpan(y).Slice(area.Rectangle.X, area.Width); - Assert.True(span.SequenceEqual(new int[area.Width])); + Span span = buffer.GetRowSpan(y).Slice(region.Rectangle.X, region.Width); + Assert.True(span.SequenceEqual(new int[region.Width])); } } } diff --git a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs new file mode 100644 index 000000000..0787b56a9 --- /dev/null +++ b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs @@ -0,0 +1,99 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.PixelFormats; +using SixLabors.ImageSharp.Processing; +using SixLabors.ImageSharp.Processing.Processors.Quantization; +using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; +using Xunit; + +namespace SixLabors.ImageSharp.Tests.Quantization +{ + public class PixelSamplingStrategyTests + { + public static readonly TheoryData DefaultPixelSamplingStrategy_Data = new TheoryData() + { + { 100, 100, 1, 10000 }, + { 100, 100, 1, 5000 }, + { 100, 100, 10, 50000 }, + { 99, 100, 11, 30000 }, + { 97, 99, 11, 80000 }, + { 99, 100, 11, 20000 }, + { 99, 501, 20, 100000 }, + { 97, 500, 20, 10000 }, + { 103, 501, 20, 1000 }, + }; + + [Fact] + public void ExtensivePixelSamplingStrategy_EnumeratesAll() + { + using Image image = CreateTestImage(100, 100, 100); + var strategy = new ExtensivePixelSamplingStrategy(); + + foreach (BufferRegion region in strategy.EnumeratePixelRegions(image)) + { + PaintWhite(region); + } + + using Image expected = CreateTestImage(100, 100, 100, true); + + ImageComparer.Exact.VerifySimilarity(expected, image); + } + + [Theory] + [WithBlankImages(nameof(DefaultPixelSamplingStrategy_Data), 1, 1, PixelTypes.L8)] + public void DefaultPixelSamplingStrategy_IsFair(TestImageProvider dummyProvider, int width, int height, int noOfFrames, int maximumNumberOfPixels) + { + using Image image = CreateTestImage(width, height, noOfFrames); + + var strategy = new DefaultPixelSamplingStrategy(maximumNumberOfPixels); + + long visitedPixels = 0; + foreach (BufferRegion region in strategy.EnumeratePixelRegions(image)) + { + PaintWhite(region); + visitedPixels += region.Width * region.Height; + } + + image.DebugSaveMultiFrame( + dummyProvider, + $"W{width}_H{height}_noOfFrames_{noOfFrames}_maximumNumberOfPixels_{maximumNumberOfPixels}", + appendPixelTypeToFileName: false); + + int maximumPixels = image.Width * image.Height * image.Frames.Count / 10; + maximumPixels = Math.Max(maximumPixels, (int)strategy.MaximumPixels); + + // allow some inaccuracy: + double visitRatio = visitedPixels / (double)maximumPixels; + Assert.True(visitRatio <= 1.1, $"{visitedPixels}>{maximumPixels}"); + } + + static void PaintWhite(BufferRegion region) + { + var white = new L8(255); + for (int y = 0; y < region.Height; y++) + { + region.GetRowSpan(y).Fill(white); + } + } + + private Image CreateTestImage(int width, int height, int noOfFrames, bool paintWhite = false) + { + L8 bg = paintWhite ? new L8(255) : default; + var image = new Image(width, height, bg); + + for (int i = 1; i < noOfFrames; i++) + { + ImageFrame f = image.Frames.CreateFrame(); + if (paintWhite) + { + f.PixelBuffer.MemoryGroup.Fill(bg); + } + } + + return image; + } + } +} From b6208b9b61728ddad482efdd77b655ab9f03b440 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 30 Apr 2020 03:11:11 +0200 Subject: [PATCH 042/130] FrameQuantizer -> Quantizer --- src/ImageSharp/Advanced/AotCompilerTools.cs | 6 +++--- src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs | 2 +- src/ImageSharp/Formats/Gif/GifEncoderCore.cs | 8 ++++---- .../Formats/Png/PngEncoderOptionsHelpers.cs | 2 +- .../Processors/Dithering/ErrorDither.cs | 2 +- .../Processing/Processors/Dithering/IDither.cs | 2 +- .../Processors/Dithering/OrderedDither.cs | 4 ++-- .../Quantization/FrameQuantizerUtilities.cs | 13 +++++++------ .../Quantization/IFrameQuantizer{TPixel}.cs | 12 ++++++------ .../Processors/Quantization/IQuantizer.cs | 8 ++++---- .../Processors/Quantization/OctreeQuantizer.cs | 8 ++++---- ...izer{TPixel}.cs => OctreeQuantizer{TPixel}.cs} | 12 +++++++----- .../Processors/Quantization/PaletteQuantizer.cs | 8 ++++---- ...zer{TPixel}.cs => PaletteQuantizer{TPixel}.cs} | 9 +++++---- .../Quantization/QuantizeProcessor{TPixel}.cs | 2 +- .../Processors/Quantization/WuQuantizer.cs | 8 ++++---- ...uantizer{TPixel}.cs => WuQuantizer{TPixel}.cs} | 15 +++++++++------ .../Quantization/OctreeQuantizerTests.cs | 6 +++--- .../Quantization/PaletteQuantizerTests.cs | 6 +++--- .../Processors/Quantization/WuQuantizerTests.cs | 6 +++--- .../Quantization/QuantizedImageTests.cs | 12 ++++++------ .../Quantization/WuQuantizerTests.cs | 10 +++++----- 22 files changed, 84 insertions(+), 77 deletions(-) rename src/ImageSharp/Processing/Processors/Quantization/{OctreeFrameQuantizer{TPixel}.cs => OctreeQuantizer{TPixel}.cs} (97%) rename src/ImageSharp/Processing/Processors/Quantization/{PaletteFrameQuantizer{TPixel}.cs => PaletteQuantizer{TPixel}.cs} (91%) rename src/ImageSharp/Processing/Processors/Quantization/{WuFrameQuantizer{TPixel}.cs => WuQuantizer{TPixel}.cs} (98%) diff --git a/src/ImageSharp/Advanced/AotCompilerTools.cs b/src/ImageSharp/Advanced/AotCompilerTools.cs index 23ae62c7a..d692292b0 100644 --- a/src/ImageSharp/Advanced/AotCompilerTools.cs +++ b/src/ImageSharp/Advanced/AotCompilerTools.cs @@ -112,7 +112,7 @@ namespace SixLabors.ImageSharp.Advanced private static void AotCompileOctreeQuantizer() where TPixel : unmanaged, IPixel { - using (var test = new OctreeFrameQuantizer(Configuration.Default, new OctreeQuantizer().Options)) + using (var test = new OctreeQuantizer(Configuration.Default, new OctreeQuantizer().Options)) { var frame = new ImageFrame(Configuration.Default, 1, 1); test.QuantizeFrame(frame, frame.Bounds()); @@ -126,7 +126,7 @@ namespace SixLabors.ImageSharp.Advanced private static void AotCompileWuQuantizer() where TPixel : unmanaged, IPixel { - using (var test = new WuFrameQuantizer(Configuration.Default, new WuQuantizer().Options)) + using (var test = new WuQuantizer(Configuration.Default, new WuQuantizer().Options)) { var frame = new ImageFrame(Configuration.Default, 1, 1); test.QuantizeFrame(frame, frame.Bounds()); @@ -140,7 +140,7 @@ namespace SixLabors.ImageSharp.Advanced private static void AotCompilePaletteQuantizer() where TPixel : unmanaged, IPixel { - using (var test = (PaletteFrameQuantizer)new PaletteQuantizer(Array.Empty()).CreateFrameQuantizer(Configuration.Default)) + using (var test = (PaletteQuantizer)new PaletteQuantizer(Array.Empty()).CreatePixelSpecificQuantizer(Configuration.Default)) { var frame = new ImageFrame(Configuration.Default, 1, 1); test.QuantizeFrame(frame, frame.Bounds()); diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs index 7d2799503..c7c53037f 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs @@ -336,7 +336,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp private void Write8BitColor(Stream stream, ImageFrame image, Span colorPalette) where TPixel : unmanaged, IPixel { - using IFrameQuantizer frameQuantizer = this.quantizer.CreateFrameQuantizer(this.configuration); + using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration); using IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(image, image.Bounds()); ReadOnlySpan quantizedColors = quantized.Palette.Span; diff --git a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs index 62410025c..ae5f62443 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs @@ -81,7 +81,7 @@ namespace SixLabors.ImageSharp.Formats.Gif // Quantize the image returning a palette. IndexedImageFrame quantized; - using (IFrameQuantizer frameQuantizer = this.quantizer.CreateFrameQuantizer(this.configuration)) + using (IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration)) { quantized = frameQuantizer.QuantizeFrame(image.Frames.RootFrame, image.Bounds()); } @@ -154,7 +154,7 @@ namespace SixLabors.ImageSharp.Formats.Gif pixelMap = new EuclideanPixelMap(this.configuration, quantized.Palette); } - using var paletteFrameQuantizer = new PaletteFrameQuantizer(this.configuration, this.quantizer.Options, pixelMap); + using var paletteFrameQuantizer = new PaletteQuantizer(this.configuration, this.quantizer.Options, pixelMap); using IndexedImageFrame paletteQuantized = paletteFrameQuantizer.QuantizeFrame(frame, frame.Bounds()); this.WriteImageData(paletteQuantized, stream); } @@ -184,12 +184,12 @@ namespace SixLabors.ImageSharp.Formats.Gif MaxColors = frameMetadata.ColorTableLength }; - using IFrameQuantizer frameQuantizer = this.quantizer.CreateFrameQuantizer(this.configuration, options); + using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration, options); quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); } else { - using IFrameQuantizer frameQuantizer = this.quantizer.CreateFrameQuantizer(this.configuration); + using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration); quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); } } diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs index 3f490ca6f..8cfd2af35 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs @@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.Formats.Png } // Create quantized frame returning the palette and set the bit depth. - using (IFrameQuantizer frameQuantizer = options.Quantizer.CreateFrameQuantizer(image.GetConfiguration())) + using (IQuantizer frameQuantizer = options.Quantizer.CreatePixelSpecificQuantizer(image.GetConfiguration())) { ImageFrame frame = image.Frames.RootFrame; return frameQuantizer.QuantizeFrame(frame, frame.Bounds()); diff --git a/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs b/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs index 7d30bada6..e322afb8d 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs @@ -93,7 +93,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Dithering ImageFrame source, IndexedImageFrame destination, Rectangle bounds) - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel { int offsetY = bounds.Top; diff --git a/src/ImageSharp/Processing/Processors/Dithering/IDither.cs b/src/ImageSharp/Processing/Processors/Dithering/IDither.cs index 8f9d82537..8b0e1b8a8 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/IDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/IDither.cs @@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Dithering ImageFrame source, IndexedImageFrame destination, Rectangle bounds) - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel; /// diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs index 6862cff00..0f5a7fb55 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs @@ -108,7 +108,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Dithering ImageFrame source, IndexedImageFrame destination, Rectangle bounds) - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel { var ditherOperation = new QuantizeDitherRowOperation( @@ -195,7 +195,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Dithering => HashCode.Combine(this.thresholdMatrix, this.modulusX, this.modulusY); private readonly struct QuantizeDitherRowOperation : IRowOperation - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel { private readonly TFrameQuantizer quantizer; diff --git a/src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs b/src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs index 4d75042ea..c74ea4959 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs @@ -11,7 +11,7 @@ using SixLabors.ImageSharp.Processing.Processors.Dithering; namespace SixLabors.ImageSharp.Processing.Processors.Quantization { /// - /// Contains utility methods for instances. + /// Contains utility methods for instances. /// public static class FrameQuantizerUtilities { @@ -22,7 +22,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// The pixel format. /// The frame quantizer palette. /// - /// The palette has not been built via + /// The palette has not been built via /// public static void CheckPaletteState(in ReadOnlyMemory palette) where TPixel : unmanaged, IPixel @@ -48,14 +48,15 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization ref TFrameQuantizer quantizer, ImageFrame source, Rectangle bounds) - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel { Guard.NotNull(source, nameof(source)); var interest = Rectangle.Intersect(source.Bounds(), bounds); + BufferRegion region = source.PixelBuffer.GetRegion(interest); // Collect the palette. Required before the second pass runs. - quantizer.BuildPalette(source, interest); + quantizer.CollectPaletteColors(region); var destination = new IndexedImageFrame( quantizer.Configuration, @@ -83,7 +84,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization ImageFrame source, IndexedImageFrame destination, Rectangle bounds) - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel { IDither dither = quantizer.Options.Dither; @@ -108,7 +109,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization } private readonly struct RowIntervalOperation : IRowIntervalOperation - where TFrameQuantizer : struct, IFrameQuantizer + where TFrameQuantizer : struct, IQuantizer where TPixel : unmanaged, IPixel { private readonly TFrameQuantizer quantizer; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs index cc87715eb..33ba61747 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. using System; +using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Processing.Processors.Quantization @@ -10,7 +11,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// Provides methods to allow the execution of the quantization process on an image frame. /// /// The pixel format. - public interface IFrameQuantizer : IDisposable + public interface IQuantizer : IDisposable where TPixel : unmanaged, IPixel { /// @@ -27,16 +28,15 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// Gets the quantized color palette. /// /// - /// The palette has not been built via . + /// The palette has not been built via . /// ReadOnlyMemory Palette { get; } /// - /// Builds the quantized palette from the given image frame and bounds. + /// Adds colors to the quantized palette from the given pixel source. /// - /// The source image frame. - /// The region of interest bounds. - void BuildPalette(ImageFrame source, Rectangle bounds); + /// The of source pixels to register. + void CollectPaletteColors(BufferRegion pixelRegion); /// /// Quantizes an image frame and return the resulting output pixels. diff --git a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs index 01e4b5e8a..e59b9a6a7 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs @@ -20,8 +20,8 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// The to configure internal operations. /// The pixel format. - /// The . - IFrameQuantizer CreateFrameQuantizer(Configuration configuration) + /// The . + IQuantizer CreatePixelSpecificQuantizer(Configuration configuration) where TPixel : unmanaged, IPixel; /// @@ -30,8 +30,8 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// The pixel format. /// The to configure internal operations. /// The options to create the quantizer with. - /// The . - IFrameQuantizer CreateFrameQuantizer(Configuration configuration, QuantizerOptions options) + /// The . + IQuantizer CreatePixelSpecificQuantizer(Configuration configuration, QuantizerOptions options) where TPixel : unmanaged, IPixel; } } diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs index 9e04edef0..02e85167d 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs @@ -36,13 +36,13 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public QuantizerOptions Options { get; } /// - public IFrameQuantizer CreateFrameQuantizer(Configuration configuration) + public IQuantizer CreatePixelSpecificQuantizer(Configuration configuration) where TPixel : unmanaged, IPixel - => this.CreateFrameQuantizer(configuration, this.Options); + => this.CreatePixelSpecificQuantizer(configuration, this.Options); /// - public IFrameQuantizer CreateFrameQuantizer(Configuration configuration, QuantizerOptions options) + public IQuantizer CreatePixelSpecificQuantizer(Configuration configuration, QuantizerOptions options) where TPixel : unmanaged, IPixel - => new OctreeFrameQuantizer(configuration, options); + => new OctreeQuantizer(configuration, options); } } diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeFrameQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs similarity index 97% rename from src/ImageSharp/Processing/Processors/Quantization/OctreeFrameQuantizer{TPixel}.cs rename to src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs index ce2e406d4..2a9b8d79b 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeFrameQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs @@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// /// The pixel format. - public struct OctreeFrameQuantizer : IFrameQuantizer + public struct OctreeQuantizer : IQuantizer where TPixel : unmanaged, IPixel { private readonly int maxColors; @@ -29,12 +29,12 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization private bool isDisposed; /// - /// Initializes a new instance of the struct. + /// Initializes a new instance of the struct. /// /// The configuration which allows altering default behaviour or extending the library. /// The quantizer options defining quantization rules. [MethodImpl(InliningOptions.ShortMethod)] - public OctreeFrameQuantizer(Configuration configuration, QuantizerOptions options) + public OctreeQuantizer(Configuration configuration, QuantizerOptions options) { Guard.NotNull(configuration, nameof(configuration)); Guard.NotNull(options, nameof(options)); @@ -69,15 +69,17 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] - public void BuildPalette(ImageFrame source, Rectangle bounds) + public void CollectPaletteColors(BufferRegion pixelRegion) { + Rectangle bounds = pixelRegion.Rectangle; + Buffer2D source = pixelRegion.Buffer; using IMemoryOwner buffer = this.Configuration.MemoryAllocator.Allocate(bounds.Width); Span bufferSpan = buffer.GetSpan(); // Loop through each row for (int y = bounds.Top; y < bounds.Bottom; y++) { - Span row = source.GetPixelRowSpan(y).Slice(bounds.Left, bounds.Width); + Span row = source.GetRowSpan(y).Slice(bounds.Left, bounds.Width); PixelOperations.Instance.ToRgba32(this.Configuration, row, bufferSpan); for (int x = 0; x < bufferSpan.Length; x++) diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs index c14ea6153..38816a168 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs @@ -41,12 +41,12 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public QuantizerOptions Options { get; } /// - public IFrameQuantizer CreateFrameQuantizer(Configuration configuration) + public IQuantizer CreatePixelSpecificQuantizer(Configuration configuration) where TPixel : unmanaged, IPixel - => this.CreateFrameQuantizer(configuration, this.Options); + => this.CreatePixelSpecificQuantizer(configuration, this.Options); /// - public IFrameQuantizer CreateFrameQuantizer(Configuration configuration, QuantizerOptions options) + public IQuantizer CreatePixelSpecificQuantizer(Configuration configuration, QuantizerOptions options) where TPixel : unmanaged, IPixel { Guard.NotNull(options, nameof(options)); @@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization Color.ToPixel(configuration, this.colorPalette.Span, palette.AsSpan()); var pixelMap = new EuclideanPixelMap(configuration, palette); - return new PaletteFrameQuantizer(configuration, options, pixelMap); + return new PaletteQuantizer(configuration, options, pixelMap); } } } diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteFrameQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs similarity index 91% rename from src/ImageSharp/Processing/Processors/Quantization/PaletteFrameQuantizer{TPixel}.cs rename to src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs index ade73e2d0..e40cf0c8c 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteFrameQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs @@ -3,6 +3,7 @@ using System; using System.Runtime.CompilerServices; +using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Processing.Processors.Quantization @@ -12,19 +13,19 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// /// The pixel format. - internal struct PaletteFrameQuantizer : IFrameQuantizer + internal struct PaletteQuantizer : IQuantizer where TPixel : unmanaged, IPixel { private readonly EuclideanPixelMap pixelMap; /// - /// Initializes a new instance of the struct. + /// Initializes a new instance of the struct. /// /// The configuration which allows altering default behaviour or extending the library. /// The quantizer options defining quantization rules. /// The pixel map for looking up color matches from a predefined palette. [MethodImpl(InliningOptions.ShortMethod)] - public PaletteFrameQuantizer( + public PaletteQuantizer( Configuration configuration, QuantizerOptions options, EuclideanPixelMap pixelMap) @@ -53,7 +54,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] - public void BuildPalette(ImageFrame source, Rectangle bounds) + public void CollectPaletteColors(BufferRegion pixelRegion) { } diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs index 386caf1be..dce769692 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs @@ -38,7 +38,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization var interest = Rectangle.Intersect(source.Bounds(), this.SourceRectangle); Configuration configuration = this.Configuration; - using IFrameQuantizer frameQuantizer = this.quantizer.CreateFrameQuantizer(configuration); + using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(configuration); using IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(source, interest); var operation = new RowIntervalOperation(this.SourceRectangle, source, quantized); diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs index d2e33aa1f..0f1dff181 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs @@ -35,13 +35,13 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public QuantizerOptions Options { get; } /// - public IFrameQuantizer CreateFrameQuantizer(Configuration configuration) + public IQuantizer CreatePixelSpecificQuantizer(Configuration configuration) where TPixel : unmanaged, IPixel - => this.CreateFrameQuantizer(configuration, this.Options); + => this.CreatePixelSpecificQuantizer(configuration, this.Options); /// - public IFrameQuantizer CreateFrameQuantizer(Configuration configuration, QuantizerOptions options) + public IQuantizer CreatePixelSpecificQuantizer(Configuration configuration, QuantizerOptions options) where TPixel : unmanaged, IPixel - => new WuFrameQuantizer(configuration, options); + => new WuQuantizer(configuration, options); } } diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuFrameQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs similarity index 98% rename from src/ImageSharp/Processing/Processors/Quantization/WuFrameQuantizer{TPixel}.cs rename to src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs index d15db74e6..a83bf3b6d 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuFrameQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs @@ -32,7 +32,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// /// The pixel format. - internal struct WuFrameQuantizer : IFrameQuantizer + internal struct WuQuantizer : IQuantizer where TPixel : unmanaged, IPixel { private readonly MemoryAllocator memoryAllocator; @@ -77,12 +77,12 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization private bool isDisposed; /// - /// Initializes a new instance of the struct. + /// Initializes a new instance of the struct. /// /// The configuration which allows altering default behaviour or extending the library. /// The quantizer options defining quantization rules. [MethodImpl(InliningOptions.ShortMethod)] - public WuFrameQuantizer(Configuration configuration, QuantizerOptions options) + public WuQuantizer(Configuration configuration, QuantizerOptions options) { Guard.NotNull(configuration, nameof(configuration)); Guard.NotNull(options, nameof(options)); @@ -118,8 +118,11 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization } /// - public void BuildPalette(ImageFrame source, Rectangle bounds) + public void CollectPaletteColors(BufferRegion pixelRegion) { + Rectangle bounds = pixelRegion.Rectangle; + Buffer2D source = pixelRegion.Buffer; + this.Build3DHistogram(source, bounds); this.Get3DMoments(this.memoryAllocator); this.BuildCube(); @@ -360,7 +363,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// The source data. /// The bounds within the source image to quantize. - private void Build3DHistogram(ImageFrame source, Rectangle bounds) + private void Build3DHistogram(Buffer2D source, Rectangle bounds) { Span momentSpan = this.momentsOwner.GetSpan(); @@ -370,7 +373,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization for (int y = bounds.Top; y < bounds.Bottom; y++) { - Span row = source.GetPixelRowSpan(y).Slice(bounds.Left, bounds.Width); + Span row = source.GetRowSpan(y).Slice(bounds.Left, bounds.Width); PixelOperations.Instance.ToRgba32(this.Configuration, row, bufferSpan); for (int x = 0; x < bufferSpan.Length; x++) diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs index bb7921d68..dd27164f3 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs @@ -39,7 +39,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Quantization public void OctreeQuantizerCanCreateFrameQuantizer() { var quantizer = new OctreeQuantizer(); - IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.NotNull(frameQuantizer.Options); @@ -47,14 +47,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Quantization frameQuantizer.Dispose(); quantizer = new OctreeQuantizer(new QuantizerOptions { Dither = null }); - frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.Null(frameQuantizer.Options.Dither); frameQuantizer.Dispose(); quantizer = new OctreeQuantizer(new QuantizerOptions { Dither = KnownDitherings.Atkinson }); - frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.Equal(KnownDitherings.Atkinson, frameQuantizer.Options.Dither); frameQuantizer.Dispose(); diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs index 3c1fa11ab..acc9a0e01 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs @@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Quantization public void PaletteQuantizerCanCreateFrameQuantizer() { var quantizer = new PaletteQuantizer(Palette); - IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.NotNull(frameQuantizer.Options); @@ -49,14 +49,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Quantization frameQuantizer.Dispose(); quantizer = new PaletteQuantizer(Palette, new QuantizerOptions { Dither = null }); - frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.Null(frameQuantizer.Options.Dither); frameQuantizer.Dispose(); quantizer = new PaletteQuantizer(Palette, new QuantizerOptions { Dither = KnownDitherings.Atkinson }); - frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.Equal(KnownDitherings.Atkinson, frameQuantizer.Options.Dither); frameQuantizer.Dispose(); diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs index eb9d738e9..d78e9254c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs @@ -39,7 +39,7 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Quantization public void WuQuantizerCanCreateFrameQuantizer() { var quantizer = new WuQuantizer(); - IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.NotNull(frameQuantizer.Options); @@ -47,14 +47,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Quantization frameQuantizer.Dispose(); quantizer = new WuQuantizer(new QuantizerOptions { Dither = null }); - frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.Null(frameQuantizer.Options.Dither); frameQuantizer.Dispose(); quantizer = new WuQuantizer(new QuantizerOptions { Dither = KnownDitherings.Atkinson }); - frameQuantizer = quantizer.CreateFrameQuantizer(Configuration.Default); + frameQuantizer = quantizer.CreatePixelSpecificQuantizer(Configuration.Default); Assert.NotNull(frameQuantizer); Assert.Equal(KnownDitherings.Atkinson, frameQuantizer.Options.Dither); frameQuantizer.Dispose(); diff --git a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs index 7945741b0..86229a7b6 100644 --- a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs +++ b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs @@ -27,22 +27,22 @@ namespace SixLabors.ImageSharp.Tests Assert.NotNull(octree.Options.Dither); Assert.NotNull(wu.Options.Dither); - using (IFrameQuantizer quantizer = werner.CreateFrameQuantizer(this.Configuration)) + using (IQuantizer quantizer = werner.CreatePixelSpecificQuantizer(this.Configuration)) { Assert.NotNull(quantizer.Options.Dither); } - using (IFrameQuantizer quantizer = webSafe.CreateFrameQuantizer(this.Configuration)) + using (IQuantizer quantizer = webSafe.CreatePixelSpecificQuantizer(this.Configuration)) { Assert.NotNull(quantizer.Options.Dither); } - using (IFrameQuantizer quantizer = octree.CreateFrameQuantizer(this.Configuration)) + using (IQuantizer quantizer = octree.CreatePixelSpecificQuantizer(this.Configuration)) { Assert.NotNull(quantizer.Options.Dither); } - using (IFrameQuantizer quantizer = wu.CreateFrameQuantizer(this.Configuration)) + using (IQuantizer quantizer = wu.CreatePixelSpecificQuantizer(this.Configuration)) { Assert.NotNull(quantizer.Options.Dither); } @@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests foreach (ImageFrame frame in image.Frames) { - using (IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(this.Configuration)) + using (IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(this.Configuration)) using (IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds())) { int index = this.GetTransparentIndex(quantized); @@ -100,7 +100,7 @@ namespace SixLabors.ImageSharp.Tests foreach (ImageFrame frame in image.Frames) { - using (IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(this.Configuration)) + using (IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(this.Configuration)) using (IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds())) { int index = this.GetTransparentIndex(quantized); diff --git a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs index 37b8cab60..75e88ba79 100644 --- a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs @@ -20,7 +20,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization using var image = new Image(config, 1, 1, Color.Black); ImageFrame frame = image.Frames.RootFrame; - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); + using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); Assert.Equal(1, result.Palette.Length); @@ -40,7 +40,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization using var image = new Image(config, 1, 1, default(Rgba32)); ImageFrame frame = image.Frames.RootFrame; - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); + using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); Assert.Equal(1, result.Palette.Length); @@ -86,7 +86,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization ImageFrame frame = image.Frames.RootFrame; - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); + using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); Assert.Equal(256, result.Palette.Length); @@ -126,7 +126,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization var quantizer = new WuQuantizer(new QuantizerOptions { Dither = null }); ImageFrame frame = image.Frames.RootFrame; - using IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config); + using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); Assert.Equal(48, result.Palette.Length); @@ -155,7 +155,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization var quantizer = new WuQuantizer(new QuantizerOptions { Dither = null }); ImageFrame frame = image.Frames.RootFrame; - using (IFrameQuantizer frameQuantizer = quantizer.CreateFrameQuantizer(config)) + using (IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config)) using (IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds())) { Assert.Equal(4 * 8, result.Palette.Length); From 8551b8bc12ec4dc5b445ad3d1a803d0a3d2ae85c Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 30 Apr 2020 03:13:15 +0200 Subject: [PATCH 043/130] fix style issue --- .../Quantization/PixelSamplingStrategyTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs index 0787b56a9..3ee7fdb31 100644 --- a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs +++ b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs @@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization Assert.True(visitRatio <= 1.1, $"{visitedPixels}>{maximumPixels}"); } - static void PaintWhite(BufferRegion region) + private static void PaintWhite(BufferRegion region) { var white = new L8(255); for (int y = 0; y < region.Height; y++) @@ -79,7 +79,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization } } - private Image CreateTestImage(int width, int height, int noOfFrames, bool paintWhite = false) + private static Image CreateTestImage(int width, int height, int noOfFrames, bool paintWhite = false) { L8 bg = paintWhite ? new L8(255) : default; var image = new Image(width, height, bg); From 097b9dd4fdcde29ca51332a913584db861bad3da Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 30 Apr 2020 04:17:54 +0200 Subject: [PATCH 044/130] BuildPaletteAndQuantizeFrame, use IPixelSamplingStrategy in GifEncoder --- src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs | 2 +- src/ImageSharp/Formats/Gif/GifEncoder.cs | 6 ++- src/ImageSharp/Formats/Gif/GifEncoderCore.cs | 21 ++++++-- .../Formats/Gif/IGifEncoderOptions.cs | 5 ++ .../Formats/Png/PngEncoderOptionsHelpers.cs | 2 +- .../DefaultPixelSamplingStrategy.cs | 31 +++++++++--- ...tizer{TPixel}.cs => IQuantizer{TPixel}.cs} | 8 ++- .../Quantization/OctreeQuantizer{TPixel}.cs | 6 +-- .../Quantization/PaletteQuantizer{TPixel}.cs | 4 +- .../Quantization/QuantizeProcessor{TPixel}.cs | 2 +- ...izerUtilities.cs => QuantizerUtilities.cs} | 49 ++++++++++++++++--- .../Quantization/WuQuantizer{TPixel}.cs | 6 +-- .../Formats/Gif/GifEncoderTests.cs | 26 ++++++---- .../PixelSamplingStrategyTests.cs | 2 +- .../Quantization/QuantizedImageTests.cs | 4 +- .../Quantization/WuQuantizerTests.cs | 10 ++-- 16 files changed, 136 insertions(+), 48 deletions(-) rename src/ImageSharp/Processing/Processors/Quantization/{IFrameQuantizer{TPixel}.cs => IQuantizer{TPixel}.cs} (85%) rename src/ImageSharp/Processing/Processors/Quantization/{FrameQuantizerUtilities.cs => QuantizerUtilities.cs} (77%) diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs index c7c53037f..2d6b623a1 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs @@ -337,7 +337,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp where TPixel : unmanaged, IPixel { using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration); - using IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(image, image.Bounds()); + using IndexedImageFrame quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(image, image.Bounds()); ReadOnlySpan quantizedColors = quantized.Palette.Span; var color = default(Rgba32); diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index aa276cd98..e95a1ae32 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -25,7 +25,11 @@ namespace SixLabors.ImageSharp.Formats.Gif /// public GifColorTableMode? ColorTableMode { get; set; } - internal IPixelSamplingStrategy GlobalPixelSamplingStrategy { get; set; } + /// + /// Gets or sets the used for quantization + /// when building a global color table in case of . + /// + public IPixelSamplingStrategy GlobalPixelSamplingStrategy { get; set; } = new DefaultPixelSamplingStrategy(); /// public void Encode(Image image, Stream stream) diff --git a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs index ae5f62443..0f2063060 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs @@ -49,6 +49,11 @@ namespace SixLabors.ImageSharp.Formats.Gif /// private int bitDepth; + /// + /// The pixel sampling strategy for global quantization. + /// + private IPixelSamplingStrategy pixelSamplingStrategy; + /// /// Initializes a new instance of the class. /// @@ -60,6 +65,7 @@ namespace SixLabors.ImageSharp.Formats.Gif this.memoryAllocator = configuration.MemoryAllocator; this.quantizer = options.Quantizer; this.colorTableMode = options.ColorTableMode; + this.pixelSamplingStrategy = options.GlobalPixelSamplingStrategy; } /// @@ -81,9 +87,18 @@ namespace SixLabors.ImageSharp.Formats.Gif // Quantize the image returning a palette. IndexedImageFrame quantized; + using (IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration)) { - quantized = frameQuantizer.QuantizeFrame(image.Frames.RootFrame, image.Bounds()); + if (useGlobalTable) + { + frameQuantizer.BuildPalette(this.pixelSamplingStrategy, image); + quantized = frameQuantizer.QuantizeFrame(image.Frames.RootFrame, image.Bounds()); + } + else + { + quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(image.Frames.RootFrame, image.Bounds()); + } } // Get the number of bits. @@ -185,12 +200,12 @@ namespace SixLabors.ImageSharp.Formats.Gif }; using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration, options); - quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); } else { using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(this.configuration); - quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); } } diff --git a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs index 752e6866f..151e1a23d 100644 --- a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs +++ b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs @@ -22,5 +22,10 @@ namespace SixLabors.ImageSharp.Formats.Gif /// Gets the color table mode: Global or local. /// GifColorTableMode? ColorTableMode { get; } + + /// + /// Gets the used for quantization when building a global color table. + /// + IPixelSamplingStrategy GlobalPixelSamplingStrategy { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs index 8cfd2af35..99e64c2fb 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs @@ -80,7 +80,7 @@ namespace SixLabors.ImageSharp.Formats.Png using (IQuantizer frameQuantizer = options.Quantizer.CreatePixelSpecificQuantizer(image.GetConfiguration())) { ImageFrame frame = image.Frames.RootFrame; - return frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + return frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); } } diff --git a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs index 6653259c5..660d41bd5 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs @@ -15,14 +15,14 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public class DefaultPixelSamplingStrategy : IPixelSamplingStrategy { // TODO: This value shall be determined by benchmarking. - // (Maximum quality while decoding time is still tolerable.) - private const int DefaultMaximumPixels = 8192 * 8192; + // A smaller value should likely work well, providing better perf. + private const int DefaultMaximumPixels = 4096 * 4096; /// /// Initializes a new instance of the class. /// public DefaultPixelSamplingStrategy() - : this(DefaultMaximumPixels) + : this(DefaultMaximumPixels, 0.1) { } @@ -30,10 +30,12 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// Initializes a new instance of the class. /// /// The maximum number of pixels to process. - public DefaultPixelSamplingStrategy(int maximumPixels) + /// always scan at least this portion of total pixels within the image. + public DefaultPixelSamplingStrategy(int maximumPixels, double minimumScanRatio) { Guard.MustBeGreaterThan(maximumPixels, 0, nameof(maximumPixels)); this.MaximumPixels = maximumPixels; + this.MinimumScanRatio = minimumScanRatio; } /// @@ -41,11 +43,17 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// public long MaximumPixels { get; } + /// + /// Gets a value indicating: always scan at least this portion of total pixels within the image. + /// The default is 0.1 (10%). + /// + public double MinimumScanRatio { get; } + /// public IEnumerable> EnumeratePixelRegions(Image image) where TPixel : unmanaged, IPixel { - long maximumPixels = Math.Min(MaximumPixels, (long)image.Width * image.Height * image.Frames.Count); + long maximumPixels = Math.Min(this.MaximumPixels, (long)image.Width * image.Height * image.Frames.Count); long maxNumberOfRows = maximumPixels / image.Width; long totalNumberOfRows = (long)image.Height * image.Frames.Count; @@ -61,8 +69,17 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization { double r = maxNumberOfRows / (double)totalNumberOfRows; - r = Math.Round(r, 1); // Use a rough approximation to make sure we don't leave out large contiguous regions: - r = Math.Max(0.1, r); // always visit at least 10% of the image + // Use a rough approximation to make sure we don't leave out large contiguous regions: + if (maxNumberOfRows > 200) + { + r = Math.Round(r, 2); + } + else + { + r = Math.Round(r, 1); + } + + r = Math.Max(this.MinimumScanRatio, r); // always visit the minimum defined portion of the image. var ratio = new Rational(r); diff --git a/src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs similarity index 85% rename from src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs rename to src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs index 33ba61747..0c3c6a83a 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IFrameQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs @@ -28,7 +28,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// Gets the quantized color palette. /// /// - /// The palette has not been built via . + /// The palette has not been built via . /// ReadOnlyMemory Palette { get; } @@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// Adds colors to the quantized palette from the given pixel source. /// /// The of source pixels to register. - void CollectPaletteColors(BufferRegion pixelRegion); + void AddPaletteColors(BufferRegion pixelRegion); /// /// Quantizes an image frame and return the resulting output pixels. @@ -46,6 +46,10 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// A representing a quantized version of the source frame pixels. /// + /// + /// Only executes the second (quantization) step. The palette has to be built by calling . + /// To run both steps, use . + /// IndexedImageFrame QuantizeFrame(ImageFrame source, Rectangle bounds); /// diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs index 2a9b8d79b..c74e8ef86 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs @@ -62,14 +62,14 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization { get { - FrameQuantizerUtilities.CheckPaletteState(in this.palette); + QuantizerUtilities.CheckPaletteState(in this.palette); return this.palette; } } /// [MethodImpl(InliningOptions.ShortMethod)] - public void CollectPaletteColors(BufferRegion pixelRegion) + public void AddPaletteColors(BufferRegion pixelRegion) { Rectangle bounds = pixelRegion.Rectangle; Buffer2D source = pixelRegion.Buffer; @@ -105,7 +105,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] public readonly IndexedImageFrame QuantizeFrame(ImageFrame source, Rectangle bounds) - => FrameQuantizerUtilities.QuantizeFrame(ref Unsafe.AsRef(this), source, bounds); + => QuantizerUtilities.QuantizeFrame(ref Unsafe.AsRef(this), source, bounds); /// [MethodImpl(InliningOptions.ShortMethod)] diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs index e40cf0c8c..44daef84d 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs @@ -50,11 +50,11 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] public readonly IndexedImageFrame QuantizeFrame(ImageFrame source, Rectangle bounds) - => FrameQuantizerUtilities.QuantizeFrame(ref Unsafe.AsRef(this), source, bounds); + => QuantizerUtilities.QuantizeFrame(ref Unsafe.AsRef(this), source, bounds); /// [MethodImpl(InliningOptions.ShortMethod)] - public void CollectPaletteColors(BufferRegion pixelRegion) + public void AddPaletteColors(BufferRegion pixelRegion) { } diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs index dce769692..9bc94831a 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs @@ -39,7 +39,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization Configuration configuration = this.Configuration; using IQuantizer frameQuantizer = this.quantizer.CreatePixelSpecificQuantizer(configuration); - using IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(source, interest); + using IndexedImageFrame quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(source, interest); var operation = new RowIntervalOperation(this.SourceRectangle, source, quantized); ParallelRowIterator.IterateRowIntervals( diff --git a/src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs similarity index 77% rename from src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs rename to src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs index c74ea4959..a3f13e00d 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/FrameQuantizerUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs @@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// Contains utility methods for instances. /// - public static class FrameQuantizerUtilities + public static class QuantizerUtilities { /// /// Helper method for throwing an exception when a frame quantizer palette has @@ -22,7 +22,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// The pixel format. /// The frame quantizer palette. /// - /// The palette has not been built via + /// The palette has not been built via /// public static void CheckPaletteState(in ReadOnlyMemory palette) where TPixel : unmanaged, IPixel @@ -33,12 +33,39 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization } } + /// + /// Execute both steps of the quantization. + /// + /// The pixel specific quantizer. + /// The source image frame to quantize. + /// The bounds within the frame to quantize. + /// The pixel type. + /// + /// A representing a quantized version of the source frame pixels. + /// + public static IndexedImageFrame BuildPaletteAndQuantizeFrame( + this IQuantizer quantizer, + ImageFrame source, + Rectangle bounds) + where TPixel : unmanaged, IPixel + { + Guard.NotNull(quantizer, nameof(quantizer)); + Guard.NotNull(source, nameof(source)); + + var interest = Rectangle.Intersect(source.Bounds(), bounds); + BufferRegion region = source.PixelBuffer.GetRegion(interest); + + // Collect the palette. Required before the second pass runs. + quantizer.AddPaletteColors(region); + return quantizer.QuantizeFrame(source, bounds); + } + /// /// Quantizes an image frame and return the resulting output pixels. /// /// The type of frame quantizer. /// The pixel format. - /// The frame quantizer. + /// The pixel specific quantizer. /// The source image frame to quantize. /// The bounds within the frame to quantize. /// @@ -53,10 +80,6 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization { Guard.NotNull(source, nameof(source)); var interest = Rectangle.Intersect(source.Bounds(), bounds); - BufferRegion region = source.PixelBuffer.GetRegion(interest); - - // Collect the palette. Required before the second pass runs. - quantizer.CollectPaletteColors(region); var destination = new IndexedImageFrame( quantizer.Configuration, @@ -78,6 +101,18 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization return destination; } + internal static void BuildPalette( + this IQuantizer quantizer, + IPixelSamplingStrategy pixelSamplingStrategy, + Image image) + where TPixel : unmanaged, IPixel + { + foreach (BufferRegion region in pixelSamplingStrategy.EnumeratePixelRegions(image)) + { + quantizer.AddPaletteColors(region); + } + } + [MethodImpl(InliningOptions.ShortMethod)] private static void SecondPass( ref TFrameQuantizer quantizer, diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs index a83bf3b6d..3f0822bed 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs @@ -112,13 +112,13 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization { get { - FrameQuantizerUtilities.CheckPaletteState(in this.palette); + QuantizerUtilities.CheckPaletteState(in this.palette); return this.palette; } } /// - public void CollectPaletteColors(BufferRegion pixelRegion) + public void AddPaletteColors(BufferRegion pixelRegion) { Rectangle bounds = pixelRegion.Rectangle; Buffer2D source = pixelRegion.Buffer; @@ -150,7 +150,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] public readonly IndexedImageFrame QuantizeFrame(ImageFrame source, Rectangle bounds) - => FrameQuantizerUtilities.QuantizeFrame(ref Unsafe.AsRef(this), source, bounds); + => QuantizerUtilities.QuantizeFrame(ref Unsafe.AsRef(this), source, bounds); /// public readonly byte GetQuantizedColor(TPixel color, out TPixel match) diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs index cbaed758d..bfe950d4f 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs @@ -134,27 +134,35 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif } [Theory] - [WithFile(TestImages.Gif.GlobalQuantizationTest, PixelTypes.Rgba32)] - public void Encode_GlobalPalette_QuantizeMultipleFrames(TestImageProvider provider) + [WithFile(TestImages.Gif.GlobalQuantizationTest, PixelTypes.Rgba32, 427500, 0.1)] + [WithFile(TestImages.Gif.GlobalQuantizationTest, PixelTypes.Rgba32, 200000, 0.1)] + [WithFile(TestImages.Gif.GlobalQuantizationTest, PixelTypes.Rgba32, 100000, 0.1)] + [WithFile(TestImages.Gif.GlobalQuantizationTest, PixelTypes.Rgba32, 50000, 0.1)] + [WithFile(TestImages.Gif.Cheers, PixelTypes.Rgba32, 4000000, 0.01)] + [WithFile(TestImages.Gif.Cheers, PixelTypes.Rgba32, 1000000, 0.01)] + public void Encode_GlobalPalette_DefaultPixelSamplingStrategy(TestImageProvider provider, int maxPixels, double scanRatio) where TPixel : unmanaged, IPixel { using Image image = provider.GetImage(); var encoder = new GifEncoder() { - ColorTableMode = GifColorTableMode.Global + ColorTableMode = GifColorTableMode.Global, + GlobalPixelSamplingStrategy = new DefaultPixelSamplingStrategy(maxPixels, scanRatio) }; string testOutputFile = provider.Utility.SaveTestOutputFile( image, "gif", encoder, - appendPixelTypeToFileName: false, - appendSourceFileOrDescription: false); - - IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(testOutputFile); - using var encoded = Image.Load(testOutputFile, referenceDecoder); - ValidatorComparer.VerifySimilarity(image, encoded); + testOutputDetails: $"{maxPixels}_{scanRatio}", + appendPixelTypeToFileName: false); + + // TODO: For proper regression testing of gifs, use a multi-frame reference output, or find a working reference decoder. + // IImageDecoder referenceDecoder = TestEnvironment.Ge + // ReferenceDecoder(testOutputFile); + // using var encoded = Image.Load(testOutputFile, referenceDecoder); + // ValidatorComparer.VerifySimilarity(image, encoded); } [Fact] diff --git a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs index 3ee7fdb31..40eafc787 100644 --- a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs +++ b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs @@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization { using Image image = CreateTestImage(width, height, noOfFrames); - var strategy = new DefaultPixelSamplingStrategy(maximumNumberOfPixels); + var strategy = new DefaultPixelSamplingStrategy(maximumNumberOfPixels, 0.1); long visitedPixels = 0; foreach (BufferRegion region in strategy.EnumeratePixelRegions(image)) diff --git a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs index 86229a7b6..067604f82 100644 --- a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs +++ b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs @@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp.Tests foreach (ImageFrame frame in image.Frames) { using (IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(this.Configuration)) - using (IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds())) + using (IndexedImageFrame quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds())) { int index = this.GetTransparentIndex(quantized); Assert.Equal(index, quantized.GetPixelRowSpan(0)[0]); @@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.Tests foreach (ImageFrame frame in image.Frames) { using (IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(this.Configuration)) - using (IndexedImageFrame quantized = frameQuantizer.QuantizeFrame(frame, frame.Bounds())) + using (IndexedImageFrame quantized = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds())) { int index = this.GetTransparentIndex(quantized); Assert.Equal(index, quantized.GetPixelRowSpan(0)[0]); diff --git a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs index 75e88ba79..2a9280d6d 100644 --- a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs @@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization ImageFrame frame = image.Frames.RootFrame; using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); - using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + using IndexedImageFrame result = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); Assert.Equal(1, result.Palette.Length); Assert.Equal(1, result.Width); @@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization ImageFrame frame = image.Frames.RootFrame; using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); - using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + using IndexedImageFrame result = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); Assert.Equal(1, result.Palette.Length); Assert.Equal(1, result.Width); @@ -87,7 +87,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization ImageFrame frame = image.Frames.RootFrame; using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); - using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + using IndexedImageFrame result = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); Assert.Equal(256, result.Palette.Length); Assert.Equal(1, result.Width); @@ -127,7 +127,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization ImageFrame frame = image.Frames.RootFrame; using IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config); - using IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds()); + using IndexedImageFrame result = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds()); Assert.Equal(48, result.Palette.Length); } @@ -156,7 +156,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization ImageFrame frame = image.Frames.RootFrame; using (IQuantizer frameQuantizer = quantizer.CreatePixelSpecificQuantizer(config)) - using (IndexedImageFrame result = frameQuantizer.QuantizeFrame(frame, frame.Bounds())) + using (IndexedImageFrame result = frameQuantizer.BuildPaletteAndQuantizeFrame(frame, frame.Bounds())) { Assert.Equal(4 * 8, result.Palette.Length); Assert.Equal(1, result.Width); From 5db749e5c70ba1194e96ff45d4b6853e89453846 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 30 Apr 2020 04:18:38 +0200 Subject: [PATCH 045/130] Revert "use only netcoreapp3.1" This reverts commit 173659669e428f7c18c704c7ea50aeca5e2c93b5. --- src/ImageSharp/ImageSharp.csproj | 3 +-- tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj | 3 +-- .../ImageSharp.Tests.ProfilingSandbox.csproj | 3 +-- tests/ImageSharp.Tests/ImageSharp.Tests.csproj | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/ImageSharp/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj index 185638d19..baf4a2ce1 100644 --- a/src/ImageSharp/ImageSharp.csproj +++ b/src/ImageSharp/ImageSharp.csproj @@ -10,8 +10,7 @@ $(packageversion) 0.0.1 - - netcoreapp3.1 + netcoreapp3.1;netcoreapp2.1;netstandard2.1;netstandard2.0;netstandard1.3;net472 true true diff --git a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj index 101d27956..f380d0a6a 100644 --- a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj +++ b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj @@ -5,8 +5,7 @@ ImageSharp.Benchmarks Exe SixLabors.ImageSharp.Benchmarks - - netcoreapp3.1 + netcoreapp3.1;netcoreapp2.1;net472 false false diff --git a/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj b/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj index f9e6c9da5..7c8031693 100644 --- a/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj +++ b/tests/ImageSharp.Tests.ProfilingSandbox/ImageSharp.Tests.ProfilingSandbox.csproj @@ -8,8 +8,7 @@ false SixLabors.ImageSharp.Tests.ProfilingSandbox win7-x64 - - netcoreapp3.1 + netcoreapp3.1;netcoreapp2.1;net472 SixLabors.ImageSharp.Tests.ProfilingSandbox.Program false diff --git a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj index d5c8ef16e..fdb280ca9 100644 --- a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj +++ b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj @@ -2,8 +2,7 @@ - - netcoreapp3.1 + netcoreapp3.1;netcoreapp2.1;net472 True True SixLabors.ImageSharp.Tests From 200ef9ffbeb44d7ad088834a62c6c092fc6e71a8 Mon Sep 17 00:00:00 2001 From: Brian Popow <38701097+brianpopow@users.noreply.github.com> Date: Thu, 30 Apr 2020 11:22:47 +0200 Subject: [PATCH 046/130] ExcludeAll = ~None Co-Authored-By: James Jackson-South --- src/ImageSharp/Formats/Png/PngChunkFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Formats/Png/PngChunkFilter.cs b/src/ImageSharp/Formats/Png/PngChunkFilter.cs index f859d44da..04f27fb73 100644 --- a/src/ImageSharp/Formats/Png/PngChunkFilter.cs +++ b/src/ImageSharp/Formats/Png/PngChunkFilter.cs @@ -39,6 +39,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// All possible optimizations. /// - ExcludeAll = ExcludePhysicalChunk | ExcludeGammaChunk | ExcludeExifChunk | ExcludeTextChunks + ExcludeAll = ~None } } From f9c2f6ade67a4f6f2a9e9eeb92d3205ec832730e Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Thu, 30 Apr 2020 11:20:29 +0200 Subject: [PATCH 047/130] Improve exclude filter test to also check presence of expected chunks --- .../Formats/Png/IPngEncoderOptions.cs | 2 +- .../Formats/Png/PngEncoderTests.Chunks.cs | 36 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 48fd7447d..e5d0b09cf 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -59,7 +59,7 @@ namespace SixLabors.ImageSharp.Formats.Png PngInterlaceMode? InterlaceMethod { get; } /// - /// Gets the optimize method. + /// Gets chunk filter method. /// PngChunkFilter? ChunkFilter { get; } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs index 9d28fd89b..fa1544816 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs @@ -158,22 +158,41 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png using Image input = testFile.CreateRgba32Image(); using var memStream = new MemoryStream(); var encoder = new PngEncoder() { ChunkFilter = chunkFilter, TextCompressionThreshold = 8 }; + var expectedChunkTypes = new Dictionary() + { + { PngChunkType.Header, false }, + { PngChunkType.Gamma, false }, + { PngChunkType.Palette, false }, + { PngChunkType.InternationalText, false }, + { PngChunkType.Text, false }, + { PngChunkType.CompressedText, false }, + { PngChunkType.Exif, false }, + { PngChunkType.Physical, false }, + { PngChunkType.Data, false }, + { PngChunkType.End, false } + }; var excludedChunkTypes = new List(); switch (chunkFilter) { case PngChunkFilter.ExcludeGammaChunk: excludedChunkTypes.Add(PngChunkType.Gamma); + expectedChunkTypes.Remove(PngChunkType.Gamma); break; case PngChunkFilter.ExcludeExifChunk: excludedChunkTypes.Add(PngChunkType.Exif); + expectedChunkTypes.Remove(PngChunkType.Exif); break; case PngChunkFilter.ExcludePhysicalChunk: excludedChunkTypes.Add(PngChunkType.Physical); + expectedChunkTypes.Remove(PngChunkType.Physical); break; case PngChunkFilter.ExcludeTextChunks: excludedChunkTypes.Add(PngChunkType.Text); excludedChunkTypes.Add(PngChunkType.InternationalText); excludedChunkTypes.Add(PngChunkType.CompressedText); + expectedChunkTypes.Remove(PngChunkType.Text); + expectedChunkTypes.Remove(PngChunkType.InternationalText); + expectedChunkTypes.Remove(PngChunkType.CompressedText); break; case PngChunkFilter.ExcludeAll: excludedChunkTypes.Add(PngChunkType.Gamma); @@ -182,6 +201,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png excludedChunkTypes.Add(PngChunkType.Text); excludedChunkTypes.Add(PngChunkType.InternationalText); excludedChunkTypes.Add(PngChunkType.CompressedText); + expectedChunkTypes.Remove(PngChunkType.Gamma); + expectedChunkTypes.Remove(PngChunkType.Exif); + expectedChunkTypes.Remove(PngChunkType.Physical); + expectedChunkTypes.Remove(PngChunkType.Text); + expectedChunkTypes.Remove(PngChunkType.InternationalText); + expectedChunkTypes.Remove(PngChunkType.CompressedText); break; } @@ -197,9 +222,19 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); var chunkType = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); Assert.False(excludedChunkTypes.Contains(chunkType), $"{chunkType} chunk should have been excluded"); + if (expectedChunkTypes.ContainsKey(chunkType)) + { + expectedChunkTypes[chunkType] = true; + } bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); } + + // all expected chunk types should have been seen at least once. + foreach (PngChunkType chunkType in expectedChunkTypes.Keys) + { + Assert.True(expectedChunkTypes[chunkType], $"We expect {chunkType} chunk to be present at least once"); + } } [Fact] @@ -215,7 +250,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png PngChunkType.Header, PngChunkType.Gamma, PngChunkType.Palette, - PngChunkType.Transparency, PngChunkType.InternationalText, PngChunkType.Text, PngChunkType.CompressedText, From bedd0a91fb2a2c0c61e05ef1af4322c3a54880cd Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Apr 2020 19:40:06 +0100 Subject: [PATCH 048/130] BufferRegion => Buffer2DRegion --- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 2 +- .../Jpeg/Components/Block8x8F.ScaledCopyTo.cs | 2 +- src/ImageSharp/Memory/Buffer2DExtensions.cs | 22 ++++++------ ...ufferRegion{T}.cs => Buffer2DRegion{T}.cs} | 36 +++++++++---------- .../DefaultPixelSamplingStrategy.cs | 4 +-- .../ExtensivePixelSamplingStrategy.cs | 2 +- .../Quantization/IPixelSamplingStrategy.cs | 4 +-- .../Quantization/IQuantizer{TPixel}.cs | 4 +-- .../Quantization/OctreeQuantizer{TPixel}.cs | 2 +- .../Quantization/PaletteQuantizer{TPixel}.cs | 2 +- .../Quantization/QuantizerUtilities.cs | 4 +-- .../Quantization/WuQuantizer{TPixel}.cs | 2 +- .../Resize/ResizeProcessor{TPixel}.cs | 2 +- .../Transforms/Resize/ResizeWorker.cs | 4 +-- .../BlockOperations/Block8x8F_CopyTo2x2.cs | 2 +- .../Jpg/Block8x8FTests.CopyToBufferArea.cs | 4 +-- .../Memory/BufferAreaTests.cs | 14 ++++---- .../PixelSamplingStrategyTests.cs | 6 ++-- 18 files changed, 59 insertions(+), 59 deletions(-) rename src/ImageSharp/Memory/{BufferRegion{T}.cs => Buffer2DRegion{T}.cs} (79%) diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index ba94851f8..2d8bd319d 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -543,7 +543,7 @@ namespace SixLabors.ImageSharp.Formats.Gif return; } - BufferRegion pixelRegion = frame.PixelBuffer.GetRegion(this.restoreArea.Value); + Buffer2DRegion pixelRegion = frame.PixelBuffer.GetRegion(this.restoreArea.Value); pixelRegion.Clear(); this.restoreArea = null; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs index 2fbc81707..82a013f70 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs @@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components /// Copy block data into the destination color buffer pixel area with the provided horizontal and vertical scale factors. /// [MethodImpl(InliningOptions.ShortMethod)] - public void ScaledCopyTo(in BufferRegion region, int horizontalScale, int verticalScale) + public void ScaledCopyTo(in Buffer2DRegion region, int horizontalScale, int verticalScale) { ref float areaOrigin = ref region.GetReferenceToOrigin(); this.ScaledCopyTo(ref areaOrigin, region.Stride, horizontalScale, verticalScale); diff --git a/src/ImageSharp/Memory/Buffer2DExtensions.cs b/src/ImageSharp/Memory/Buffer2DExtensions.cs index d61ac9087..11c61f56c 100644 --- a/src/ImageSharp/Memory/Buffer2DExtensions.cs +++ b/src/ImageSharp/Memory/Buffer2DExtensions.cs @@ -80,29 +80,29 @@ namespace SixLabors.ImageSharp.Memory } /// - /// Return a to the subarea represented by 'rectangle' + /// Return a to the subregion represented by 'rectangle' /// /// The element type /// The - /// The rectangle subarea - /// The - internal static BufferRegion GetRegion(this Buffer2D buffer, in Rectangle rectangle) + /// The rectangle subregion + /// The + internal static Buffer2DRegion GetRegion(this Buffer2D buffer, Rectangle rectangle) where T : unmanaged => - new BufferRegion(buffer, rectangle); + new Buffer2DRegion(buffer, rectangle); - internal static BufferRegion GetRegion(this Buffer2D buffer, int x, int y, int width, int height) + internal static Buffer2DRegion GetRegion(this Buffer2D buffer, int x, int y, int width, int height) where T : unmanaged => - new BufferRegion(buffer, new Rectangle(x, y, width, height)); + new Buffer2DRegion(buffer, new Rectangle(x, y, width, height)); /// - /// Return a to the whole area of 'buffer' + /// Return a to the whole area of 'buffer' /// /// The element type /// The - /// The - internal static BufferRegion GetRegion(this Buffer2D buffer) + /// The + internal static Buffer2DRegion GetRegion(this Buffer2D buffer) where T : unmanaged => - new BufferRegion(buffer); + new Buffer2DRegion(buffer); /// /// Returns the size of the buffer. diff --git a/src/ImageSharp/Memory/BufferRegion{T}.cs b/src/ImageSharp/Memory/Buffer2DRegion{T}.cs similarity index 79% rename from src/ImageSharp/Memory/BufferRegion{T}.cs rename to src/ImageSharp/Memory/Buffer2DRegion{T}.cs index 901c3217b..b22307a1d 100644 --- a/src/ImageSharp/Memory/BufferRegion{T}.cs +++ b/src/ImageSharp/Memory/Buffer2DRegion{T}.cs @@ -9,16 +9,16 @@ namespace SixLabors.ImageSharp.Memory /// Represents a rectangular region inside a 2D memory buffer (). /// /// The element type. - public readonly struct BufferRegion + public readonly struct Buffer2DRegion where T : unmanaged { /// - /// Initializes a new instance of the struct. + /// Initializes a new instance of the struct. /// /// The . /// The defining a rectangular area within the buffer. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferRegion(Buffer2D buffer, Rectangle rectangle) + public Buffer2DRegion(Buffer2D buffer, Rectangle rectangle) { DebugGuard.MustBeGreaterThanOrEqualTo(rectangle.X, 0, nameof(rectangle)); DebugGuard.MustBeGreaterThanOrEqualTo(rectangle.Y, 0, nameof(rectangle)); @@ -30,11 +30,11 @@ namespace SixLabors.ImageSharp.Memory } /// - /// Initializes a new instance of the struct. + /// Initializes a new instance of the struct. /// /// The . [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferRegion(Buffer2D buffer) + public Buffer2DRegion(Buffer2D buffer) : this(buffer, buffer.FullRectangle()) { } @@ -98,27 +98,27 @@ namespace SixLabors.ImageSharp.Memory } /// - /// Returns a sub-area as . (Similar to .) + /// Returns a subregion as . (Similar to .) /// - /// The x index at the subarea origin. - /// The y index at the subarea origin. - /// The desired width of the subarea. - /// The desired height of the subarea. - /// The subarea + /// The x index at the subregion origin. + /// The y index at the subregion origin. + /// The desired width of the subregion. + /// The desired height of the subregion. + /// The subregion [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferRegion GetSubArea(int x, int y, int width, int height) + public Buffer2DRegion GetSubRegion(int x, int y, int width, int height) { var rectangle = new Rectangle(x, y, width, height); - return this.GetSubArea(rectangle); + return this.GetSubRegion(rectangle); } /// - /// Returns a sub-area as . (Similar to .) + /// Returns a subregion as . (Similar to .) /// - /// The specifying the boundaries of the subarea - /// The subarea + /// The specifying the boundaries of the subregion + /// The subregion [MethodImpl(MethodImplOptions.AggressiveInlining)] - public BufferRegion GetSubArea(Rectangle rectangle) + public Buffer2DRegion GetSubRegion(Rectangle rectangle) { DebugGuard.MustBeLessThanOrEqualTo(rectangle.Width, this.Rectangle.Width, nameof(rectangle)); DebugGuard.MustBeLessThanOrEqualTo(rectangle.Height, this.Rectangle.Height, nameof(rectangle)); @@ -126,7 +126,7 @@ namespace SixLabors.ImageSharp.Memory int x = this.Rectangle.X + rectangle.X; int y = this.Rectangle.Y + rectangle.Y; rectangle = new Rectangle(x, y, rectangle.Width, rectangle.Height); - return new BufferRegion(this.Buffer, rectangle); + return new Buffer2DRegion(this.Buffer, rectangle); } /// diff --git a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs index 660d41bd5..d2bf06bcd 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs @@ -50,7 +50,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public double MinimumScanRatio { get; } /// - public IEnumerable> EnumeratePixelRegions(Image image) + public IEnumerable> EnumeratePixelRegions(Image image) where TPixel : unmanaged, IPixel { long maximumPixels = Math.Min(this.MaximumPixels, (long)image.Width * image.Height * image.Frames.Count); @@ -95,7 +95,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization } } - BufferRegion GetRow(int pos) + Buffer2DRegion GetRow(int pos) { int frameIdx = pos / image.Height; int y = pos % image.Height; diff --git a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs index e2774850a..8ef05640a 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs @@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public class ExtensivePixelSamplingStrategy : IPixelSamplingStrategy { /// - public IEnumerable> EnumeratePixelRegions(Image image) + public IEnumerable> EnumeratePixelRegions(Image image) where TPixel : unmanaged, IPixel { foreach (ImageFrame frame in image.Frames) diff --git a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs index 71b20174d..6c2e3bd88 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs @@ -13,12 +13,12 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization public interface IPixelSamplingStrategy { /// - /// Enumerates pixel regions within the image as . + /// Enumerates pixel regions within the image as . /// /// The image. /// The pixel type. /// An enumeration of pixel regions. - IEnumerable> EnumeratePixelRegions(Image image) + IEnumerable> EnumeratePixelRegions(Image image) where TPixel : unmanaged, IPixel; } } diff --git a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs index 0c3c6a83a..26c906f06 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs @@ -35,8 +35,8 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// /// Adds colors to the quantized palette from the given pixel source. /// - /// The of source pixels to register. - void AddPaletteColors(BufferRegion pixelRegion); + /// The of source pixels to register. + void AddPaletteColors(Buffer2DRegion pixelRegion); /// /// Quantizes an image frame and return the resulting output pixels. diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs index c74e8ef86..7fefda3f1 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs @@ -69,7 +69,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] - public void AddPaletteColors(BufferRegion pixelRegion) + public void AddPaletteColors(Buffer2DRegion pixelRegion) { Rectangle bounds = pixelRegion.Rectangle; Buffer2D source = pixelRegion.Buffer; diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs index 44daef84d..82ff572fa 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs @@ -54,7 +54,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization /// [MethodImpl(InliningOptions.ShortMethod)] - public void AddPaletteColors(BufferRegion pixelRegion) + public void AddPaletteColors(Buffer2DRegion pixelRegion) { } diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs index a3f13e00d..1fe69ea30 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs @@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization Guard.NotNull(source, nameof(source)); var interest = Rectangle.Intersect(source.Bounds(), bounds); - BufferRegion region = source.PixelBuffer.GetRegion(interest); + Buffer2DRegion region = source.PixelBuffer.GetRegion(interest); // Collect the palette. Required before the second pass runs. quantizer.AddPaletteColors(region); @@ -107,7 +107,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization Image image) where TPixel : unmanaged, IPixel { - foreach (BufferRegion region in pixelSamplingStrategy.EnumeratePixelRegions(image)) + foreach (Buffer2DRegion region in pixelSamplingStrategy.EnumeratePixelRegions(image)) { quantizer.AddPaletteColors(region); } diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs index 3f0822bed..5e086feaa 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs @@ -118,7 +118,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization } /// - public void AddPaletteColors(BufferRegion pixelRegion) + public void AddPaletteColors(Buffer2DRegion pixelRegion) { Rectangle bounds = pixelRegion.Rectangle; Buffer2D source = pixelRegion.Buffer; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs index 630c88bac..09d95c8ac 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs @@ -172,7 +172,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms PixelConversionModifiers conversionModifiers = PixelConversionModifiers.Premultiply.ApplyCompanding(compand); - BufferRegion sourceRegion = source.PixelBuffer.GetRegion(sourceRectangle); + Buffer2DRegion sourceRegion = source.PixelBuffer.GetRegion(sourceRectangle); // To reintroduce parallel processing, we would launch multiple workers // for different row intervals of the image. diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs index 6cdb7934c..96e516e39 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs @@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms private readonly ResizeKernelMap horizontalKernelMap; - private readonly BufferRegion source; + private readonly Buffer2DRegion source; private readonly Rectangle sourceRectangle; @@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms public ResizeWorker( Configuration configuration, - BufferRegion source, + Buffer2DRegion source, PixelConversionModifiers conversionModifiers, ResizeKernelMap horizontalKernelMap, ResizeKernelMap verticalKernelMap, diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs index 0237c8170..20f3e0d56 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs @@ -18,7 +18,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations private Buffer2D buffer; - private BufferRegion destRegion; + private Buffer2DRegion destRegion; [GlobalSetup] public void Setup() diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs index 169b9c0fc..169d3dd2d 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs @@ -43,7 +43,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(20, 20, AllocationOptions.Clean)) { - BufferRegion region = buffer.GetRegion(5, 10, 8, 8); + Buffer2DRegion region = buffer.GetRegion(5, 10, 8, 8); block.Copy1x1Scale(ref region.GetReferenceToOrigin(), region.Stride); Assert.Equal(block[0, 0], buffer[5, 10]); @@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(100, 100, AllocationOptions.Clean)) { - BufferRegion region = buffer.GetRegion(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); + Buffer2DRegion region = buffer.GetRegion(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); block.ScaledCopyTo(region, horizontalFactor, verticalFactor); for (int y = 0; y < 8 * verticalFactor; y++) diff --git a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs index 81173b456..59f3f5aa0 100644 --- a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs +++ b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs @@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Tests.Memory { using Buffer2D buffer = this.memoryAllocator.Allocate2D(10, 20); var rectangle = new Rectangle(3, 2, 5, 6); - var area = new BufferRegion(buffer, rectangle); + var area = new Buffer2DRegion(buffer, rectangle); Assert.Equal(buffer, area.Buffer); Assert.Equal(rectangle, area.Rectangle); @@ -47,7 +47,7 @@ namespace SixLabors.ImageSharp.Tests.Memory using Buffer2D buffer = this.CreateTestBuffer(20, 30); var r = new Rectangle(rx, ry, 5, 6); - BufferRegion region = buffer.GetRegion(r); + Buffer2DRegion region = buffer.GetRegion(r); int value = region[x, y]; int expected = ((ry + y) * 100) + rx + x; @@ -66,7 +66,7 @@ namespace SixLabors.ImageSharp.Tests.Memory using Buffer2D buffer = this.CreateTestBuffer(20, 30); var r = new Rectangle(rx, ry, w, h); - BufferRegion region = buffer.GetRegion(r); + Buffer2DRegion region = buffer.GetRegion(r); Span span = region.GetRowSpan(y); @@ -85,9 +85,9 @@ namespace SixLabors.ImageSharp.Tests.Memory public void GetSubArea() { using Buffer2D buffer = this.CreateTestBuffer(20, 30); - BufferRegion area0 = buffer.GetRegion(6, 8, 10, 10); + Buffer2DRegion area0 = buffer.GetRegion(6, 8, 10, 10); - BufferRegion area1 = area0.GetSubArea(4, 4, 5, 5); + Buffer2DRegion area1 = area0.GetSubRegion(4, 4, 5, 5); var expectedRect = new Rectangle(10, 12, 5, 5); @@ -106,7 +106,7 @@ namespace SixLabors.ImageSharp.Tests.Memory this.memoryAllocator.BufferCapacityInBytes = sizeof(int) * bufferCapacity; using Buffer2D buffer = this.CreateTestBuffer(20, 30); - BufferRegion area0 = buffer.GetRegion(6, 8, 10, 10); + Buffer2DRegion area0 = buffer.GetRegion(6, 8, 10, 10); ref int r = ref area0.GetReferenceToOrigin(); @@ -140,7 +140,7 @@ namespace SixLabors.ImageSharp.Tests.Memory this.memoryAllocator.BufferCapacityInBytes = sizeof(int) * bufferCapacity; using Buffer2D buffer = this.CreateTestBuffer(20, 30); - BufferRegion region = buffer.GetRegion(5, 5, 10, 10); + Buffer2DRegion region = buffer.GetRegion(5, 5, 10, 10); region.Clear(); Assert.NotEqual(0, buffer[4, 4]); diff --git a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs index 40eafc787..2b81e721f 100644 --- a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs +++ b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs @@ -32,7 +32,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization using Image image = CreateTestImage(100, 100, 100); var strategy = new ExtensivePixelSamplingStrategy(); - foreach (BufferRegion region in strategy.EnumeratePixelRegions(image)) + foreach (Buffer2DRegion region in strategy.EnumeratePixelRegions(image)) { PaintWhite(region); } @@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization var strategy = new DefaultPixelSamplingStrategy(maximumNumberOfPixels, 0.1); long visitedPixels = 0; - foreach (BufferRegion region in strategy.EnumeratePixelRegions(image)) + foreach (Buffer2DRegion region in strategy.EnumeratePixelRegions(image)) { PaintWhite(region); visitedPixels += region.Width * region.Height; @@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Quantization Assert.True(visitRatio <= 1.1, $"{visitedPixels}>{maximumPixels}"); } - private static void PaintWhite(BufferRegion region) + private static void PaintWhite(Buffer2DRegion region) { var white = new L8(255); for (int y = 0; y < region.Height; y++) From 4e3dce1e95a57cd2a0636bbbd2784717ad994556 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Apr 2020 22:05:44 +0100 Subject: [PATCH 049/130] Update source license info. --- .gitattributes | 1 + Directory.Build.props | 2 +- shared-infrastructure | 2 +- src/ImageSharp/Advanced/AdvancedImageExtensions.cs | 2 +- src/ImageSharp/Advanced/AotCompilerTools.cs | 2 +- src/ImageSharp/Advanced/IConfigurationProvider.cs | 2 +- src/ImageSharp/Advanced/IImageVisitor.cs | 2 +- src/ImageSharp/Advanced/IPixelSource.cs | 2 +- src/ImageSharp/Advanced/IRowIntervalOperation.cs | 2 +- src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs | 2 +- src/ImageSharp/Advanced/IRowOperation.cs | 2 +- src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs | 2 +- src/ImageSharp/Advanced/ParallelExecutionSettings.cs | 2 +- src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs | 2 +- src/ImageSharp/Advanced/ParallelRowIterator.cs | 2 +- src/ImageSharp/Color/Color.Conversions.cs | 2 +- src/ImageSharp/Color/Color.NamedColors.cs | 2 +- src/ImageSharp/Color/Color.WebSafePalette.cs | 2 +- src/ImageSharp/Color/Color.WernerPalette.cs | 2 +- src/ImageSharp/Color/Color.cs | 2 +- src/ImageSharp/ColorSpaces/CieLab.cs | 2 +- src/ImageSharp/ColorSpaces/CieLch.cs | 2 +- src/ImageSharp/ColorSpaces/CieLchuv.cs | 2 +- src/ImageSharp/ColorSpaces/CieLuv.cs | 2 +- src/ImageSharp/ColorSpaces/CieXyy.cs | 2 +- src/ImageSharp/ColorSpaces/CieXyz.cs | 2 +- src/ImageSharp/ColorSpaces/Cmyk.cs | 2 +- src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs | 2 +- src/ImageSharp/ColorSpaces/Companding/LCompanding.cs | 2 +- src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs | 2 +- src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs | 2 +- src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs | 2 +- src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs | 2 +- src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs | 2 +- .../ColorSpaces/Conversion/ColorSpaceConverterOptions.cs | 2 +- .../Conversion/Implementation/CieXyChromaticityCoordinates.cs | 2 +- .../Implementation/Converters/CIeLchToCieLabConverter.cs | 2 +- .../Implementation/Converters/CieLabToCieLchConverter.cs | 2 +- .../Implementation/Converters/CieLabToCieXyzConverter.cs | 2 +- .../Implementation/Converters/CieLchuvToCieLuvConverter.cs | 2 +- .../Implementation/Converters/CieLuvToCieLchuvConverter.cs | 2 +- .../Implementation/Converters/CieLuvToCieXyzConverter.cs | 2 +- .../Implementation/Converters/CieXyzAndCieXyyConverter.cs | 2 +- .../Converters/CieXyzAndHunterLabConverterBase.cs | 2 +- .../Implementation/Converters/CieXyzAndLmsConverter.cs | 2 +- .../Implementation/Converters/CieXyzToCieLabConverter.cs | 2 +- .../Implementation/Converters/CieXyzToCieLuvConverter.cs | 2 +- .../Implementation/Converters/CieXyzToHunterLabConverter.cs | 2 +- .../Implementation/Converters/CieXyzToLinearRgbConverter.cs | 2 +- .../Implementation/Converters/CmykAndRgbConverter.cs | 2 +- .../Implementation/Converters/HslAndRgbConverter.cs | 2 +- .../Implementation/Converters/HsvAndRgbConverter.cs | 2 +- .../Implementation/Converters/HunterLabToCieXyzConverter.cs | 2 +- .../Converters/LinearRgbAndCieXyzConverterBase.cs | 2 +- .../Implementation/Converters/LinearRgbToCieXyzConverter.cs | 2 +- .../Implementation/Converters/LinearRgbToRgbConverter.cs | 2 +- .../Implementation/Converters/RgbToLinearRgbConverter.cs | 2 +- .../Implementation/Converters/YCbCrAndRgbConverter.cs | 2 +- .../Conversion/Implementation/IChromaticAdaptation.cs | 2 +- .../Conversion/Implementation/LmsAdaptationMatrix.cs | 2 +- .../Implementation/RGBPrimariesChromaticityCoordinates.cs | 2 +- .../Conversion/Implementation/VonKriesChromaticAdaptation.cs | 2 +- .../Implementation/WorkingSpaces/GammaWorkingSpace.cs | 2 +- .../Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs | 2 +- .../Implementation/WorkingSpaces/Rec2020WorkingSpace.cs | 2 +- .../Implementation/WorkingSpaces/Rec709WorkingSpace.cs | 2 +- .../Implementation/WorkingSpaces/RgbWorkingSpace.cs | 2 +- .../Implementation/WorkingSpaces/SRgbWorkingSpace.cs | 2 +- src/ImageSharp/ColorSpaces/Hsl.cs | 2 +- src/ImageSharp/ColorSpaces/Hsv.cs | 2 +- src/ImageSharp/ColorSpaces/HunterLab.cs | 2 +- src/ImageSharp/ColorSpaces/Illuminants.cs | 2 +- src/ImageSharp/ColorSpaces/LinearRgb.cs | 2 +- src/ImageSharp/ColorSpaces/Lms.cs | 2 +- src/ImageSharp/ColorSpaces/Rgb.cs | 2 +- src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs | 2 +- src/ImageSharp/ColorSpaces/YCbCr.cs | 2 +- src/ImageSharp/Common/Constants.cs | 2 +- src/ImageSharp/Common/Exceptions/ImageFormatException.cs | 2 +- src/ImageSharp/Common/Exceptions/ImageProcessingException.cs | 2 +- .../Common/Exceptions/InvalidImageContentException.cs | 2 +- .../Common/Exceptions/UnknownImageFormatException.cs | 2 +- src/ImageSharp/Common/Extensions/ComparableExtensions.cs | 2 +- src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs | 2 +- src/ImageSharp/Common/Extensions/EncoderExtensions.cs | 2 +- src/ImageSharp/Common/Extensions/EnumerableExtensions.cs | 2 +- src/ImageSharp/Common/Extensions/StreamExtensions.cs | 2 +- src/ImageSharp/Common/Helpers/Buffer2DUtils.cs | 2 +- src/ImageSharp/Common/Helpers/DebugGuard.cs | 2 +- src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs | 2 +- src/ImageSharp/Common/Helpers/EnumUtils.cs | 2 +- src/ImageSharp/Common/Helpers/Guard.cs | 2 +- src/ImageSharp/Common/Helpers/ImageMaths.cs | 2 +- src/ImageSharp/Common/Helpers/InliningOptions.cs | 2 +- src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs | 2 +- src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs | 2 +- src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs | 2 +- .../Common/Helpers/SimdUtils.FallbackIntrinsics128.cs | 2 +- src/ImageSharp/Common/Helpers/SimdUtils.cs | 2 +- src/ImageSharp/Common/Helpers/TestHelpers.cs | 2 +- src/ImageSharp/Common/Helpers/TolerantMath.cs | 2 +- src/ImageSharp/Common/Helpers/UnitConverter.cs | 2 +- src/ImageSharp/Common/Helpers/Vector4Utilities.cs | 2 +- src/ImageSharp/Common/Tuples/Octet{T}.cs | 2 +- src/ImageSharp/Common/Tuples/Vector4Pair.cs | 2 +- src/ImageSharp/Configuration.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpCompression.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpConstants.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpDecoder.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpEncoder.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpFileHeader.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpFormat.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpMetadata.cs | 2 +- src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs | 2 +- src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs | 2 +- src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Bmp/ImageExtensions.cs | 2 +- src/ImageSharp/Formats/Bmp/MetadataExtensions.cs | 2 +- src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs | 2 +- src/ImageSharp/Formats/Gif/GifColorTableMode.cs | 2 +- src/ImageSharp/Formats/Gif/GifConfigurationModule.cs | 2 +- src/ImageSharp/Formats/Gif/GifConstants.cs | 2 +- src/ImageSharp/Formats/Gif/GifDecoder.cs | 2 +- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 2 +- src/ImageSharp/Formats/Gif/GifDisposalMethod.cs | 2 +- src/ImageSharp/Formats/Gif/GifEncoder.cs | 2 +- src/ImageSharp/Formats/Gif/GifEncoderCore.cs | 2 +- src/ImageSharp/Formats/Gif/GifFormat.cs | 2 +- src/ImageSharp/Formats/Gif/GifFrameMetadata.cs | 2 +- src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs | 2 +- src/ImageSharp/Formats/Gif/GifMetadata.cs | 2 +- src/ImageSharp/Formats/Gif/GifThrowHelper.cs | 2 +- src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs | 2 +- src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Gif/ImageExtensions.cs | 2 +- src/ImageSharp/Formats/Gif/LzwDecoder.cs | 2 +- src/ImageSharp/Formats/Gif/LzwEncoder.cs | 2 +- src/ImageSharp/Formats/Gif/MetadataExtensions.cs | 2 +- .../Formats/Gif/Sections/GifGraphicControlExtension.cs | 2 +- src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs | 2 +- .../Formats/Gif/Sections/GifLogicalScreenDescriptor.cs | 2 +- .../Gif/Sections/GifNetscapeLoopingApplicationExtension.cs | 2 +- src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs | 2 +- src/ImageSharp/Formats/IImageDecoder.cs | 2 +- src/ImageSharp/Formats/IImageEncoder.cs | 2 +- src/ImageSharp/Formats/IImageFormat.cs | 2 +- src/ImageSharp/Formats/IImageFormatDetector.cs | 2 +- src/ImageSharp/Formats/IImageInfoDetector.cs | 2 +- src/ImageSharp/Formats/ImageFormatManager.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt | 4 ++-- .../Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs | 2 +- .../Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs | 2 +- .../ColorConverters/JpegColorConverter.FromGrayScale.cs | 2 +- .../Decoder/ColorConverters/JpegColorConverter.FromRgb.cs | 2 +- .../ColorConverters/JpegColorConverter.FromYCbCrBasic.cs | 2 +- .../ColorConverters/JpegColorConverter.FromYCbCrSimd.cs | 2 +- .../ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs | 2 +- .../Decoder/ColorConverters/JpegColorConverter.FromYccK.cs | 2 +- .../Components/Decoder/ColorConverters/JpegColorConverter.cs | 2 +- .../Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs | 2 +- .../Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs | 2 +- .../Formats/Jpeg/Components/Decoder/HuffmanTable.cs | 2 +- .../Formats/Jpeg/Components/Decoder/IJpegComponent.cs | 2 +- .../Formats/Jpeg/Components/Decoder/IRawJpegData.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs | 2 +- .../Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs | 2 +- .../Formats/Jpeg/Components/Decoder/JpegColorSpace.cs | 2 +- .../Formats/Jpeg/Components/Decoder/JpegComponent.cs | 2 +- .../Jpeg/Components/Decoder/JpegComponentPostProcessor.cs | 2 +- .../Formats/Jpeg/Components/Decoder/JpegFileMarker.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs | 2 +- .../Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs | 2 +- .../Formats/Jpeg/Components/Decoder/ProfileResolver.cs | 2 +- .../Formats/Jpeg/Components/Decoder/QualityEvaluator.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs | 2 +- .../Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs | 2 +- .../Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs | 2 +- .../Formats/Jpeg/Components/FastFloatingPointDCT.cs | 2 +- .../Formats/Jpeg/Components/GenericBlock8x8.Generated.cs | 2 +- .../Formats/Jpeg/Components/GenericBlock8x8.Generated.tt | 4 ++-- src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs | 2 +- src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs | 2 +- src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs | 2 +- src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Jpeg/ImageExtensions.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegConstants.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegDecoder.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegEncoder.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegFormat.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegMetadata.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegSubsample.cs | 2 +- src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs | 2 +- src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs | 2 +- src/ImageSharp/Formats/PixelTypeInfo.cs | 2 +- src/ImageSharp/Formats/Png/Adam7.cs | 2 +- src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs | 2 +- src/ImageSharp/Formats/Png/Filters/AverageFilter.cs | 2 +- src/ImageSharp/Formats/Png/Filters/FilterType.cs | 2 +- src/ImageSharp/Formats/Png/Filters/NoneFilter.cs | 2 +- src/ImageSharp/Formats/Png/Filters/PaethFilter.cs | 2 +- src/ImageSharp/Formats/Png/Filters/SubFilter.cs | 2 +- src/ImageSharp/Formats/Png/Filters/UpFilter.cs | 2 +- src/ImageSharp/Formats/Png/IPngDecoderOptions.cs | 2 +- src/ImageSharp/Formats/Png/IPngEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Png/ImageExtensions.cs | 2 +- src/ImageSharp/Formats/Png/MetadataExtensions.cs | 2 +- src/ImageSharp/Formats/Png/PngBitDepth.cs | 2 +- src/ImageSharp/Formats/Png/PngChunk.cs | 2 +- src/ImageSharp/Formats/Png/PngChunkType.cs | 2 +- src/ImageSharp/Formats/Png/PngColorType.cs | 2 +- src/ImageSharp/Formats/Png/PngCompressionLevel.cs | 2 +- src/ImageSharp/Formats/Png/PngConfigurationModule.cs | 2 +- src/ImageSharp/Formats/Png/PngConstants.cs | 2 +- src/ImageSharp/Formats/Png/PngDecoder.cs | 2 +- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderHelpers.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs | 2 +- src/ImageSharp/Formats/Png/PngFilterMethod.cs | 2 +- src/ImageSharp/Formats/Png/PngFormat.cs | 2 +- src/ImageSharp/Formats/Png/PngHeader.cs | 2 +- src/ImageSharp/Formats/Png/PngImageFormatDetector.cs | 2 +- src/ImageSharp/Formats/Png/PngInterlaceMode.cs | 2 +- src/ImageSharp/Formats/Png/PngMetadata.cs | 2 +- src/ImageSharp/Formats/Png/PngScanlineProcessor.cs | 2 +- src/ImageSharp/Formats/Png/PngTextData.cs | 2 +- src/ImageSharp/Formats/Png/PngThrowHelper.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/Crc32.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/Deflater.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/IChecksum.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs | 2 +- src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs | 2 +- src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Tga/ImageExtensions.cs | 2 +- src/ImageSharp/Formats/Tga/MetadataExtensions.cs | 2 +- src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs | 2 +- src/ImageSharp/Formats/Tga/TgaCompression.cs | 2 +- src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs | 2 +- src/ImageSharp/Formats/Tga/TgaConstants.cs | 2 +- src/ImageSharp/Formats/Tga/TgaDecoder.cs | 2 +- src/ImageSharp/Formats/Tga/TgaDecoderCore.cs | 2 +- src/ImageSharp/Formats/Tga/TgaEncoder.cs | 2 +- src/ImageSharp/Formats/Tga/TgaEncoderCore.cs | 2 +- src/ImageSharp/Formats/Tga/TgaFileHeader.cs | 2 +- src/ImageSharp/Formats/Tga/TgaFormat.cs | 2 +- src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs | 2 +- src/ImageSharp/Formats/Tga/TgaImageOrigin.cs | 2 +- src/ImageSharp/Formats/Tga/TgaImageType.cs | 2 +- src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs | 2 +- src/ImageSharp/Formats/Tga/TgaMetadata.cs | 2 +- src/ImageSharp/Formats/Tga/TgaThrowHelper.cs | 2 +- src/ImageSharp/GeometryUtilities.cs | 2 +- src/ImageSharp/GraphicOptionsDefaultsExtensions.cs | 2 +- src/ImageSharp/GraphicsOptions.cs | 2 +- src/ImageSharp/IConfigurationModule.cs | 2 +- src/ImageSharp/IDeepCloneable.cs | 2 +- src/ImageSharp/IImage.cs | 2 +- src/ImageSharp/IImageInfo.cs | 2 +- src/ImageSharp/IO/DoubleBufferedStreamReader.cs | 2 +- src/ImageSharp/IO/IFileSystem.cs | 2 +- src/ImageSharp/IO/LocalFileSystem.cs | 2 +- src/ImageSharp/Image.Decode.cs | 2 +- src/ImageSharp/Image.FromBytes.cs | 2 +- src/ImageSharp/Image.FromFile.cs | 2 +- src/ImageSharp/Image.FromStream.cs | 2 +- src/ImageSharp/Image.LoadPixelData.cs | 2 +- src/ImageSharp/Image.WrapMemory.cs | 2 +- src/ImageSharp/Image.cs | 2 +- src/ImageSharp/ImageExtensions.Internal.cs | 2 +- src/ImageSharp/ImageExtensions.cs | 2 +- src/ImageSharp/ImageFrame.LoadPixelData.cs | 2 +- src/ImageSharp/ImageFrame.cs | 2 +- src/ImageSharp/ImageFrameCollection.cs | 2 +- src/ImageSharp/ImageFrameCollection{TPixel}.cs | 2 +- src/ImageSharp/ImageFrame{TPixel}.cs | 2 +- src/ImageSharp/ImageInfo.cs | 2 +- src/ImageSharp/ImageInfoExtensions.cs | 2 +- src/ImageSharp/Image{TPixel}.cs | 2 +- src/ImageSharp/IndexedImageFrame{TPixel}.cs | 2 +- src/ImageSharp/Memory/Allocators/AllocationOptions.cs | 2 +- .../Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs | 2 +- .../ArrayPoolMemoryAllocator.CommonFactoryMethods.cs | 2 +- src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs | 2 +- src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs | 2 +- .../Memory/Allocators/Internals/BasicArrayBuffer.cs | 2 +- src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs | 2 +- .../Memory/Allocators/Internals/ManagedBufferBase.cs | 2 +- src/ImageSharp/Memory/Allocators/MemoryAllocator.cs | 2 +- src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs | 2 +- src/ImageSharp/Memory/Buffer2DExtensions.cs | 2 +- src/ImageSharp/Memory/Buffer2DRegion{T}.cs | 2 +- src/ImageSharp/Memory/Buffer2D{T}.cs | 2 +- src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs | 2 +- src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs | 2 +- src/ImageSharp/Memory/InvalidMemoryOperationException.cs | 2 +- src/ImageSharp/Memory/MemoryAllocatorExtensions.cs | 2 +- src/ImageSharp/Memory/MemoryOwnerExtensions.cs | 2 +- src/ImageSharp/Memory/RowInterval.cs | 2 +- src/ImageSharp/Memory/TransformItemsDelegate{T}.cs | 2 +- src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs | 2 +- src/ImageSharp/Metadata/FrameDecodingMode.cs | 2 +- src/ImageSharp/Metadata/ImageFrameMetadata.cs | 2 +- src/ImageSharp/Metadata/ImageMetadata.cs | 2 +- src/ImageSharp/Metadata/PixelResolutionUnit.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs | 2 +- .../Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs | 2 +- .../Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs | 2 +- .../Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs | 2 +- .../Profiles/Exif/Values/ExifArrayValue{TValueType}.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifDoubleArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifFloatArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifNumberArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifRationalArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifShortArray.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedByte.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedLong.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedRational.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedShort.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs | 2 +- src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs | 2 +- .../Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs | 2 +- .../Metadata/Profiles/ICC/Curves/IccCurveSegment.cs | 2 +- .../Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs | 2 +- .../Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs | 2 +- .../Metadata/Profiles/ICC/Curves/IccParametricCurve.cs | 2 +- .../Metadata/Profiles/ICC/Curves/IccResponseCurve.cs | 2 +- .../Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs | 2 +- .../Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs | 2 +- .../Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs | 2 +- .../Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs | 2 +- .../ICC/DataReader/IccDataReader.MultiProcessElement.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReader.Primitives.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs | 2 +- .../Metadata/Profiles/ICC/DataReader/IccDataReader.cs | 2 +- .../Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs | 2 +- .../Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs | 2 +- .../Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs | 2 +- .../ICC/DataWriter/IccDataWriter.MultiProcessElement.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs | 2 +- .../Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs | 2 +- .../Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs | 2 +- .../Profiles/ICC/Enums/IccMultiProcessElementSignature.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccSignatureName.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccStandardObserver.cs | 2 +- .../Metadata/Profiles/ICC/Enums/IccTypeSignature.cs | 2 +- .../Profiles/ICC/Exceptions/InvalidIccProfileException.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs | 2 +- .../ICC/MultiProcessElements/IccBAcsProcessElement.cs | 2 +- .../ICC/MultiProcessElements/IccClutProcessElement.cs | 2 +- .../ICC/MultiProcessElements/IccCurveSetProcessElement.cs | 2 +- .../ICC/MultiProcessElements/IccEAcsProcessElement.cs | 2 +- .../ICC/MultiProcessElements/IccMatrixProcessElement.cs | 2 +- .../ICC/MultiProcessElements/IccMultiProcessElement.cs | 2 +- .../ICC/TagDataEntries/IccChromaticityTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccColorantTableTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs | 2 +- .../TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs | 2 +- .../IccProfileSequenceIdentifierTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs | 2 +- .../ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs | 2 +- .../Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccLocalizedString.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccPositionNumber.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccProfileDescription.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs | 2 +- .../Profiles/ICC/Various/IccProfileSequenceIdentifier.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccResponseNumber.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccScreeningChannel.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccTagTableEntry.cs | 2 +- src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs | 2 +- src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs | 2 +- src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs | 2 +- src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs | 2 +- src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs | 2 +- src/ImageSharp/PixelFormats/HalfTypeHelper.cs | 2 +- src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs | 2 +- src/ImageSharp/PixelFormats/IPixel.cs | 2 +- src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs | 2 +- .../PixelBlenders/DefaultPixelBlenders.Generated.cs | 2 +- .../PixelBlenders/DefaultPixelBlenders.Generated.tt | 4 ++-- .../PixelBlenders/PorterDuffFunctions.Generated.cs | 2 +- .../PixelBlenders/PorterDuffFunctions.Generated.tt | 4 ++-- .../PixelFormats/PixelBlenders/PorterDuffFunctions.cs | 2 +- src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs | 2 +- src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs | 2 +- src/ImageSharp/PixelFormats/PixelConversionModifiers.cs | 2 +- .../PixelFormats/PixelConversionModifiersExtensions.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/A8.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs | 2 +- .../Generated/Argb32.PixelOperations.Generated.cs | 2 +- .../Generated/Bgr24.PixelOperations.Generated.cs | 2 +- .../Generated/Bgra32.PixelOperations.Generated.cs | 2 +- .../Generated/Bgra5551.PixelOperations.Generated.cs | 2 +- .../Generated/L16.PixelOperations.Generated.cs | 2 +- .../Generated/L8.PixelOperations.Generated.cs | 2 +- .../Generated/La16.PixelOperations.Generated.cs | 2 +- .../Generated/La32.PixelOperations.Generated.cs | 2 +- .../Generated/Rgb24.PixelOperations.Generated.cs | 2 +- .../Generated/Rgb48.PixelOperations.Generated.cs | 2 +- .../Generated/Rgba32.PixelOperations.Generated.cs | 2 +- .../Generated/Rgba64.PixelOperations.Generated.cs | 2 +- .../PixelImplementations/Generated/_Common.ttinclude | 2 +- .../PixelFormats/PixelImplementations/HalfSingle.cs | 2 +- .../PixelFormats/PixelImplementations/HalfVector2.cs | 2 +- .../PixelFormats/PixelImplementations/HalfVector4.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/L16.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/L8.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/La16.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/La32.cs | 2 +- .../PixelFormats/PixelImplementations/NormalizedByte2.cs | 2 +- .../PixelFormats/PixelImplementations/NormalizedByte4.cs | 2 +- .../PixelFormats/PixelImplementations/NormalizedShort2.cs | 2 +- .../PixelFormats/PixelImplementations/NormalizedShort4.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs | 2 +- .../PixelFormats/PixelImplementations/Rgba1010102.cs | 2 +- .../PixelImplementations/Rgba32.PixelOperations.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs | 2 +- .../PixelImplementations/RgbaVector.PixelOperations.cs | 2 +- .../PixelFormats/PixelImplementations/RgbaVector.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs | 2 +- src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs | 2 +- .../PixelFormats/PixelOperations{TPixel}.Generated.cs | 2 +- .../PixelFormats/PixelOperations{TPixel}.Generated.tt | 4 ++-- .../PixelFormats/PixelOperations{TPixel}.PixelBenders.cs | 2 +- src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs | 2 +- src/ImageSharp/PixelFormats/RgbaComponent.cs | 2 +- src/ImageSharp/PixelFormats/Utils/PixelConverter.cs | 2 +- .../PixelFormats/Utils/Vector4Converters.Default.cs | 2 +- .../PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs | 2 +- src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs | 2 +- src/ImageSharp/Primitives/ColorMatrix.cs | 2 +- src/ImageSharp/Primitives/Complex64.cs | 2 +- src/ImageSharp/Primitives/ComplexVector4.cs | 2 +- src/ImageSharp/Primitives/DenseMatrix{T}.cs | 2 +- src/ImageSharp/Primitives/LongRational.cs | 2 +- src/ImageSharp/Primitives/Matrix3x2Extensions.cs | 2 +- src/ImageSharp/Primitives/Number.cs | 2 +- src/ImageSharp/Primitives/Point.cs | 2 +- src/ImageSharp/Primitives/PointF.cs | 2 +- src/ImageSharp/Primitives/Rational.cs | 2 +- src/ImageSharp/Primitives/Rectangle.cs | 2 +- src/ImageSharp/Primitives/RectangleF.cs | 2 +- src/ImageSharp/Primitives/SignedRational.cs | 2 +- src/ImageSharp/Primitives/Size.cs | 2 +- src/ImageSharp/Primitives/SizeF.cs | 2 +- src/ImageSharp/Primitives/ValueSize.cs | 2 +- src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs | 2 +- src/ImageSharp/Processing/AffineTransformBuilder.cs | 2 +- src/ImageSharp/Processing/AnchorPositionMode.cs | 2 +- src/ImageSharp/Processing/ColorBlindnessMode.cs | 2 +- .../Processing/DefaultImageProcessorContext{TPixel}.cs | 2 +- src/ImageSharp/Processing/EdgeDetectionOperators.cs | 2 +- .../Extensions/Binarization/BinaryDitherExtensions.cs | 2 +- .../Extensions/Binarization/BinaryThresholdExtensions.cs | 2 +- .../Processing/Extensions/Convolution/BokehBlurExtensions.cs | 2 +- .../Processing/Extensions/Convolution/BoxBlurExtensions.cs | 2 +- .../Extensions/Convolution/DetectEdgesExtensions.cs | 2 +- .../Extensions/Convolution/GaussianBlurExtensions.cs | 2 +- .../Extensions/Convolution/GaussianSharpenExtensions.cs | 2 +- .../Processing/Extensions/Dithering/DitherExtensions.cs | 2 +- .../Processing/Extensions/Drawing/DrawImageExtensions.cs | 2 +- .../Processing/Extensions/Effects/OilPaintExtensions.cs | 2 +- .../Extensions/Effects/PixelRowDelegateExtensions.cs | 2 +- .../Processing/Extensions/Effects/PixelateExtensions.cs | 2 +- .../Processing/Extensions/Filters/BlackWhiteExtensions.cs | 2 +- .../Processing/Extensions/Filters/BrightnessExtensions.cs | 2 +- .../Processing/Extensions/Filters/ColorBlindnessExtensions.cs | 2 +- .../Processing/Extensions/Filters/ContrastExtensions.cs | 2 +- .../Processing/Extensions/Filters/FilterExtensions.cs | 2 +- .../Processing/Extensions/Filters/GrayscaleExtensions.cs | 2 +- src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs | 2 +- .../Processing/Extensions/Filters/InvertExtensions.cs | 2 +- .../Processing/Extensions/Filters/KodachromeExtensions.cs | 2 +- .../Processing/Extensions/Filters/LightnessExtensions.cs | 2 +- .../Processing/Extensions/Filters/LomographExtensions.cs | 2 +- .../Processing/Extensions/Filters/OpacityExtensions.cs | 2 +- .../Processing/Extensions/Filters/PolaroidExtensions.cs | 2 +- .../Processing/Extensions/Filters/SaturateExtensions.cs | 2 +- .../Processing/Extensions/Filters/SepiaExtensions.cs | 2 +- .../Normalization/HistogramEqualizationExtensions.cs | 2 +- .../Extensions/Overlays/BackgroundColorExtensions.cs | 2 +- .../Processing/Extensions/Overlays/GlowExtensions.cs | 2 +- .../Processing/Extensions/Overlays/VignetteExtensions.cs | 2 +- src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs | 2 +- .../Processing/Extensions/Quantization/QuantizeExtensions.cs | 2 +- .../Processing/Extensions/Transforms/AutoOrientExtensions.cs | 2 +- .../Processing/Extensions/Transforms/CropExtensions.cs | 2 +- .../Processing/Extensions/Transforms/EntropyCropExtensions.cs | 2 +- .../Processing/Extensions/Transforms/FlipExtensions.cs | 2 +- .../Processing/Extensions/Transforms/PadExtensions.cs | 2 +- .../Processing/Extensions/Transforms/ResizeExtensions.cs | 2 +- .../Processing/Extensions/Transforms/RotateExtensions.cs | 2 +- .../Processing/Extensions/Transforms/RotateFlipExtensions.cs | 2 +- .../Processing/Extensions/Transforms/SkewExtensions.cs | 2 +- .../Processing/Extensions/Transforms/TransformExtensions.cs | 2 +- src/ImageSharp/Processing/FlipMode.cs | 2 +- src/ImageSharp/Processing/GrayscaleMode.cs | 2 +- src/ImageSharp/Processing/IImageProcessingContext.cs | 2 +- src/ImageSharp/Processing/IImageProcessingContextFactory.cs | 2 +- .../Processing/IInternalImageProcessingContext{TPixel}.cs | 2 +- src/ImageSharp/Processing/KnownDitherings.cs | 2 +- src/ImageSharp/Processing/KnownFilterMatrices.cs | 2 +- src/ImageSharp/Processing/KnownQuantizers.cs | 2 +- src/ImageSharp/Processing/KnownResamplers.cs | 2 +- src/ImageSharp/Processing/OrientationMode.cs | 2 +- src/ImageSharp/Processing/PixelRowOperation.cs | 2 +- .../Processors/Binarization/AdaptiveThresholdProcessor.cs | 2 +- .../Binarization/AdaptiveThresholdProcessor{TPixel}.cs | 2 +- .../Processors/Binarization/BinaryThresholdProcessor.cs | 2 +- .../Binarization/BinaryThresholdProcessor{TPixel}.cs | 2 +- src/ImageSharp/Processing/Processors/CloningImageProcessor.cs | 2 +- .../Processing/Processors/CloningImageProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Convolution/BokehBlurProcessor.cs | 2 +- .../Processors/Convolution/BokehBlurProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Convolution/BoxBlurProcessor.cs | 2 +- .../Processors/Convolution/BoxBlurProcessor{TPixel}.cs | 2 +- .../Processors/Convolution/Convolution2DProcessor{TPixel}.cs | 2 +- .../Convolution/Convolution2PassProcessor{TPixel}.cs | 2 +- .../Processors/Convolution/ConvolutionProcessorHelpers.cs | 2 +- .../Processors/Convolution/ConvolutionProcessor{TPixel}.cs | 2 +- .../Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs | 2 +- .../Convolution/EdgeDetectorCompassProcessor{TPixel}.cs | 2 +- .../Processors/Convolution/EdgeDetectorProcessor.cs | 2 +- .../Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs | 2 +- .../Processors/Convolution/GaussianBlurProcessor.cs | 2 +- .../Processors/Convolution/GaussianBlurProcessor{TPixel}.cs | 2 +- .../Processors/Convolution/GaussianSharpenProcessor.cs | 2 +- .../Convolution/GaussianSharpenProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Convolution/KayyaliProcessor.cs | 2 +- .../Processors/Convolution/Kernels/CompassKernels.cs | 2 +- .../Processors/Convolution/Kernels/KayyaliKernels.cs | 2 +- .../Processors/Convolution/Kernels/KirschKernels.cs | 2 +- .../Processors/Convolution/Kernels/LaplacianKernelFactory.cs | 2 +- .../Processors/Convolution/Kernels/LaplacianKernels.cs | 2 +- .../Processors/Convolution/Kernels/PrewittKernels.cs | 2 +- .../Processors/Convolution/Kernels/RobertsCrossKernels.cs | 2 +- .../Processors/Convolution/Kernels/RobinsonKernels.cs | 2 +- .../Processors/Convolution/Kernels/ScharrKernels.cs | 2 +- .../Processing/Processors/Convolution/Kernels/SobelKernels.cs | 2 +- .../Processing/Processors/Convolution/KirschProcessor.cs | 2 +- .../Processors/Convolution/Laplacian3x3Processor.cs | 2 +- .../Processors/Convolution/Laplacian5x5Processor.cs | 2 +- .../Processors/Convolution/LaplacianOfGaussianProcessor.cs | 2 +- .../Processors/Convolution/Parameters/BokehBlurKernelData.cs | 2 +- .../Convolution/Parameters/BokehBlurKernelDataProvider.cs | 2 +- .../Processors/Convolution/Parameters/BokehBlurParameters.cs | 2 +- .../Processing/Processors/Convolution/PrewittProcessor.cs | 2 +- .../Processors/Convolution/RobertsCrossProcessor.cs | 2 +- .../Processing/Processors/Convolution/RobinsonProcessor.cs | 2 +- .../Processing/Processors/Convolution/ScharrProcessor.cs | 2 +- .../Processing/Processors/Convolution/SobelProcessor.cs | 2 +- .../Processing/Processors/Dithering/ErroDither.KnownTypes.cs | 2 +- src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs | 2 +- src/ImageSharp/Processing/Processors/Dithering/IDither.cs | 2 +- .../Dithering/IPaletteDitherImageProcessor{TPixel}.cs | 2 +- .../Processors/Dithering/OrderedDither.KnownTypes.cs | 2 +- .../Processing/Processors/Dithering/OrderedDither.cs | 2 +- .../Processing/Processors/Dithering/OrderedDitherFactory.cs | 2 +- .../Processing/Processors/Dithering/PaletteDitherProcessor.cs | 2 +- .../Processors/Dithering/PaletteDitherProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Drawing/DrawImageProcessor.cs | 2 +- .../Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs | 2 +- .../Processing/Processors/Effects/IPixelRowDelegate.cs | 2 +- .../Processing/Processors/Effects/OilPaintingProcessor.cs | 2 +- .../Processors/Effects/OilPaintingProcessor{TPixel}.cs | 2 +- .../Processors/Effects/PixelRowDelegateProcessor.cs | 2 +- .../Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs | 2 +- .../Processing/Processors/Effects/PixelateProcessor.cs | 2 +- .../Processors/Effects/PixelateProcessor{TPixel}.cs | 2 +- .../Effects/PositionAwarePixelRowDelegateProcessor.cs | 2 +- .../Processing/Processors/Filters/AchromatomalyProcessor.cs | 2 +- .../Processing/Processors/Filters/AchromatopsiaProcessor.cs | 2 +- .../Processing/Processors/Filters/BlackWhiteProcessor.cs | 2 +- .../Processing/Processors/Filters/BrightnessProcessor.cs | 2 +- .../Processing/Processors/Filters/ContrastProcessor.cs | 2 +- .../Processing/Processors/Filters/DeuteranomalyProcessor.cs | 2 +- .../Processing/Processors/Filters/DeuteranopiaProcessor.cs | 2 +- .../Processing/Processors/Filters/FilterProcessor.cs | 2 +- .../Processing/Processors/Filters/FilterProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Filters/GrayscaleBt601Processor.cs | 2 +- .../Processing/Processors/Filters/GrayscaleBt709Processor.cs | 2 +- src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs | 2 +- .../Processing/Processors/Filters/InvertProcessor.cs | 2 +- .../Processing/Processors/Filters/KodachromeProcessor.cs | 2 +- .../Processing/Processors/Filters/LightnessProcessor.cs | 2 +- .../Processing/Processors/Filters/LomographProcessor.cs | 2 +- .../Processors/Filters/LomographProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Filters/OpacityProcessor.cs | 2 +- .../Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Filters/PolaroidProcessor.cs | 2 +- .../Processors/Filters/PolaroidProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Filters/ProtanomalyProcessor.cs | 2 +- .../Processing/Processors/Filters/ProtanopiaProcessor.cs | 2 +- .../Processing/Processors/Filters/SaturateProcessor.cs | 2 +- .../Processing/Processors/Filters/SepiaProcessor.cs | 2 +- .../Processing/Processors/Filters/TritanomalyProcessor.cs | 2 +- .../Processing/Processors/Filters/TritanopiaProcessor.cs | 2 +- .../Processing/Processors/ICloningImageProcessor.cs | 2 +- .../Processing/Processors/ICloningImageProcessor{TPixel}.cs | 2 +- src/ImageSharp/Processing/Processors/IImageProcessor.cs | 2 +- .../Processing/Processors/IImageProcessor{TPixel}.cs | 2 +- .../Processing/Processors/ImageProcessorExtensions.cs | 2 +- .../Processing/Processors/ImageProcessor{TPixel}.cs | 2 +- .../Normalization/AdaptiveHistogramEqualizationProcessor.cs | 2 +- .../AdaptiveHistogramEqualizationProcessor{TPixel}.cs | 2 +- .../AdaptiveHistogramEqualizationSlidingWindowProcessor.cs | 2 +- ...tiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs | 2 +- .../Normalization/GlobalHistogramEqualizationProcessor.cs | 2 +- .../GlobalHistogramEqualizationProcessor{TPixel}.cs | 2 +- .../Processors/Normalization/HistogramEqualizationMethod.cs | 2 +- .../Processors/Normalization/HistogramEqualizationOptions.cs | 2 +- .../Normalization/HistogramEqualizationProcessor.cs | 2 +- .../Normalization/HistogramEqualizationProcessor{TPixel}.cs | 2 +- .../Processors/Overlays/BackgroundColorProcessor.cs | 2 +- .../Processors/Overlays/BackgroundColorProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Overlays/GlowProcessor.cs | 2 +- .../Processing/Processors/Overlays/GlowProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Overlays/VignetteProcessor.cs | 2 +- .../Processors/Overlays/VignetteProcessor{TPixel}.cs | 2 +- .../Processors/Quantization/DefaultPixelSamplingStrategy.cs | 2 +- .../Processors/Quantization/EuclideanPixelMap{TPixel}.cs | 2 +- .../Processors/Quantization/ExtensivePixelSamplingStrategy.cs | 2 +- .../Processors/Quantization/IPixelSamplingStrategy.cs | 2 +- .../Processing/Processors/Quantization/IQuantizer.cs | 2 +- .../Processing/Processors/Quantization/IQuantizer{TPixel}.cs | 2 +- .../Processing/Processors/Quantization/OctreeQuantizer.cs | 2 +- .../Processors/Quantization/OctreeQuantizer{TPixel}.cs | 2 +- .../Processing/Processors/Quantization/PaletteQuantizer.cs | 2 +- .../Processors/Quantization/PaletteQuantizer{TPixel}.cs | 2 +- .../Processing/Processors/Quantization/QuantizeProcessor.cs | 2 +- .../Processors/Quantization/QuantizeProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Quantization/QuantizerConstants.cs | 2 +- .../Processing/Processors/Quantization/QuantizerOptions.cs | 2 +- .../Processing/Processors/Quantization/QuantizerUtilities.cs | 2 +- .../Processors/Quantization/WebSafePaletteQuantizer.cs | 2 +- .../Processors/Quantization/WernerPaletteQuantizer.cs | 2 +- .../Processing/Processors/Quantization/WuQuantizer.cs | 2 +- .../Processing/Processors/Quantization/WuQuantizer{TPixel}.cs | 2 +- .../Processing/Processors/Transforms/CropProcessor.cs | 2 +- .../Processing/Processors/Transforms/CropProcessor{TPixel}.cs | 2 +- .../Processors/Transforms/DegenerateTransformException.cs | 2 +- .../Processing/Processors/Transforms/EntropyCropProcessor.cs | 2 +- .../Processors/Transforms/EntropyCropProcessor{TPixel}.cs | 2 +- src/ImageSharp/Processing/Processors/Transforms/IResampler.cs | 2 +- .../Transforms/IResamplingTransformImageProcessor{TPixel}.cs | 2 +- .../Processors/Transforms/Linear/AffineTransformProcessor.cs | 2 +- .../Transforms/Linear/AffineTransformProcessor{TPixel}.cs | 2 +- .../Processors/Transforms/Linear/AutoOrientProcessor.cs | 2 +- .../Transforms/Linear/AutoOrientProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Transforms/Linear/FlipProcessor.cs | 2 +- .../Processors/Transforms/Linear/FlipProcessor{TPixel}.cs | 2 +- .../Processors/Transforms/Linear/LinearTransformUtilities.cs | 2 +- .../Transforms/Linear/ProjectiveTransformProcessor.cs | 2 +- .../Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs | 2 +- .../Processors/Transforms/Linear/RotateProcessor.cs | 2 +- .../Processors/Transforms/Linear/RotateProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Transforms/Linear/SkewProcessor.cs | 2 +- .../Processors/Transforms/Resamplers/BicubicResampler.cs | 2 +- .../Processors/Transforms/Resamplers/BoxResampler.cs | 2 +- .../Processors/Transforms/Resamplers/CubicResampler.cs | 2 +- .../Processors/Transforms/Resamplers/LanczosResampler.cs | 2 +- .../Transforms/Resamplers/NearestNeighborResampler.cs | 2 +- .../Processors/Transforms/Resamplers/TriangleResampler.cs | 2 +- .../Processors/Transforms/Resamplers/WelchResampler.cs | 2 +- .../Processing/Processors/Transforms/Resize/ResizeHelper.cs | 2 +- .../Processing/Processors/Transforms/Resize/ResizeKernel.cs | 2 +- .../Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs | 2 +- .../Processors/Transforms/Resize/ResizeKernelMap.cs | 2 +- .../Processors/Transforms/Resize/ResizeProcessor.cs | 2 +- .../Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs | 2 +- .../Processing/Processors/Transforms/Resize/ResizeWorker.cs | 2 +- .../Processing/Processors/Transforms/TransformProcessor.cs | 2 +- .../Processors/Transforms/TransformProcessorHelpers.cs | 2 +- .../Processing/Processors/Transforms/TransformUtilities.cs | 2 +- src/ImageSharp/Processing/ProjectiveTransformBuilder.cs | 2 +- src/ImageSharp/Processing/ResizeMode.cs | 2 +- src/ImageSharp/Processing/ResizeOptions.cs | 2 +- src/ImageSharp/Processing/RotateMode.cs | 2 +- src/ImageSharp/Processing/TaperCorner.cs | 2 +- src/ImageSharp/Processing/TaperSide.cs | 2 +- src/ImageSharp/Properties/AssemblyInfo.cs | 2 +- src/ImageSharp/ReadOrigin.cs | 2 +- tests/ImageSharp.Benchmarks/BenchmarkBase.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs | 2 +- .../Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs | 2 +- .../Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs | 2 +- .../Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs | 2 +- .../Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs | 2 +- .../Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs | 2 +- .../Codecs/Jpeg/DecodeJpegParseStreamOnly.cs | 2 +- .../ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs | 2 +- .../Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs | 2 +- .../Codecs/Jpeg/DoubleBufferedStreams.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs | 2 +- .../Codecs/Jpeg/LoadResizeSave_Aggregate.cs | 2 +- .../Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs | 2 +- .../ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs | 2 +- tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs | 2 +- tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs | 2 +- tests/ImageSharp.Benchmarks/Color/ColorEquality.cs | 2 +- .../Color/ColorspaceCieXyzToCieLabConvert.cs | 2 +- .../Color/ColorspaceCieXyzToHunterLabConvert.cs | 2 +- .../Color/ColorspaceCieXyzToLmsConvert.cs | 2 +- .../Color/ColorspaceCieXyzToRgbConvert.cs | 2 +- tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs | 2 +- tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs | 2 +- tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs | 2 +- tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs | 2 +- tests/ImageSharp.Benchmarks/Config.cs | 2 +- tests/ImageSharp.Benchmarks/General/Array2D.cs | 2 +- tests/ImageSharp.Benchmarks/General/ArrayReverse.cs | 2 +- tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs | 2 +- tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs | 2 +- .../General/BasicMath/ClampInt32IntoByte.cs | 2 +- tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs | 2 +- .../General/BasicMath/ModuloPowerOfTwoConstant.cs | 2 +- .../General/BasicMath/ModuloPowerOfTwoVariable.cs | 2 +- tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs | 2 +- tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs | 2 +- tests/ImageSharp.Benchmarks/General/CopyBuffers.cs | 2 +- .../General/PixelConversion/ITestPixel.cs | 2 +- .../PixelConversion/PixelConversion_ConvertFromRgba32.cs | 2 +- .../PixelConversion/PixelConversion_ConvertFromVector4.cs | 2 +- .../PixelConversion/PixelConversion_ConvertToRgba32.cs | 2 +- ...elConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs | 2 +- .../PixelConversion/PixelConversion_ConvertToVector4.cs | 2 +- ...lConversion_ConvertToVector4_AsPartOfCompositeOperation.cs | 2 +- .../PixelConversion/PixelConversion_Rgba32_To_Argb32.cs | 2 +- .../PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs | 2 +- .../ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs | 2 +- .../ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs | 2 +- tests/ImageSharp.Benchmarks/General/StructCasting.cs | 2 +- tests/ImageSharp.Benchmarks/General/Vector4Constants.cs | 2 +- .../General/Vectorization/BitwiseOrUint32.cs | 2 +- tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs | 2 +- .../ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs | 2 +- tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs | 2 +- tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs | 2 +- .../ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs | 2 +- tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs | 2 +- .../General/Vectorization/Premultiply.cs | 2 +- .../General/Vectorization/ReinterpretUInt32AsFloat.cs | 2 +- .../General/Vectorization/SIMDBenchmarkBase.cs | 2 +- .../General/Vectorization/UInt32ToSingle.cs | 2 +- .../General/Vectorization/VectorFetching.cs | 2 +- .../General/Vectorization/WidenBytesToUInt32.cs | 2 +- .../PixelBlenders/PorterDuffBulkVsPixel.cs | 2 +- tests/ImageSharp.Benchmarks/Program.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/Crop.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/Resize.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/Rotate.cs | 2 +- tests/ImageSharp.Benchmarks/Samplers/Skew.cs | 2 +- tests/ImageSharp.Tests.ProfilingSandbox/Program.cs | 2 +- .../ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs | 2 +- tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs | 2 +- tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs | 2 +- tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs | 2 +- tests/ImageSharp.Tests/Color/ColorTests.cs | 2 +- tests/ImageSharp.Tests/Color/ReferencePalette.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs | 2 +- .../Colorspaces/CieXyChromaticityCoordinatesTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/CmykTests.cs | 2 +- .../Colorspaces/Companding/CompandingTests.cs | 2 +- .../Colorspaces/Conversion/ApproximateColorspaceComparer.cs | 2 +- .../Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs | 2 +- .../Conversion/CieLabAndCieLchuvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndCmykConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndHslConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndHsvConversionTests.cs | 2 +- .../Conversion/CieLabAndHunterLabConversionTests.cs | 2 +- .../Conversion/CieLabAndLinearRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndLmsConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndHslConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndHsvConversionTests.cs | 2 +- .../Conversion/CieLchAndHunterLabConversionTests.cs | 2 +- .../Conversion/CieLchAndLinearRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndLmsConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs | 2 +- .../Conversion/CieLchuvAndCieLchConversionTests.cs | 2 +- .../Conversion/CieLchuvAndCieLuvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLuvAndHslConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs | 2 +- .../Conversion/CieLuvAndHunterLabConversionTests.cs | 2 +- .../Conversion/CieLuvAndLinearRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyyAndHslConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs | 2 +- .../Conversion/CieXyyAndHunterLabConversionTests.cs | 2 +- .../Conversion/CieXyyAndLinearRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs | 2 +- .../Conversion/CieXyzAndCieLchuvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndHslConversionTests.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs | 2 +- .../Conversion/CieXyzAndHunterLabConversionTest.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs | 2 +- .../Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndCieLchConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndHslConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndHsvConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs | 2 +- .../Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs | 2 +- .../Colorspaces/Conversion/ColorConverterAdaptTest.cs | 2 +- .../Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs | 2 +- .../Colorspaces/Conversion/RgbAndCmykConversionTest.cs | 2 +- .../Colorspaces/Conversion/RgbAndHslConversionTest.cs | 2 +- .../Colorspaces/Conversion/RgbAndHsvConversionTest.cs | 2 +- .../Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs | 2 +- .../Conversion/VonKriesChromaticAdaptationTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/HslTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/HsvTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/LmsTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/RgbTests.cs | 2 +- .../ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs | 2 +- tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs | 2 +- tests/ImageSharp.Tests/Common/ConstantsTests.cs | 2 +- tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs | 2 +- tests/ImageSharp.Tests/Common/SimdUtilsTests.cs | 2 +- tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs | 2 +- tests/ImageSharp.Tests/Common/Tuple8.cs | 2 +- tests/ImageSharp.Tests/ConfigurationTests.cs | 2 +- tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs | 2 +- tests/ImageSharp.Tests/Drawing/DrawImageTests.cs | 2 +- tests/ImageSharp.Tests/FileTestBase.cs | 2 +- tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs | 2 +- tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs | 2 +- .../Formats/Gif/Sections/GifGraphicControlExtensionTests.cs | 2 +- .../Formats/Gif/Sections/GifImageDescriptorTests.cs | 2 +- .../Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs | 2 +- tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs | 2 +- .../Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs | 2 +- .../ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs | 2 +- .../ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs | 2 +- .../Formats/Jpg/JpegDecoderTests.Progressive.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs | 2 +- .../Formats/Jpg/JpegImagePostProcessorTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs | 2 +- .../Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs | 2 +- .../Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs | 2 +- .../Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs | 2 +- .../Formats/Jpg/ReferenceImplementationsTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs | 2 +- .../Formats/Jpg/Utils/LibJpegTools.ComponentData.cs | 2 +- .../Formats/Jpg/Utils/LibJpegTools.SpectralData.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs | 2 +- .../Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs | 2 +- .../Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs | 2 +- .../Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs | 2 +- .../Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs | 2 +- .../Formats/Jpg/Utils/ReferenceImplementations.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs | 2 +- tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs | 2 +- tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs | 2 +- tests/ImageSharp.Tests/GlobalSuppressions.cs | 2 +- .../ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs | 2 +- tests/ImageSharp.Tests/GraphicsOptionsTests.cs | 2 +- tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs | 2 +- .../Helpers/ParallelExecutionSettingsTests.cs | 2 +- tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs | 2 +- tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs | 2 +- tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs | 2 +- tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs | 2 +- tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs | 2 +- tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs | 2 +- tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs | 2 +- tests/ImageSharp.Tests/Image/ImageCloneTests.cs | 2 +- .../Image/ImageFrameCollectionTests.Generic.cs | 2 +- .../Image/ImageFrameCollectionTests.NonGeneric.cs | 2 +- tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs | 2 +- tests/ImageSharp.Tests/Image/ImageFrameTests.cs | 2 +- tests/ImageSharp.Tests/Image/ImageRotationTests.cs | 2 +- tests/ImageSharp.Tests/Image/ImageSaveTests.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.Identify.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs | 2 +- .../ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs | 2 +- .../ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs | 2 +- .../Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs | 2 +- .../Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs | 2 +- .../ImageTests.Load_FromStream_PassLocalConfiguration.cs | 2 +- .../Image/ImageTests.Load_FromStream_ThrowsRightException.cs | 2 +- .../ImageTests.Load_FromStream_UseDefaultConfiguration.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.Save.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs | 2 +- tests/ImageSharp.Tests/Image/ImageTests.cs | 2 +- tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs | 2 +- tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs | 2 +- tests/ImageSharp.Tests/Image/NoneSeekableStream.cs | 2 +- tests/ImageSharp.Tests/ImageInfoTests.cs | 2 +- tests/ImageSharp.Tests/Issues/Issue594.cs | 2 +- .../Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs | 2 +- tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs | 2 +- tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs | 2 +- .../Memory/Allocators/SimpleGcMemoryAllocatorTests.cs | 2 +- tests/ImageSharp.Tests/Memory/Buffer2DTests.cs | 2 +- tests/ImageSharp.Tests/Memory/BufferAreaTests.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupIndex.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs | 2 +- .../MemoryGroupTests.SwapOrCopyContent.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupTests.cs | 2 +- .../Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs | 2 +- tests/ImageSharp.Tests/Memory/TestStructs.cs | 2 +- tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs | 2 +- tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs | 2 +- .../Metadata/Profiles/Exif/ExifProfileTests.cs | 2 +- .../Metadata/Profiles/Exif/ExifReaderTests.cs | 2 +- .../Profiles/Exif/ExifTagDescriptionAttributeTests.cs | 2 +- .../ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs | 2 +- .../Metadata/Profiles/Exif/Values/ExifValuesTests.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs | 2 +- .../Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs | 2 +- .../ICC/DataReader/IccDataReaderMultiProcessElementTests.cs | 2 +- .../ICC/DataReader/IccDataReaderNonPrimitivesTests.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs | 2 +- .../Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs | 2 +- .../Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs | 2 +- .../Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs | 2 +- .../ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs | 2 +- .../ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs | 2 +- .../Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs | 2 +- .../Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs | 2 +- .../ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs | 2 +- .../ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs | 2 +- .../ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs | 2 +- .../Metadata/Profiles/ICC/Various/IccProfileIdTests.cs | 2 +- .../Metadata/Profiles/IPTC/IptcProfileTests.cs | 2 +- tests/ImageSharp.Tests/Numerics/RationalTests.cs | 2 +- tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/A8Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/L16Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/L8Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/La16Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/La32Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs | 2 +- .../PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs | 2 +- .../PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs | 2 +- .../PixelBlenders/PorterDuffFunctionsTestsTPixel.cs | 2 +- .../PixelConverterTests.ReferenceImplementations.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs | 2 +- .../PixelConversionModifiersExtensionsTests.cs | 2 +- .../PixelOperationsTests.Argb32OperationsTests.cs | 2 +- .../PixelOperationsTests.Bgr24OperationsTests.cs | 2 +- .../PixelOperationsTests.Bgra32OperationsTests.cs | 2 +- .../PixelOperationsTests.Bgra5551OperationsTests.cs | 2 +- .../PixelOperationsTests.L16OperationsTests.cs | 2 +- .../PixelOperations/PixelOperationsTests.L8OperationsTests.cs | 2 +- .../PixelOperationsTests.La16OperationsTests.cs | 2 +- .../PixelOperationsTests.La32OperationsTests.cs | 2 +- .../PixelOperationsTests.Rgb24OperationsTests.cs | 2 +- .../PixelOperationsTests.Rgb48OperationsTests.cs | 2 +- .../PixelOperationsTests.Rgba32OperationsTests.cs | 2 +- .../PixelOperationsTests.Rgba64OperationsTests.cs | 2 +- .../PixelOperationsTests.RgbaVectorOperationsTests.cs | 2 +- .../PixelFormats/PixelOperations/PixelOperationsTests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs | 2 +- tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/PointFTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/PointTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/RectangleFTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/RectangleTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/SizeFTests.cs | 2 +- tests/ImageSharp.Tests/Primitives/SizeTests.cs | 2 +- .../Processing/BaseImageOperationsExtensionTest.cs | 2 +- .../Processing/Binarization/AdaptiveThresholdTests.cs | 2 +- .../Processing/Binarization/BinaryThresholdTest.cs | 2 +- .../Processing/Binarization/OrderedDitherFactoryTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs | 2 +- .../Processing/Convolution/DetectEdgesTest.cs | 2 +- .../Processing/Convolution/GaussianBlurTest.cs | 2 +- .../Processing/Convolution/GaussianSharpenTest.cs | 2 +- .../Convolution/Processors/LaplacianKernelFactoryTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs | 2 +- .../Processing/Effects/BackgroundColorTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs | 2 +- .../Processing/FakeImageOperationsProvider.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs | 2 +- .../ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/HueTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs | 2 +- tests/ImageSharp.Tests/Processing/ImageOperationTests.cs | 2 +- .../Processing/ImageProcessingContextTests.cs | 2 +- .../Processing/Normalization/HistogramEqualizationTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs | 2 +- .../Processing/Processors/Binarization/BinaryDitherTests.cs | 2 +- .../Processing/Processors/Binarization/BinaryThresholdTest.cs | 2 +- .../Processors/Convolution/Basic1ParameterConvolutionTests.cs | 2 +- .../Processing/Processors/Convolution/BokehBlurTest.cs | 2 +- .../Processing/Processors/Convolution/BoxBlurTest.cs | 2 +- .../Processing/Processors/Convolution/DetectEdgesTest.cs | 2 +- .../Processing/Processors/Convolution/GaussianBlurTest.cs | 2 +- .../Processing/Processors/Convolution/GaussianSharpenTest.cs | 2 +- .../Processing/Processors/Dithering/DitherTests.cs | 2 +- .../Processing/Processors/Effects/BackgroundColorTest.cs | 2 +- .../Processing/Processors/Effects/OilPaintTest.cs | 2 +- .../Processing/Processors/Effects/PixelShaderTest.cs | 2 +- .../Processing/Processors/Effects/PixelateTest.cs | 2 +- .../Processing/Processors/Filters/BlackWhiteTest.cs | 2 +- .../Processing/Processors/Filters/BrightnessTest.cs | 2 +- .../Processing/Processors/Filters/ColorBlindnessTest.cs | 2 +- .../Processing/Processors/Filters/ContrastTest.cs | 2 +- .../Processing/Processors/Filters/FilterTest.cs | 2 +- .../Processing/Processors/Filters/GrayscaleTest.cs | 2 +- .../ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs | 2 +- .../Processing/Processors/Filters/InvertTest.cs | 2 +- .../Processing/Processors/Filters/KodachromeTest.cs | 2 +- .../Processing/Processors/Filters/LightnessTest.cs | 2 +- .../Processing/Processors/Filters/LomographTest.cs | 2 +- .../Processing/Processors/Filters/OpacityTest.cs | 2 +- .../Processing/Processors/Filters/PolaroidTest.cs | 2 +- .../Processing/Processors/Filters/SaturateTest.cs | 2 +- .../Processing/Processors/Filters/SepiaTest.cs | 2 +- .../Processing/Processors/Overlays/GlowTest.cs | 2 +- .../Processing/Processors/Overlays/OverlayTestBase.cs | 2 +- .../Processing/Processors/Overlays/VignetteTest.cs | 2 +- .../Processors/Quantization/OctreeQuantizerTests.cs | 2 +- .../Processors/Quantization/PaletteQuantizerTests.cs | 2 +- .../Processing/Processors/Quantization/QuantizerTests.cs | 2 +- .../Processing/Processors/Quantization/WuQuantizerTests.cs | 2 +- .../Processing/Processors/Transforms/AffineTransformTests.cs | 2 +- .../Processing/Processors/Transforms/AutoOrientTests.cs | 2 +- .../Processing/Processors/Transforms/CropTest.cs | 2 +- .../Processing/Processors/Transforms/EntropyCropTest.cs | 2 +- .../Processing/Processors/Transforms/FlipTests.cs | 2 +- .../Processing/Processors/Transforms/PadTest.cs | 2 +- .../Processing/Processors/Transforms/ResamplerTests.cs | 2 +- .../Processing/Processors/Transforms/ResizeHelperTests.cs | 2 +- .../Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs | 2 +- .../Processing/Processors/Transforms/ResizeKernelMapTests.cs | 2 +- .../Processing/Processors/Transforms/ResizeTests.cs | 2 +- .../Processing/Processors/Transforms/RotateFlipTests.cs | 2 +- .../Processing/Processors/Transforms/RotateTests.cs | 2 +- .../Processing/Processors/Transforms/SkewTests.cs | 2 +- .../Processing/Transforms/AffineTransformBuilderTests.cs | 2 +- .../ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs | 2 +- .../ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs | 2 +- tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs | 2 +- .../Processing/Transforms/ProjectiveTransformBuilderTests.cs | 2 +- .../Processing/Transforms/ProjectiveTransformTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs | 2 +- .../ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs | 2 +- tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs | 2 +- .../Processing/Transforms/TransformBuilderTestBase.cs | 2 +- .../Processing/Transforms/TransformsHelpersTest.cs | 2 +- .../ProfilingBenchmarks/JpegProfilingBenchmarks.cs | 2 +- .../ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs | 2 +- tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs | 2 +- .../ProfilingBenchmarks/ResizeProfilingBenchmarks.cs | 2 +- .../Quantization/PixelSamplingStrategyTests.cs | 2 +- tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs | 2 +- tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs | 2 +- .../TestDataIcc/IccTestDataMultiProcessElements.cs | 2 +- .../ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs | 2 +- tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs | 2 +- tests/ImageSharp.Tests/TestFile.cs | 2 +- tests/ImageSharp.Tests/TestFileSystem.cs | 2 +- tests/ImageSharp.Tests/TestFontUtilities.cs | 2 +- tests/ImageSharp.Tests/TestFormat.cs | 2 +- tests/ImageSharp.Tests/TestImages.cs | 2 +- .../TestUtilities/ApproximateFloatComparer.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs | 2 +- .../TestUtilities/Attributes/GroupOutputAttribute.cs | 2 +- .../TestUtilities/Attributes/ImageDataAttributeBase.cs | 2 +- .../Attributes/WithBasicTestPatternImagesAttribute.cs | 2 +- .../TestUtilities/Attributes/WithBlankImagesAttribute.cs | 2 +- .../TestUtilities/Attributes/WithFileAttribute.cs | 2 +- .../TestUtilities/Attributes/WithFileCollectionAttribute.cs | 2 +- .../TestUtilities/Attributes/WithMemberFactoryAttribute.cs | 2 +- .../Attributes/WithSolidFilledImagesAttribute.cs | 2 +- .../Attributes/WithTestPatternImagesAttribute.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs | 2 +- .../ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs | 2 +- .../TestUtilities/ImageComparison/ExactImageComparer.cs | 2 +- .../Exceptions/ImageDifferenceIsOverThresholdException.cs | 2 +- .../Exceptions/ImageDimensionsMismatchException.cs | 2 +- .../ImageComparison/Exceptions/ImagesSimilarityException.cs | 2 +- .../TestUtilities/ImageComparison/ImageComparer.cs | 2 +- .../TestUtilities/ImageComparison/ImageSimilarityReport.cs | 2 +- .../TestUtilities/ImageComparison/PixelDifference.cs | 2 +- .../TestUtilities/ImageComparison/TolerantImageComparer.cs | 2 +- .../TestUtilities/ImageProviders/BasicTestPatternProvider.cs | 2 +- .../TestUtilities/ImageProviders/BlankProvider.cs | 2 +- .../TestUtilities/ImageProviders/FileProvider.cs | 2 +- .../TestUtilities/ImageProviders/ITestImageProvider.cs | 2 +- .../TestUtilities/ImageProviders/MemberMethodProvider.cs | 2 +- .../TestUtilities/ImageProviders/SolidProvider.cs | 2 +- .../TestUtilities/ImageProviders/TestImageProvider.cs | 2 +- .../TestUtilities/ImageProviders/TestPatternProvider.cs | 2 +- .../ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs | 2 +- .../TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs | 2 +- .../TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs | 2 +- .../ReferenceCodecs/SystemDrawingReferenceDecoder.cs | 2 +- .../ReferenceCodecs/SystemDrawingReferenceEncoder.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs | 2 +- .../ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestPixel.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestType.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestUtils.cs | 2 +- tests/ImageSharp.Tests/TestUtilities/TestVector4.cs | 2 +- .../TestUtilities/Tests/BasicSerializerTests.cs | 2 +- .../ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs | 2 +- .../TestUtilities/Tests/ImageComparerTests.cs | 2 +- .../TestUtilities/Tests/MagickReferenceCodecTests.cs | 2 +- .../TestUtilities/Tests/ReferenceDecoderBenchmarks.cs | 2 +- .../TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs | 2 +- .../TestUtilities/Tests/TestEnvironmentTests.cs | 2 +- .../TestUtilities/Tests/TestImageExtensionsTests.cs | 2 +- .../TestUtilities/Tests/TestImageProviderTests.cs | 2 +- .../TestUtilities/Tests/TestUtilityExtensionsTests.cs | 2 +- tests/ImageSharp.Tests/VectorAssert.cs | 2 +- 1408 files changed, 1413 insertions(+), 1412 deletions(-) diff --git a/.gitattributes b/.gitattributes index 66aaca373..3b7ad7e19 100644 --- a/.gitattributes +++ b/.gitattributes @@ -107,6 +107,7 @@ *.tga binary *.ttc binary *.ttf binary +*.webp binary *.woff binary *.woff2 binary *.xls binary diff --git a/Directory.Build.props b/Directory.Build.props index b5f5f1279..4e79fa187 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -126,7 +126,7 @@ - + diff --git a/shared-infrastructure b/shared-infrastructure index ea561c249..44686c6a1 160000 --- a/shared-infrastructure +++ b/shared-infrastructure @@ -1 +1 @@ -Subproject commit ea561c249ba86352fe3b69e612b8072f3652eacb +Subproject commit 44686c6a116961f4a5163e19a0d6136e1b0b9f72 diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index a79733fec..f4e9f3042 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Advanced/AotCompilerTools.cs b/src/ImageSharp/Advanced/AotCompilerTools.cs index d692292b0..eaea7a971 100644 --- a/src/ImageSharp/Advanced/AotCompilerTools.cs +++ b/src/ImageSharp/Advanced/AotCompilerTools.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics.CodeAnalysis; diff --git a/src/ImageSharp/Advanced/IConfigurationProvider.cs b/src/ImageSharp/Advanced/IConfigurationProvider.cs index d3e3a91aa..2deb73a20 100644 --- a/src/ImageSharp/Advanced/IConfigurationProvider.cs +++ b/src/ImageSharp/Advanced/IConfigurationProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Advanced { diff --git a/src/ImageSharp/Advanced/IImageVisitor.cs b/src/ImageSharp/Advanced/IImageVisitor.cs index 079db42c0..50e6337e5 100644 --- a/src/ImageSharp/Advanced/IImageVisitor.cs +++ b/src/ImageSharp/Advanced/IImageVisitor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Advanced/IPixelSource.cs b/src/ImageSharp/Advanced/IPixelSource.cs index f609b15d3..f0b2687de 100644 --- a/src/ImageSharp/Advanced/IPixelSource.cs +++ b/src/ImageSharp/Advanced/IPixelSource.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Advanced/IRowIntervalOperation.cs b/src/ImageSharp/Advanced/IRowIntervalOperation.cs index 980ed91a7..a044d8fad 100644 --- a/src/ImageSharp/Advanced/IRowIntervalOperation.cs +++ b/src/ImageSharp/Advanced/IRowIntervalOperation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs b/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs index 47fcf253e..f554e8920 100644 --- a/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs +++ b/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Advanced/IRowOperation.cs b/src/ImageSharp/Advanced/IRowOperation.cs index 0a6065e4b..eeec6dce3 100644 --- a/src/ImageSharp/Advanced/IRowOperation.cs +++ b/src/ImageSharp/Advanced/IRowOperation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Advanced { diff --git a/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs b/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs index 7a13930fa..7d8250ddf 100644 --- a/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs +++ b/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Advanced/ParallelExecutionSettings.cs b/src/ImageSharp/Advanced/ParallelExecutionSettings.cs index 54ee06918..481189374 100644 --- a/src/ImageSharp/Advanced/ParallelExecutionSettings.cs +++ b/src/ImageSharp/Advanced/ParallelExecutionSettings.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Threading.Tasks; diff --git a/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs b/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs index 3f0f77ca3..f8250632b 100644 --- a/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs +++ b/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Advanced/ParallelRowIterator.cs b/src/ImageSharp/Advanced/ParallelRowIterator.cs index fb85de986..45701f933 100644 --- a/src/ImageSharp/Advanced/ParallelRowIterator.cs +++ b/src/ImageSharp/Advanced/ParallelRowIterator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Color/Color.Conversions.cs b/src/ImageSharp/Color/Color.Conversions.cs index a6e0717f4..1d35b8a31 100644 --- a/src/ImageSharp/Color/Color.Conversions.cs +++ b/src/ImageSharp/Color/Color.Conversions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Color/Color.NamedColors.cs b/src/ImageSharp/Color/Color.NamedColors.cs index 240ce304d..49c18c9a5 100644 --- a/src/ImageSharp/Color/Color.NamedColors.cs +++ b/src/ImageSharp/Color/Color.NamedColors.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Color/Color.WebSafePalette.cs b/src/ImageSharp/Color/Color.WebSafePalette.cs index 8e5fb2a55..67c608730 100644 --- a/src/ImageSharp/Color/Color.WebSafePalette.cs +++ b/src/ImageSharp/Color/Color.WebSafePalette.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Color/Color.WernerPalette.cs b/src/ImageSharp/Color/Color.WernerPalette.cs index 2948b4c52..f8bada44a 100644 --- a/src/ImageSharp/Color/Color.WernerPalette.cs +++ b/src/ImageSharp/Color/Color.WernerPalette.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Color/Color.cs b/src/ImageSharp/Color/Color.cs index e0f9d1e8d..9056d023a 100644 --- a/src/ImageSharp/Color/Color.cs +++ b/src/ImageSharp/Color/Color.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLab.cs b/src/ImageSharp/ColorSpaces/CieLab.cs index 146acf12e..837812ad0 100644 --- a/src/ImageSharp/ColorSpaces/CieLab.cs +++ b/src/ImageSharp/ColorSpaces/CieLab.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLch.cs b/src/ImageSharp/ColorSpaces/CieLch.cs index 99d4c09e9..52d53ffb2 100644 --- a/src/ImageSharp/ColorSpaces/CieLch.cs +++ b/src/ImageSharp/ColorSpaces/CieLch.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLchuv.cs b/src/ImageSharp/ColorSpaces/CieLchuv.cs index ab6f639a2..58fcbfcc3 100644 --- a/src/ImageSharp/ColorSpaces/CieLchuv.cs +++ b/src/ImageSharp/ColorSpaces/CieLchuv.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLuv.cs b/src/ImageSharp/ColorSpaces/CieLuv.cs index d54d92b62..183222f3d 100644 --- a/src/ImageSharp/ColorSpaces/CieLuv.cs +++ b/src/ImageSharp/ColorSpaces/CieLuv.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieXyy.cs b/src/ImageSharp/ColorSpaces/CieXyy.cs index fff296945..2dc4a6204 100644 --- a/src/ImageSharp/ColorSpaces/CieXyy.cs +++ b/src/ImageSharp/ColorSpaces/CieXyy.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieXyz.cs b/src/ImageSharp/ColorSpaces/CieXyz.cs index 6c5adcb21..f6c95b44b 100644 --- a/src/ImageSharp/ColorSpaces/CieXyz.cs +++ b/src/ImageSharp/ColorSpaces/CieXyz.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Cmyk.cs b/src/ImageSharp/ColorSpaces/Cmyk.cs index 5229cf14f..8228c3050 100644 --- a/src/ImageSharp/ColorSpaces/Cmyk.cs +++ b/src/ImageSharp/ColorSpaces/Cmyk.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs b/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs index 09b324b00..73faa30fe 100644 --- a/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs b/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs index 981e32f8e..7898750a0 100644 --- a/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs b/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs index 773fe8164..fab8e655b 100644 --- a/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs b/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs index edc0b9763..0d2030d0d 100644 --- a/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs b/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs index cc30c3632..f5c61fe24 100644 --- a/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs b/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs index 2bcdc5127..5ce915e3e 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.ColorSpaces.Conversion { diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs index 2b9073814..37aeae6ba 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.ColorSpaces.Conversion { diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs index 69d0c1bed..1880d535c 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs index 52f872430..560cd763f 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs index 2588561c8..337cccc66 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs index 867b44a78..662564863 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs index 344b83254..90654efe3 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs index 8362432ab..70d6a0c7b 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs index 3ff9ac85f..61534127a 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs index 7c7436391..18ccfa054 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs index e60ad5e20..dbcba38cb 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs index 91e5549ac..9a9c9be78 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs index b2c23b5a4..8801f837f 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs index 3b8638f7d..9b089b7c9 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs index e83dcb125..4695706d0 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs index 4ea1d8d8f..83b756817 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs index 05d3b2f2d..2c08db268 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs index 27dd989ad..bf7786875 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs index 1e774fe67..6be996fbb 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs index 014ca1abb..b18bd81a6 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs index e1bf04aa7..3bf36efaf 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs index bafd0df47..bd069373b 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs index 2dae2669f..1ccc59dc5 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs index 29fdae69c..78e1c39f5 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs index 09040c98c..b07dcafad 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs index f704d1a34..083259d64 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs index 68f6c495d..47fddbf42 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs index a22b097d2..5094c46ec 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs index 4f4aa8482..42e468733 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs index 96ec96b49..acce087fb 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs index 881d3d919..ed43951e3 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs index 25558537a..999fef5fd 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs index 8e92ced94..6f2dafdf2 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs index 5dbd23b8b..844bf6c88 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs index 04ab0480b..9316db491 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs index 795db7e2c..e9c8e17a5 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs index 105817075..e6d59e0a5 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs index adaad50fe..25fbf8025 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs index 54081b639..e5bde6477 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs index bc8c6f030..7a50b67e3 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs index 0821c05c3..30eda8826 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs index 69877d8b5..e26ed0e90 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs index 8b8e4ab57..1e3959db2 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs index 03378f431..7ec9f2703 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs index 7589a1d57..0e01fd5bd 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs index c7020723b..6a2e451e9 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs index d9c436527..2d97db2bc 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs index 4698534db..c3f4e5fb9 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs index 80b635cad..6c59fd3c3 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs index 2e5a5a4eb..c112d118e 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs index c9246f510..7456c6c93 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Hsl.cs b/src/ImageSharp/ColorSpaces/Hsl.cs index 04b3bea41..75ac8c053 100644 --- a/src/ImageSharp/ColorSpaces/Hsl.cs +++ b/src/ImageSharp/ColorSpaces/Hsl.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Hsv.cs b/src/ImageSharp/ColorSpaces/Hsv.cs index 8ccc74ae0..76ed552be 100644 --- a/src/ImageSharp/ColorSpaces/Hsv.cs +++ b/src/ImageSharp/ColorSpaces/Hsv.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/HunterLab.cs b/src/ImageSharp/ColorSpaces/HunterLab.cs index 402761d8c..ca1d9eeef 100644 --- a/src/ImageSharp/ColorSpaces/HunterLab.cs +++ b/src/ImageSharp/ColorSpaces/HunterLab.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Illuminants.cs b/src/ImageSharp/ColorSpaces/Illuminants.cs index d5c1b3eed..de77f6eee 100644 --- a/src/ImageSharp/ColorSpaces/Illuminants.cs +++ b/src/ImageSharp/ColorSpaces/Illuminants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.ColorSpaces { diff --git a/src/ImageSharp/ColorSpaces/LinearRgb.cs b/src/ImageSharp/ColorSpaces/LinearRgb.cs index c120ef114..135185998 100644 --- a/src/ImageSharp/ColorSpaces/LinearRgb.cs +++ b/src/ImageSharp/ColorSpaces/LinearRgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Lms.cs b/src/ImageSharp/ColorSpaces/Lms.cs index 0ee56abbc..0718398c6 100644 --- a/src/ImageSharp/ColorSpaces/Lms.cs +++ b/src/ImageSharp/ColorSpaces/Lms.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Rgb.cs b/src/ImageSharp/ColorSpaces/Rgb.cs index 3c26b7733..8d6db080a 100644 --- a/src/ImageSharp/ColorSpaces/Rgb.cs +++ b/src/ImageSharp/ColorSpaces/Rgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs b/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs index 152c7ee0b..ec6db8bb1 100644 --- a/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs +++ b/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.ColorSpaces.Companding; using SixLabors.ImageSharp.ColorSpaces.Conversion; diff --git a/src/ImageSharp/ColorSpaces/YCbCr.cs b/src/ImageSharp/ColorSpaces/YCbCr.cs index b0563bb89..3f5d63159 100644 --- a/src/ImageSharp/ColorSpaces/YCbCr.cs +++ b/src/ImageSharp/ColorSpaces/YCbCr.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Constants.cs b/src/ImageSharp/Common/Constants.cs index a8a693fa6..57b1b904c 100644 --- a/src/ImageSharp/Common/Constants.cs +++ b/src/ImageSharp/Common/Constants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/Common/Exceptions/ImageFormatException.cs b/src/ImageSharp/Common/Exceptions/ImageFormatException.cs index 4028b70b0..25ed4b589 100644 --- a/src/ImageSharp/Common/Exceptions/ImageFormatException.cs +++ b/src/ImageSharp/Common/Exceptions/ImageFormatException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs b/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs index ccd0b71e5..9e225b5c1 100644 --- a/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs +++ b/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs index 8be13919f..34d3c658d 100644 --- a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs +++ b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs b/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs index 82aa8cf09..6936852e4 100644 --- a/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs +++ b/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/Common/Extensions/ComparableExtensions.cs b/src/ImageSharp/Common/Extensions/ComparableExtensions.cs index 1fe2a24c7..e9dfc4bc9 100644 --- a/src/ImageSharp/Common/Extensions/ComparableExtensions.cs +++ b/src/ImageSharp/Common/Extensions/ComparableExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs b/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs index 64532af27..66bd63972 100644 --- a/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs +++ b/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Threading.Tasks; diff --git a/src/ImageSharp/Common/Extensions/EncoderExtensions.cs b/src/ImageSharp/Common/Extensions/EncoderExtensions.cs index 87aaa93a9..17c72161f 100644 --- a/src/ImageSharp/Common/Extensions/EncoderExtensions.cs +++ b/src/ImageSharp/Common/Extensions/EncoderExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #if !SUPPORTS_ENCODING_STRING using System; diff --git a/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs b/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs index 983a1eb8b..2365bd86c 100644 --- a/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs +++ b/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Common/Extensions/StreamExtensions.cs b/src/ImageSharp/Common/Extensions/StreamExtensions.cs index 5d8668257..1eff9d7e9 100644 --- a/src/ImageSharp/Common/Extensions/StreamExtensions.cs +++ b/src/ImageSharp/Common/Extensions/StreamExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs b/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs index 312ab388d..d81c821ef 100644 --- a/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs +++ b/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/DebugGuard.cs b/src/ImageSharp/Common/Helpers/DebugGuard.cs index 356dd419b..f793e8165 100644 --- a/src/ImageSharp/Common/Helpers/DebugGuard.cs +++ b/src/ImageSharp/Common/Helpers/DebugGuard.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs b/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs index 462eeb302..7febb3e9b 100644 --- a/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs +++ b/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/EnumUtils.cs b/src/ImageSharp/Common/Helpers/EnumUtils.cs index a98b7f84c..6dcfdb0ad 100644 --- a/src/ImageSharp/Common/Helpers/EnumUtils.cs +++ b/src/ImageSharp/Common/Helpers/EnumUtils.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Common/Helpers/Guard.cs b/src/ImageSharp/Common/Helpers/Guard.cs index 3ab1b199a..1e6e97122 100644 --- a/src/ImageSharp/Common/Helpers/Guard.cs +++ b/src/ImageSharp/Common/Helpers/Guard.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/src/ImageSharp/Common/Helpers/ImageMaths.cs b/src/ImageSharp/Common/Helpers/ImageMaths.cs index fb1f88a2d..c88aaba76 100644 --- a/src/ImageSharp/Common/Helpers/ImageMaths.cs +++ b/src/ImageSharp/Common/Helpers/ImageMaths.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/InliningOptions.cs b/src/ImageSharp/Common/Helpers/InliningOptions.cs index 895b6250f..d3600d4dd 100644 --- a/src/ImageSharp/Common/Helpers/InliningOptions.cs +++ b/src/ImageSharp/Common/Helpers/InliningOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // Uncomment this for verbose profiler results. DO NOT PUSH TO MAIN! // #define PROFILING diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs b/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs index ea1ffba05..96fbdf124 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #if SUPPORTS_RUNTIME_INTRINSICS diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs b/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs index 1099678f7..da6714325 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs b/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs index 69d5dfa73..7df12d5e2 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs b/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs index f16c91b40..3a9cf4631 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.cs b/src/ImageSharp/Common/Helpers/SimdUtils.cs index 0dc45d887..054dbed59 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Common/Helpers/TestHelpers.cs b/src/ImageSharp/Common/Helpers/TestHelpers.cs index c6574e4b5..d1da2def5 100644 --- a/src/ImageSharp/Common/Helpers/TestHelpers.cs +++ b/src/ImageSharp/Common/Helpers/TestHelpers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Common.Helpers { diff --git a/src/ImageSharp/Common/Helpers/TolerantMath.cs b/src/ImageSharp/Common/Helpers/TolerantMath.cs index 62b564472..0415ee1e9 100644 --- a/src/ImageSharp/Common/Helpers/TolerantMath.cs +++ b/src/ImageSharp/Common/Helpers/TolerantMath.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Common/Helpers/UnitConverter.cs b/src/ImageSharp/Common/Helpers/UnitConverter.cs index 9e4306170..b353e303c 100644 --- a/src/ImageSharp/Common/Helpers/UnitConverter.cs +++ b/src/ImageSharp/Common/Helpers/UnitConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Common/Helpers/Vector4Utilities.cs b/src/ImageSharp/Common/Helpers/Vector4Utilities.cs index 9fb4eb790..eee8c49c6 100644 --- a/src/ImageSharp/Common/Helpers/Vector4Utilities.cs +++ b/src/ImageSharp/Common/Helpers/Vector4Utilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Tuples/Octet{T}.cs b/src/ImageSharp/Common/Tuples/Octet{T}.cs index 71e7da801..c0bec254a 100644 --- a/src/ImageSharp/Common/Tuples/Octet{T}.cs +++ b/src/ImageSharp/Common/Tuples/Octet{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Common/Tuples/Vector4Pair.cs b/src/ImageSharp/Common/Tuples/Vector4Pair.cs index 1fdae0d5d..123f838b3 100644 --- a/src/ImageSharp/Common/Tuples/Vector4Pair.cs +++ b/src/ImageSharp/Common/Tuples/Vector4Pair.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Configuration.cs b/src/ImageSharp/Configuration.cs index 17ac8c3fd..1aeea3b7a 100644 --- a/src/ImageSharp/Configuration.cs +++ b/src/ImageSharp/Configuration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs b/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs index e8afb422a..bc33dbb89 100644 --- a/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs +++ b/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs b/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs index 6e1145beb..f126863e6 100644 --- a/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs +++ b/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpCompression.cs b/src/ImageSharp/Formats/Bmp/BmpCompression.cs index 81a76e28d..2381a501d 100644 --- a/src/ImageSharp/Formats/Bmp/BmpCompression.cs +++ b/src/ImageSharp/Formats/Bmp/BmpCompression.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs b/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs index 57117cc07..ff6782f09 100644 --- a/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs +++ b/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpConstants.cs b/src/ImageSharp/Formats/Bmp/BmpConstants.cs index 5cbed4af2..be577556d 100644 --- a/src/ImageSharp/Formats/Bmp/BmpConstants.cs +++ b/src/ImageSharp/Formats/Bmp/BmpConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs index cafe10106..6547fe76a 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs index eeb1ae714..0661f3145 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs index 9c05ae2d5..fbc94a73f 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs index 2d6b623a1..cc07c4d87 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs b/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs index 16421cfb0..784e6393e 100644 --- a/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs +++ b/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs b/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs index 4abcaa3a0..0ad003037 100644 --- a/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs +++ b/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpFormat.cs b/src/ImageSharp/Formats/Bmp/BmpFormat.cs index 056fbe840..36ae5e10b 100644 --- a/src/ImageSharp/Formats/Bmp/BmpFormat.cs +++ b/src/ImageSharp/Formats/Bmp/BmpFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs b/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs index e1fc9ef1f..dce32ace9 100644 --- a/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs b/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs index 3411de042..0c4289b32 100644 --- a/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs +++ b/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs b/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs index a92a19d9b..d4880fd40 100644 --- a/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs +++ b/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpMetadata.cs b/src/ImageSharp/Formats/Bmp/BmpMetadata.cs index 83d4eefe4..396806d22 100644 --- a/src/ImageSharp/Formats/Bmp/BmpMetadata.cs +++ b/src/ImageSharp/Formats/Bmp/BmpMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs b/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs index c48566f83..900c78872 100644 --- a/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs +++ b/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs b/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs index f456f2ba3..bf2560067 100644 --- a/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs +++ b/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs b/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs index 59ad929df..4bbf5b87b 100644 --- a/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs +++ b/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Formats/Bmp/ImageExtensions.cs b/src/ImageSharp/Formats/Bmp/ImageExtensions.cs index 0c37907c2..cfbac8e4e 100644 --- a/src/ImageSharp/Formats/Bmp/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Bmp/ImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs b/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs index 0315b3c76..c50545e88 100644 --- a/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Bmp; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs b/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs index 493fe366a..3641c7fe8 100644 --- a/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs +++ b/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Gif/GifColorTableMode.cs b/src/ImageSharp/Formats/Gif/GifColorTableMode.cs index 95b333562..68f084de4 100644 --- a/src/ImageSharp/Formats/Gif/GifColorTableMode.cs +++ b/src/ImageSharp/Formats/Gif/GifColorTableMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs b/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs index 861d3e036..4656629b9 100644 --- a/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs +++ b/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifConstants.cs b/src/ImageSharp/Formats/Gif/GifConstants.cs index 06c4b3fc6..410164fbc 100644 --- a/src/ImageSharp/Formats/Gif/GifConstants.cs +++ b/src/ImageSharp/Formats/Gif/GifConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index 553163bd7..faa2498d1 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index 2d8bd319d..81aa55695 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs b/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs index 982340db6..872ab3360 100644 --- a/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs +++ b/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index e95a1ae32..762fc03fc 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs index 0f2063060..34c92a180 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Gif/GifFormat.cs b/src/ImageSharp/Formats/Gif/GifFormat.cs index abe87819c..e3122c96e 100644 --- a/src/ImageSharp/Formats/Gif/GifFormat.cs +++ b/src/ImageSharp/Formats/Gif/GifFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs b/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs index dfc96af5a..530e368ef 100644 --- a/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs +++ b/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs b/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs index b8f9a03f1..735be07d9 100644 --- a/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Gif/GifMetadata.cs b/src/ImageSharp/Formats/Gif/GifMetadata.cs index 5fe86c4dd..1a1e90fe6 100644 --- a/src/ImageSharp/Formats/Gif/GifMetadata.cs +++ b/src/ImageSharp/Formats/Gif/GifMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs index 1b20c9f64..dd189ae03 100644 --- a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs +++ b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs b/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs index 050ab170b..5bd530bba 100644 --- a/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs +++ b/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs index 151e1a23d..cdb6c7260 100644 --- a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs +++ b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Gif/ImageExtensions.cs b/src/ImageSharp/Formats/Gif/ImageExtensions.cs index c7ac001ff..cc08976e2 100644 --- a/src/ImageSharp/Formats/Gif/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Gif/ImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/Gif/LzwDecoder.cs b/src/ImageSharp/Formats/Gif/LzwDecoder.cs index 8289ee75b..337118a5d 100644 --- a/src/ImageSharp/Formats/Gif/LzwDecoder.cs +++ b/src/ImageSharp/Formats/Gif/LzwDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Gif/LzwEncoder.cs b/src/ImageSharp/Formats/Gif/LzwEncoder.cs index 516b82396..004c3cb20 100644 --- a/src/ImageSharp/Formats/Gif/LzwEncoder.cs +++ b/src/ImageSharp/Formats/Gif/LzwEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Gif/MetadataExtensions.cs b/src/ImageSharp/Formats/Gif/MetadataExtensions.cs index 7c432d26f..a504ffdf5 100644 --- a/src/ImageSharp/Formats/Gif/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Gif/MetadataExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs b/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs index cb548d687..e5a8b8eba 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs b/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs index c3504dfe7..c7cdb44ad 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs b/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs index 1cfec4763..71a661a66 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs b/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs index 5e26370ba..251f262b7 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs b/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs index c8bd28674..efeb0e602 100644 --- a/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs +++ b/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/IImageDecoder.cs b/src/ImageSharp/Formats/IImageDecoder.cs index 7a7fc4b26..4f17f6729 100644 --- a/src/ImageSharp/Formats/IImageDecoder.cs +++ b/src/ImageSharp/Formats/IImageDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/IImageEncoder.cs b/src/ImageSharp/Formats/IImageEncoder.cs index d5ff4b93c..01478eb3e 100644 --- a/src/ImageSharp/Formats/IImageEncoder.cs +++ b/src/ImageSharp/Formats/IImageEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/IImageFormat.cs b/src/ImageSharp/Formats/IImageFormat.cs index bd0d6357c..de49afffb 100644 --- a/src/ImageSharp/Formats/IImageFormat.cs +++ b/src/ImageSharp/Formats/IImageFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/IImageFormatDetector.cs b/src/ImageSharp/Formats/IImageFormatDetector.cs index becd8200c..8d5f0677f 100644 --- a/src/ImageSharp/Formats/IImageFormatDetector.cs +++ b/src/ImageSharp/Formats/IImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/IImageInfoDetector.cs b/src/ImageSharp/Formats/IImageInfoDetector.cs index b7769e895..2bd33c616 100644 --- a/src/ImageSharp/Formats/IImageInfoDetector.cs +++ b/src/ImageSharp/Formats/IImageInfoDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/ImageFormatManager.cs b/src/ImageSharp/Formats/ImageFormatManager.cs index e34155706..f4f4c1b10 100644 --- a/src/ImageSharp/Formats/ImageFormatManager.cs +++ b/src/ImageSharp/Formats/ImageFormatManager.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Concurrent; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs index acde84c91..0879aaaeb 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs index 8e14ed2c3..5fe2b3ba3 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt index a1a6b0172..7a7f35e30 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt @@ -1,6 +1,6 @@ <# // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -9,7 +9,7 @@ <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs index 82a013f70..48ca39163 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs index 70a34ddcf..713f21d2a 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs index e34af9825..a3e787470 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs index f106d67ad..56fb32fb9 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs index 68ab6f912..007ca5a8f 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs index 7a92a4ed4..a36942c52 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs index a646cd6cf..47a96afd1 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs index 002f79f84..c9c740716 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs index 8c1b427ee..663ed44e8 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs index f1d773708..562fa8f44 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs index 7ada1b9da..af7b21fb0 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs index 34fe1aecb..09adbc44e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.IO; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs index fbb2b5272..bc68fb3b0 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs index 602593016..b5f4f1b31 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs index 169b02e9f..d77b0e864 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs index 8075fd4ba..7ee8a4b15 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs index 44878bd6c..8a1389842 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs index db4b6a532..8bd15ea12 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs index aa33744ad..f7332852d 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs index 622c34e9b..f254f9e86 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs index d9fd9ac8b..aa3ba9c4c 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs index d2b0ee26e..389632cae 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs index f426eb1b1..7fc3f0d97 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs index 5352a0bff..93de973d5 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs index 325d7780a..c8ec92f97 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs index a7d2a0fde..c304c00b6 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs index 7a312138d..714c4f823 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs index 633d7ea80..6f5d4700d 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs index a31c4bf2f..a92e06dac 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs index 2e2ee9575..acf25a120 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs index d0933af0c..204652b7e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs index cb0810985..8ae50a167 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs index ba604e891..38a955f65 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs b/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs index dcdc7e9ba..26c709d5e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs index 0cc729371..69c634c35 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // namespace SixLabors.ImageSharp.Formats.Jpeg.Components diff --git a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt index 28bcea791..4afd1f72d 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt +++ b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt @@ -1,6 +1,6 @@ <# // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -9,7 +9,7 @@ <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // namespace SixLabors.ImageSharp.Formats.Jpeg.Components diff --git a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs index 534c66b99..d72c6f17e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs b/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs index 8c3daa4d5..971890924 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs b/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs index 94771aa64..f3e797228 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs b/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs index 669abad28..801867d56 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs b/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs index ef7b377d2..dc0971e51 100644 --- a/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs +++ b/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs b/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs index 53108de93..5f1a2a99c 100644 --- a/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs +++ b/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs b/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs index 7fec050b4..36c6d5615 100644 --- a/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs b/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs index 9840a2ae8..6719f5498 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/JpegConstants.cs b/src/ImageSharp/Formats/Jpeg/JpegConstants.cs index 9f50e2cab..30a0e4a00 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegConstants.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs index e60901d91..97f455c6f 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 654610659..a754bfd2e 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs index 1c4035a98..9f3d04a8a 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs index eed95c6b0..21bf538ec 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Jpeg/JpegFormat.cs b/src/ImageSharp/Formats/Jpeg/JpegFormat.cs index f56072a4b..4d9899f7a 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegFormat.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs b/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs index 7594f4477..c3b938348 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs b/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs index 9f0deae02..85506c170 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs b/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs index 855815705..71aa0ca22 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs index da4c3f9ee..2850fd968 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs b/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs index 53a9d2a35..79383902c 100644 --- a/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/PixelTypeInfo.cs b/src/ImageSharp/Formats/PixelTypeInfo.cs index 1683519c2..67d19d756 100644 --- a/src/ImageSharp/Formats/PixelTypeInfo.cs +++ b/src/ImageSharp/Formats/PixelTypeInfo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Adam7.cs b/src/ImageSharp/Formats/Png/Adam7.cs index b392332d7..4290e2ca0 100644 --- a/src/ImageSharp/Formats/Png/Adam7.cs +++ b/src/ImageSharp/Formats/Png/Adam7.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs b/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs index 8b3c3e9aa..f26f4262a 100644 --- a/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs +++ b/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs b/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs index bc5a54e8b..238e1934e 100644 --- a/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/FilterType.cs b/src/ImageSharp/Formats/Png/Filters/FilterType.cs index 83a005380..613288c63 100644 --- a/src/ImageSharp/Formats/Png/Filters/FilterType.cs +++ b/src/ImageSharp/Formats/Png/Filters/FilterType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png.Filters { diff --git a/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs b/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs index 97e16ef23..0d1122a3a 100644 --- a/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs b/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs index 4cd61e043..69b9c85af 100644 --- a/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/SubFilter.cs b/src/ImageSharp/Formats/Png/Filters/SubFilter.cs index e6fc1b6ae..85bbd90ea 100644 --- a/src/ImageSharp/Formats/Png/Filters/SubFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/SubFilter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/UpFilter.cs b/src/ImageSharp/Formats/Png/Filters/UpFilter.cs index 5d9dc6a89..2f0e0dc19 100644 --- a/src/ImageSharp/Formats/Png/Filters/UpFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/UpFilter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs b/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs index e3036d4bd..27ef8cc5a 100644 --- a/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 0b27539c2..741ec825d 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Formats/Png/ImageExtensions.cs b/src/ImageSharp/Formats/Png/ImageExtensions.cs index af56830f4..bdbddd0c6 100644 --- a/src/ImageSharp/Formats/Png/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Png/ImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/Png/MetadataExtensions.cs b/src/ImageSharp/Formats/Png/MetadataExtensions.cs index 762a6c40c..24274531c 100644 --- a/src/ImageSharp/Formats/Png/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Png/MetadataExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Png/PngBitDepth.cs b/src/ImageSharp/Formats/Png/PngBitDepth.cs index 0321b532a..1af76e746 100644 --- a/src/ImageSharp/Formats/Png/PngBitDepth.cs +++ b/src/ImageSharp/Formats/Png/PngBitDepth.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // Note the value assignment, This will allow us to add 1, 2, and 4 bit encoding when we support it. namespace SixLabors.ImageSharp.Formats.Png diff --git a/src/ImageSharp/Formats/Png/PngChunk.cs b/src/ImageSharp/Formats/Png/PngChunk.cs index 7d8498ab7..1d0337f4f 100644 --- a/src/ImageSharp/Formats/Png/PngChunk.cs +++ b/src/ImageSharp/Formats/Png/PngChunk.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Png/PngChunkType.cs b/src/ImageSharp/Formats/Png/PngChunkType.cs index 015f6984d..2dd9cc8b5 100644 --- a/src/ImageSharp/Formats/Png/PngChunkType.cs +++ b/src/ImageSharp/Formats/Png/PngChunkType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngColorType.cs b/src/ImageSharp/Formats/Png/PngColorType.cs index fc376ca16..59a6de335 100644 --- a/src/ImageSharp/Formats/Png/PngColorType.cs +++ b/src/ImageSharp/Formats/Png/PngColorType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngCompressionLevel.cs b/src/ImageSharp/Formats/Png/PngCompressionLevel.cs index 1d93884a3..74c967544 100644 --- a/src/ImageSharp/Formats/Png/PngCompressionLevel.cs +++ b/src/ImageSharp/Formats/Png/PngCompressionLevel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngConfigurationModule.cs b/src/ImageSharp/Formats/Png/PngConfigurationModule.cs index 3c9fddbad..3acbfd87a 100644 --- a/src/ImageSharp/Formats/Png/PngConfigurationModule.cs +++ b/src/ImageSharp/Formats/Png/PngConfigurationModule.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngConstants.cs b/src/ImageSharp/Formats/Png/PngConstants.cs index 247bb3c75..60f38dda8 100644 --- a/src/ImageSharp/Formats/Png/PngConstants.cs +++ b/src/ImageSharp/Formats/Png/PngConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs index eceb4e592..b2e243997 100644 --- a/src/ImageSharp/Formats/Png/PngDecoder.cs +++ b/src/ImageSharp/Formats/Png/PngDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index a5bcff3b2..d6ba08895 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 95c02b348..bee021550 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 34d5ee773..c15038847 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs index 78cd5d874..e54d5864a 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index a6ac86d54..5545f2c6e 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs index 99e64c2fb..33456eec5 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Png/PngFilterMethod.cs b/src/ImageSharp/Formats/Png/PngFilterMethod.cs index e16c1234f..aa1899494 100644 --- a/src/ImageSharp/Formats/Png/PngFilterMethod.cs +++ b/src/ImageSharp/Formats/Png/PngFilterMethod.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngFormat.cs b/src/ImageSharp/Formats/Png/PngFormat.cs index 408e37802..a0f493b95 100644 --- a/src/ImageSharp/Formats/Png/PngFormat.cs +++ b/src/ImageSharp/Formats/Png/PngFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Png/PngHeader.cs b/src/ImageSharp/Formats/Png/PngHeader.cs index ea43ba96a..3844a15aa 100644 --- a/src/ImageSharp/Formats/Png/PngHeader.cs +++ b/src/ImageSharp/Formats/Png/PngHeader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs b/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs index 5deed86e3..c294aab3f 100644 --- a/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngInterlaceMode.cs b/src/ImageSharp/Formats/Png/PngInterlaceMode.cs index e8c2db147..6516b8473 100644 --- a/src/ImageSharp/Formats/Png/PngInterlaceMode.cs +++ b/src/ImageSharp/Formats/Png/PngInterlaceMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngMetadata.cs b/src/ImageSharp/Formats/Png/PngMetadata.cs index 1e4567548..d3b34fbd7 100644 --- a/src/ImageSharp/Formats/Png/PngMetadata.cs +++ b/src/ImageSharp/Formats/Png/PngMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs b/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs index cf365c8b9..ef3a8034e 100644 --- a/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs +++ b/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngTextData.cs b/src/ImageSharp/Formats/Png/PngTextData.cs index 21171487e..5b5e4b8ab 100644 --- a/src/ImageSharp/Formats/Png/PngTextData.cs +++ b/src/ImageSharp/Formats/Png/PngTextData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Png/PngThrowHelper.cs b/src/ImageSharp/Formats/Png/PngThrowHelper.cs index a72a4a0d8..61e986d06 100644 --- a/src/ImageSharp/Formats/Png/PngThrowHelper.cs +++ b/src/ImageSharp/Formats/Png/PngThrowHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index c4dc82a4d..3a5a37ce2 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs index 77355e908..bc3811b5d 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs b/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs index 5f62b13c7..c2296e013 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/Deflater.cs b/src/ImageSharp/Formats/Png/Zlib/Deflater.cs index 2083edab1..c99a4c351 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Deflater.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Deflater.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs index a3a87a32f..62943a5ae 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // using System; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs index c1c86a98b..11b39efb5 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs index 022d3d4d0..4d1be0fc4 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs index a777e6f7d..11e566739 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs index 0414ca2f8..095cb33cc 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs b/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs index da5deb49e..018508295 100644 --- a/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs +++ b/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs index 182933033..4f757e4c9 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs index 3eb34b861..387ff9301 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs b/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs index e99e8b0c8..3d99f136f 100644 --- a/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs +++ b/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs b/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs index 49983d236..b85431e51 100644 --- a/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs +++ b/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/ImageExtensions.cs b/src/ImageSharp/Formats/Tga/ImageExtensions.cs index 286f04a22..3f9bdacec 100644 --- a/src/ImageSharp/Formats/Tga/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Tga/ImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/Tga/MetadataExtensions.cs b/src/ImageSharp/Formats/Tga/MetadataExtensions.cs index 2b0e405e7..e8af82a0e 100644 --- a/src/ImageSharp/Formats/Tga/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Tga/MetadataExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Tga; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs b/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs index a0666fa84..0bba5a4d5 100644 --- a/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs +++ b/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaCompression.cs b/src/ImageSharp/Formats/Tga/TgaCompression.cs index cc6e005ed..2686afd5b 100644 --- a/src/ImageSharp/Formats/Tga/TgaCompression.cs +++ b/src/ImageSharp/Formats/Tga/TgaCompression.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs b/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs index 18fbf4acd..13bcc54c6 100644 --- a/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs +++ b/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaConstants.cs b/src/ImageSharp/Formats/Tga/TgaConstants.cs index 5aabe92a1..ec84fa451 100644 --- a/src/ImageSharp/Formats/Tga/TgaConstants.cs +++ b/src/ImageSharp/Formats/Tga/TgaConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index 64dbdf58a..abfaba629 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index 057ec1bfc..ead053572 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Tga/TgaEncoder.cs b/src/ImageSharp/Formats/Tga/TgaEncoder.cs index e938067a1..6280b2ae6 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs index 94bd367aa..aee3a26cc 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Tga/TgaFileHeader.cs b/src/ImageSharp/Formats/Tga/TgaFileHeader.cs index e2bbb6fbd..452c7e4c5 100644 --- a/src/ImageSharp/Formats/Tga/TgaFileHeader.cs +++ b/src/ImageSharp/Formats/Tga/TgaFileHeader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Tga/TgaFormat.cs b/src/ImageSharp/Formats/Tga/TgaFormat.cs index badb1d77a..0afdb3075 100644 --- a/src/ImageSharp/Formats/Tga/TgaFormat.cs +++ b/src/ImageSharp/Formats/Tga/TgaFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs b/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs index af40c333b..300172f6c 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs b/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs index 06d7b5945..6e311a525 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaImageType.cs b/src/ImageSharp/Formats/Tga/TgaImageType.cs index 491fd3ea7..4ee95ccb5 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageType.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors. ImageSharp.Formats.Tga diff --git a/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs b/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs index 6a30cdddd..b8b8b75c4 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaMetadata.cs b/src/ImageSharp/Formats/Tga/TgaMetadata.cs index 69dee768a..17225ea0c 100644 --- a/src/ImageSharp/Formats/Tga/TgaMetadata.cs +++ b/src/ImageSharp/Formats/Tga/TgaMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs index fc158e781..c6df287d8 100644 --- a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs +++ b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/GeometryUtilities.cs b/src/ImageSharp/GeometryUtilities.cs index 00fa5b97f..4e82442f6 100644 --- a/src/ImageSharp/GeometryUtilities.cs +++ b/src/ImageSharp/GeometryUtilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs b/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs index c8beea8e8..4912f55c8 100644 --- a/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs +++ b/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Processing; diff --git a/src/ImageSharp/GraphicsOptions.cs b/src/ImageSharp/GraphicsOptions.cs index 47b930e65..8c3060547 100644 --- a/src/ImageSharp/GraphicsOptions.cs +++ b/src/ImageSharp/GraphicsOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/IConfigurationModule.cs b/src/ImageSharp/IConfigurationModule.cs index 3ca8ed918..a47bb89bb 100644 --- a/src/ImageSharp/IConfigurationModule.cs +++ b/src/ImageSharp/IConfigurationModule.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/IDeepCloneable.cs b/src/ImageSharp/IDeepCloneable.cs index f80247a5d..caf837b66 100644 --- a/src/ImageSharp/IDeepCloneable.cs +++ b/src/ImageSharp/IDeepCloneable.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/IImage.cs b/src/ImageSharp/IImage.cs index 0d4dc3c9d..8e9df0108 100644 --- a/src/ImageSharp/IImage.cs +++ b/src/ImageSharp/IImage.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/IImageInfo.cs b/src/ImageSharp/IImageInfo.cs index b270c2c4d..92ff5c5c3 100644 --- a/src/ImageSharp/IImageInfo.cs +++ b/src/ImageSharp/IImageInfo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/IO/DoubleBufferedStreamReader.cs b/src/ImageSharp/IO/DoubleBufferedStreamReader.cs index 0345717d2..f0d9620eb 100644 --- a/src/ImageSharp/IO/DoubleBufferedStreamReader.cs +++ b/src/ImageSharp/IO/DoubleBufferedStreamReader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/IO/IFileSystem.cs b/src/ImageSharp/IO/IFileSystem.cs index 9dc97afb6..75d844dab 100644 --- a/src/ImageSharp/IO/IFileSystem.cs +++ b/src/ImageSharp/IO/IFileSystem.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/IO/LocalFileSystem.cs b/src/ImageSharp/IO/LocalFileSystem.cs index 11f3d7972..4a3b68ea9 100644 --- a/src/ImageSharp/IO/LocalFileSystem.cs +++ b/src/ImageSharp/IO/LocalFileSystem.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index c28a21452..cb6f01ce4 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Image.FromBytes.cs b/src/ImageSharp/Image.FromBytes.cs index a0e8097d8..3cd6228a1 100644 --- a/src/ImageSharp/Image.FromBytes.cs +++ b/src/ImageSharp/Image.FromBytes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Image.FromFile.cs b/src/ImageSharp/Image.FromFile.cs index 8546dd270..91b6ca3a7 100644 --- a/src/ImageSharp/Image.FromFile.cs +++ b/src/ImageSharp/Image.FromFile.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 332ca471e..bcd11845b 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Image.LoadPixelData.cs b/src/ImageSharp/Image.LoadPixelData.cs index f36243cc3..8b827f170 100644 --- a/src/ImageSharp/Image.LoadPixelData.cs +++ b/src/ImageSharp/Image.LoadPixelData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Image.WrapMemory.cs b/src/ImageSharp/Image.WrapMemory.cs index 0dd8c814d..03b5cb9a0 100644 --- a/src/ImageSharp/Image.WrapMemory.cs +++ b/src/ImageSharp/Image.WrapMemory.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Image.cs b/src/ImageSharp/Image.cs index b1cefdf1d..c43a20842 100644 --- a/src/ImageSharp/Image.cs +++ b/src/ImageSharp/Image.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/ImageExtensions.Internal.cs b/src/ImageSharp/ImageExtensions.Internal.cs index a1fc51043..65e2701a2 100644 --- a/src/ImageSharp/ImageExtensions.Internal.cs +++ b/src/ImageSharp/ImageExtensions.Internal.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs index e5b2a32a9..aa9030c6e 100644 --- a/src/ImageSharp/ImageExtensions.cs +++ b/src/ImageSharp/ImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/ImageFrame.LoadPixelData.cs b/src/ImageSharp/ImageFrame.LoadPixelData.cs index e6035a177..a5a792472 100644 --- a/src/ImageSharp/ImageFrame.LoadPixelData.cs +++ b/src/ImageSharp/ImageFrame.LoadPixelData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/ImageFrame.cs b/src/ImageSharp/ImageFrame.cs index 93fa20587..38c853fd7 100644 --- a/src/ImageSharp/ImageFrame.cs +++ b/src/ImageSharp/ImageFrame.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/ImageFrameCollection.cs b/src/ImageSharp/ImageFrameCollection.cs index c584d2d19..75b7fe84c 100644 --- a/src/ImageSharp/ImageFrameCollection.cs +++ b/src/ImageSharp/ImageFrameCollection.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections; diff --git a/src/ImageSharp/ImageFrameCollection{TPixel}.cs b/src/ImageSharp/ImageFrameCollection{TPixel}.cs index 89a1dfcc1..1e674198b 100644 --- a/src/ImageSharp/ImageFrameCollection{TPixel}.cs +++ b/src/ImageSharp/ImageFrameCollection{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections; diff --git a/src/ImageSharp/ImageFrame{TPixel}.cs b/src/ImageSharp/ImageFrame{TPixel}.cs index 0171f3d07..be4e988c6 100644 --- a/src/ImageSharp/ImageFrame{TPixel}.cs +++ b/src/ImageSharp/ImageFrame{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/ImageInfo.cs b/src/ImageSharp/ImageInfo.cs index 12dcf1ed7..baff7fd08 100644 --- a/src/ImageSharp/ImageInfo.cs +++ b/src/ImageSharp/ImageInfo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/ImageInfoExtensions.cs b/src/ImageSharp/ImageInfoExtensions.cs index abaa7c4bc..f87b19b1a 100644 --- a/src/ImageSharp/ImageInfoExtensions.cs +++ b/src/ImageSharp/ImageInfoExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/Image{TPixel}.cs b/src/ImageSharp/Image{TPixel}.cs index 2ab472853..7eda2050a 100644 --- a/src/ImageSharp/Image{TPixel}.cs +++ b/src/ImageSharp/Image{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/IndexedImageFrame{TPixel}.cs b/src/ImageSharp/IndexedImageFrame{TPixel}.cs index 07451029e..410cd7655 100644 --- a/src/ImageSharp/IndexedImageFrame{TPixel}.cs +++ b/src/ImageSharp/IndexedImageFrame{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/AllocationOptions.cs b/src/ImageSharp/Memory/Allocators/AllocationOptions.cs index 4edb702ed..7c97f08b3 100644 --- a/src/ImageSharp/Memory/Allocators/AllocationOptions.cs +++ b/src/ImageSharp/Memory/Allocators/AllocationOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Memory { diff --git a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs index f94359830..a468fecee 100644 --- a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs +++ b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs index 5ef60c9ed..b0ea00f5b 100644 --- a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs +++ b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Memory { diff --git a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs index 4a04cb5d6..57d8c0e45 100644 --- a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs +++ b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs b/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs index cb1f58ddb..ef17e6953 100644 --- a/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs +++ b/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs b/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs index 56057f372..d88e0bd5d 100644 --- a/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs +++ b/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs b/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs index 571ad70c5..b3ece76eb 100644 --- a/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs +++ b/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Memory.Internals { diff --git a/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs b/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs index 890963860..ca4483e3b 100644 --- a/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs +++ b/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs b/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs index a4e1de197..71564836b 100644 --- a/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs +++ b/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs b/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs index 4c62e4ded..5996d0c49 100644 --- a/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs +++ b/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; using SixLabors.ImageSharp.Memory.Internals; diff --git a/src/ImageSharp/Memory/Buffer2DExtensions.cs b/src/ImageSharp/Memory/Buffer2DExtensions.cs index 11c61f56c..56de1fd07 100644 --- a/src/ImageSharp/Memory/Buffer2DExtensions.cs +++ b/src/ImageSharp/Memory/Buffer2DExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Memory/Buffer2DRegion{T}.cs b/src/ImageSharp/Memory/Buffer2DRegion{T}.cs index b22307a1d..2a44a4b72 100644 --- a/src/ImageSharp/Memory/Buffer2DRegion{T}.cs +++ b/src/ImageSharp/Memory/Buffer2DRegion{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Memory/Buffer2D{T}.cs b/src/ImageSharp/Memory/Buffer2D{T}.cs index ada1d29b6..6c8741c5d 100644 --- a/src/ImageSharp/Memory/Buffer2D{T}.cs +++ b/src/ImageSharp/Memory/Buffer2D{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs index 3bb6b8d33..8f46ae3b8 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs index 1bc44e33e..64f7e368c 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs index 295f9190a..ca8123f6a 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs index 1698f08d1..d301b528d 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs index 1dfbaea93..3f21d768c 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs index 5a86ac426..041e5838a 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs index 6fd93f12e..f010855bc 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/InvalidMemoryOperationException.cs b/src/ImageSharp/Memory/InvalidMemoryOperationException.cs index c1d5c5d41..88df49bd3 100644 --- a/src/ImageSharp/Memory/InvalidMemoryOperationException.cs +++ b/src/ImageSharp/Memory/InvalidMemoryOperationException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs b/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs index 22d1bddd2..1595b0f48 100644 --- a/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs +++ b/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; diff --git a/src/ImageSharp/Memory/MemoryOwnerExtensions.cs b/src/ImageSharp/Memory/MemoryOwnerExtensions.cs index 6d4468f78..d86b1e784 100644 --- a/src/ImageSharp/Memory/MemoryOwnerExtensions.cs +++ b/src/ImageSharp/Memory/MemoryOwnerExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/RowInterval.cs b/src/ImageSharp/Memory/RowInterval.cs index c2962cfe9..4f3df7df5 100644 --- a/src/ImageSharp/Memory/RowInterval.cs +++ b/src/ImageSharp/Memory/RowInterval.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs b/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs index 31825b7b4..5e14e90f2 100644 --- a/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs +++ b/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs b/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs index 023606f52..e6981548b 100644 --- a/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs +++ b/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/FrameDecodingMode.cs b/src/ImageSharp/Metadata/FrameDecodingMode.cs index 835e43354..55cfdc6ab 100644 --- a/src/ImageSharp/Metadata/FrameDecodingMode.cs +++ b/src/ImageSharp/Metadata/FrameDecodingMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata { diff --git a/src/ImageSharp/Metadata/ImageFrameMetadata.cs b/src/ImageSharp/Metadata/ImageFrameMetadata.cs index 3858a7d0a..19b4d8aa6 100644 --- a/src/ImageSharp/Metadata/ImageFrameMetadata.cs +++ b/src/ImageSharp/Metadata/ImageFrameMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Formats; diff --git a/src/ImageSharp/Metadata/ImageMetadata.cs b/src/ImageSharp/Metadata/ImageMetadata.cs index 716e89e68..a9b2e9658 100644 --- a/src/ImageSharp/Metadata/ImageMetadata.cs +++ b/src/ImageSharp/Metadata/ImageMetadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Formats; diff --git a/src/ImageSharp/Metadata/PixelResolutionUnit.cs b/src/ImageSharp/Metadata/PixelResolutionUnit.cs index 661e7a308..d894ce877 100644 --- a/src/ImageSharp/Metadata/PixelResolutionUnit.cs +++ b/src/ImageSharp/Metadata/PixelResolutionUnit.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs index c58b224e4..f2c237094 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs index 74c86f721..d6273f0dc 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs index d94dc5640..870a7714a 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs index 6405a7ff2..189edf8ca 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs index 29c21d611..2c26cfd57 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs index 6ad8d24fa..1e944b999 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs index b9bb2ee05..c1f3aaf9a 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs index a4123d02f..38ef49197 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs index b00813730..70d2664ff 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs index dc33fd8b0..0f22d358a 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs index 2bfa8ff21..ef59c9d90 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs index 6cbae4c55..76482fb75 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs index 571b50efb..8f2fd3e62 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs index 120f2dab0..e164f3c62 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs index 6cea52b1a..9c3e30d50 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs index b515ab36a..ddc0d3b0f 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs index 2281dee49..a53f81579 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs index cf43a8a8a..741e40c7d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs index 7fe9a58bc..6bca94afd 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs index 90485f75a..f5a386cb8 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs index 29d61db88..00d29ad4a 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs index 9a6e3063b..954b544a6 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs index 506f87454..24a4789c1 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs index 5f4841226..4a2af0bff 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs index 65e031462..35a6fbab9 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs index f70bcea37..a35b3301c 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs index 5a674277a..6b727e8db 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs index 8f0b36638..51cab264a 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs index 263bf0934..3d1282ca4 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs index 184f4a07c..d55447ed7 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs index 854eafc76..83819844d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs index 0af5f47ce..2d0ac3a0f 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs index 259d5c98a..6157cffc9 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs index 8d6c41f58..4c53b36cf 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs index 7789bc3b5..3dfd2989d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs index 7f2f631a9..98d016af0 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs index e05f50bee..944cd6ceb 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs index ef7d20c85..a36eae16f 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs index 521cfc085..414996ed1 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs index 3ab77ab32..2afca7dba 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs index f78e363da..866e8d22b 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs index b11f3fc9f..c8837b82e 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs index 379338c10..39d0bac4d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs index a9cb013ca..8d18f8eb7 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs index b0d35cc8a..6da81f77b 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs index c1e6808bf..be5aef3d0 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs index 36d4c0007..e94f66b59 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs index 61fba979b..90c30501c 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs index 2545bd9b2..88927c548 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs index e00f5c085..a460f1407 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs index 403a50186..14bb59071 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs index 0678bc3e4..a4429de7d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs index 547e099c9..0c6f61d18 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs index 62d3f40ac..f5caf1583 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs index 601630af6..25b8d1dbb 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs index 50c421832..ca780448c 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs index 72b93ddf9..9631d780a 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs index 7bf1f8421..6880385d1 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs index d013f6ef1..ec2f9bd01 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs index cbb433012..36877916a 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs index 04a9faf7d..a6cedd530 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs index b9a50acd4..c55c145fd 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs index 4872bd2b0..30e9bf4b4 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs index 58ca46d81..4f9cebce4 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs index 0aa3c31e0..dd3c5020b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs index ecc33dd77..7541fe1e3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs index b854247da..7cbb146ec 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs index b5326225c..bbeb2f211 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs index 3f016444b..00c902339 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs index a30e45dde..91dd8bbc1 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs index 79542b85f..14ad06bb8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs index 4f03ed610..6a7564ec4 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs index 016bd8009..fd9310e74 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs index 585892e96..d03d17330 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs index 65490f180..2854fb3e8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs index ce80574ad..4af49e5db 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs index 6c49eb0c4..2053fed41 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Text; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs index b761f48ba..5577d7c24 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs index 17f15df71..9c72fa3e5 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs index 71e68f6af..e1306e689 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs index 721545df3..649e2700c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs index 14b2dd960..d42195cd1 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs index a620632da..5b58b74c2 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs index 9a5ae1805..a66556cbe 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs index de1f11636..57a25e254 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs index c8598b0e0..0428789e2 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs index 11e5985af..be43bc3ff 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs index 937324194..4849fa3af 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs index d7f78889d..2f216ff37 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs index fce08a3af..9d87d9548 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs index 035fd3d4d..07abc024f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs index 3d59192a7..db49aa4ce 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs index 9fbe5b5b5..fc1f3237c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs index b19641e0f..cb901028b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // ReSharper disable InconsistentNaming namespace SixLabors.ImageSharp.Metadata.Profiles.Icc diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs index 8ae241b44..301b7448f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs index b43ad52c4..ead39c3c5 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs index 0631892b6..414db39bf 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs index f93d22f3e..af3c7a3f0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs index fc8ebae5c..961a7f2cd 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs index 14c0a0467..fb5e8cac4 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs index d7a18579e..751020c3c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs b/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs index 019bf9202..3d031e25b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs index 7c5139475..53157b95e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Security.Cryptography; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs index 326dd351e..d5962318b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs index 30a6de40d..9c02f3a8c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs index 658d4c2f1..6bdd6b993 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs index 186f06df0..e1e181dc6 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs index c825a3535..f95236f29 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs index 7ee7f821d..4e68c411b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs index c6409e3c1..397a9c292 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs index d6f42aea7..1ad702da0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs index 668883e1a..0208220d9 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs index 24649d8b5..6bbee5b8d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs index 813271d48..072644827 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs index 4136b9a38..bed0446b1 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs index aff33ff82..881b14427 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs index bcf9d5c9e..998e8d920 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs index f2205cbad..43592cc9d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs index 6a0b6c05e..118f0d0bd 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Text; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs index 371397a6f..56c25a7c7 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs index 50bfca175..46e303896 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs index 8f7db49ad..d8d13a15e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs index 3a1859a1c..190265fe9 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs index 0dfaef7d4..223165acd 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs index 929a70ed8..b0f20a08b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs index ad3a9f2c3..68440870d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs index 34a027126..8c61f7744 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs index f2713e8ce..966b1cb6d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs index 4fd0cfcfb..457ee49b4 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs index 752d05aae..b384d10fe 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs index 7897c394f..9a5c108e9 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs index 06e52cb63..26dea9d1b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs index e9c8af9be..3db6afccb 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs index bf64e4fed..a9761a270 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs index 87d369f85..70d982f0b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs index 23e81fe99..0791cd77d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs index 6cf9e9154..0e6e82679 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs index 3e4a5ff3a..49cd4518e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs index 46799b16a..0c41770d7 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs index 9fbbf8bf5..7f5de5b88 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs index 09bec9b7a..7e18675d6 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs index 099916d89..94740250c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs index d28b6edc9..b0f2325a8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs index 0227983fa..feea43293 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs index 2b2893c38..fe60ca6da 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs index 1e7d53231..67f25934c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs index bd8f784ae..14c11cfa5 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs index db1feea9a..60fc7e54f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs index b2852c8a3..c8d097d38 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs index 9e0c6c40d..bacf3f22a 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs index 3c640ab03..c55a1849a 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs index c9b75903d..959269b4e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs index d630f015e..476f43c26 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs index 4a73f7e07..c113e8ddf 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs index 6bf420b49..7818229e1 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs index 859080263..ea9f3286c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs index 354442b47..7736255c3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs index 889dec41e..1ce66146e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs index b388fa5a4..d8f5b13fe 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index f138cc650..6e864db14 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index 7258a0291..68807918c 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs index 6b39769a7..525d90c89 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs index e63781012..a09239b8d 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Text; diff --git a/src/ImageSharp/PixelFormats/HalfTypeHelper.cs b/src/ImageSharp/PixelFormats/HalfTypeHelper.cs index e8cfaa462..3110e4599 100644 --- a/src/ImageSharp/PixelFormats/HalfTypeHelper.cs +++ b/src/ImageSharp/PixelFormats/HalfTypeHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs b/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs index 6775cbc58..47962ef20 100644 --- a/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs +++ b/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/PixelFormats/IPixel.cs b/src/ImageSharp/PixelFormats/IPixel.cs index 6d1c03e4b..5d4d3ff94 100644 --- a/src/ImageSharp/PixelFormats/IPixel.cs +++ b/src/ImageSharp/PixelFormats/IPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs b/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs index b2f6261ef..46f13f008 100644 --- a/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs +++ b/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.PixelFormats { diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs index f966de63c..6ad5af8e5 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt index a882de066..d2633ae3f 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt @@ -1,6 +1,6 @@ <# // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -9,7 +9,7 @@ <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs index 8184f1577..9a385937e 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt index be2beb2f8..1869eb3c9 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt @@ -1,6 +1,6 @@ <# // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -9,7 +9,7 @@ <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs index 97b4458af..54cf72ae8 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs b/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs index 244aba7de..17cd33d55 100644 --- a/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs +++ b/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs b/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs index a68f7d949..d3c0dc13d 100644 --- a/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs +++ b/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.PixelFormats { diff --git a/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs b/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs index eb64e532e..c5124ebe6 100644 --- a/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs +++ b/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs b/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs index 529041481..5d08ee69c 100644 --- a/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs +++ b/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs index 444221d88..114ed46b4 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs index 52f6bcaa1..925f0c301 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs index 0a2f58409..13a38e811 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs index 2659689bd..e2c24efdf 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs index 40c187eb2..0faaca257 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs index bbbf9145c..e1246f276 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs index d10d10b47..06f5532ef 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs index 49b4f4138..296bb3df1 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs index 83bc46d8e..8d0a86a12 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs index 8f21ef2d4..23b91c5f8 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs index 58a68bd03..7892a2de0 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs index 4def59ea1..251251842 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs index dd9a3ac10..e7bdb1ebe 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs index 6a5ec6971..95612035a 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs index 66e8d7dc0..3c4624c09 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs index e3f033008..0b01a215b 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs index face124a6..081f33573 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs index 6828079c2..cd6924733 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs index 6437b0409..0a621748e 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs index c48493faf..ac04da77b 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude index 076db616b..f8427ed53 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude @@ -4,7 +4,7 @@ <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs index 977df78b8..788cb4b59 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs index 1ecaa05da..dfd4aa838 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs index 35822779f..1575c8e5e 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs index 815ae6a4e..78bd8e4b8 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs index 37a028db2..5fb2834f6 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs index 104c2be45..410cd853e 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs index 98a6cdae4..3c5b60034 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs index 54effcb22..930d8d296 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs index a7b350d55..28d81a8b6 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs index 6be347bcc..672a86def 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs index 59433f17e..653aaafd5 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs index 60c401003..436711e91 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs index 6e4839fed..099ea2105 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs index dff8fe83f..ffc42ad1f 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs index 7ca47f838..de69ad172 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs index 0b0e9b1c1..aa66bbf66 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs index 43ec095a1..2a3cbf3aa 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs index 8e5f8f093..b9539bac3 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs index 0f9871244..fd59222fd 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs index 8a6f882c3..688e48824 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs index 526e831f8..16c7da0d3 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs index 135aa8d58..43b4649d4 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs index d1f4a11c7..2c620eeaa 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt index d24273964..286745a92 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt @@ -1,6 +1,6 @@ <# // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -97,7 +97,7 @@ #> // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs index 17af972a8..11a85cf88 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats.PixelBlenders; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs index 1e1047e2b..42d7992cf 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/PixelFormats/RgbaComponent.cs b/src/ImageSharp/PixelFormats/RgbaComponent.cs index 76df62c43..29f3ef4f1 100644 --- a/src/ImageSharp/PixelFormats/RgbaComponent.cs +++ b/src/ImageSharp/PixelFormats/RgbaComponent.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs b/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs index 12ec389b0..167103477 100644 --- a/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs +++ b/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers.Binary; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs index ac50dd8c4..614925f19 100644 --- a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs +++ b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs index 4ee645c20..e49efd5c3 100644 --- a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs +++ b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs index ba676b3b8..83edef064 100644 --- a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs +++ b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Primitives/ColorMatrix.cs b/src/ImageSharp/Primitives/ColorMatrix.cs index 09a2d17ae..24be37fad 100644 --- a/src/ImageSharp/Primitives/ColorMatrix.cs +++ b/src/ImageSharp/Primitives/ColorMatrix.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #pragma warning disable SA1117 // Parameters should be on same line or separate lines using System; diff --git a/src/ImageSharp/Primitives/Complex64.cs b/src/ImageSharp/Primitives/Complex64.cs index a5af3f2f7..4a3c564b8 100644 --- a/src/ImageSharp/Primitives/Complex64.cs +++ b/src/ImageSharp/Primitives/Complex64.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Primitives/ComplexVector4.cs b/src/ImageSharp/Primitives/ComplexVector4.cs index 5287ab23f..1cc1e8e68 100644 --- a/src/ImageSharp/Primitives/ComplexVector4.cs +++ b/src/ImageSharp/Primitives/ComplexVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Primitives/DenseMatrix{T}.cs b/src/ImageSharp/Primitives/DenseMatrix{T}.cs index 3fda03b77..4393e4e66 100644 --- a/src/ImageSharp/Primitives/DenseMatrix{T}.cs +++ b/src/ImageSharp/Primitives/DenseMatrix{T}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Primitives/LongRational.cs b/src/ImageSharp/Primitives/LongRational.cs index d0f56917e..248cb2e27 100644 --- a/src/ImageSharp/Primitives/LongRational.cs +++ b/src/ImageSharp/Primitives/LongRational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Matrix3x2Extensions.cs b/src/ImageSharp/Primitives/Matrix3x2Extensions.cs index 4ddbcc017..0675ff464 100644 --- a/src/ImageSharp/Primitives/Matrix3x2Extensions.cs +++ b/src/ImageSharp/Primitives/Matrix3x2Extensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Primitives/Number.cs b/src/ImageSharp/Primitives/Number.cs index 3d575e866..81adf1013 100644 --- a/src/ImageSharp/Primitives/Number.cs +++ b/src/ImageSharp/Primitives/Number.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Point.cs b/src/ImageSharp/Primitives/Point.cs index 96e73766b..6776e584d 100644 --- a/src/ImageSharp/Primitives/Point.cs +++ b/src/ImageSharp/Primitives/Point.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/PointF.cs b/src/ImageSharp/Primitives/PointF.cs index e43ad4daf..d8918a52c 100644 --- a/src/ImageSharp/Primitives/PointF.cs +++ b/src/ImageSharp/Primitives/PointF.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/Rational.cs b/src/ImageSharp/Primitives/Rational.cs index 212178a24..7c55d8f17 100644 --- a/src/ImageSharp/Primitives/Rational.cs +++ b/src/ImageSharp/Primitives/Rational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Rectangle.cs b/src/ImageSharp/Primitives/Rectangle.cs index d391057a9..eac5cf04c 100644 --- a/src/ImageSharp/Primitives/Rectangle.cs +++ b/src/ImageSharp/Primitives/Rectangle.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/RectangleF.cs b/src/ImageSharp/Primitives/RectangleF.cs index 354daa446..05af7b430 100644 --- a/src/ImageSharp/Primitives/RectangleF.cs +++ b/src/ImageSharp/Primitives/RectangleF.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/SignedRational.cs b/src/ImageSharp/Primitives/SignedRational.cs index 93a0ffe39..440fbd71e 100644 --- a/src/ImageSharp/Primitives/SignedRational.cs +++ b/src/ImageSharp/Primitives/SignedRational.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Size.cs b/src/ImageSharp/Primitives/Size.cs index effd657a6..099a56c43 100644 --- a/src/ImageSharp/Primitives/Size.cs +++ b/src/ImageSharp/Primitives/Size.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/SizeF.cs b/src/ImageSharp/Primitives/SizeF.cs index 7d9bc5814..ff8ea1950 100644 --- a/src/ImageSharp/Primitives/SizeF.cs +++ b/src/ImageSharp/Primitives/SizeF.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/ValueSize.cs b/src/ImageSharp/Primitives/ValueSize.cs index be2ccb725..996f0979d 100644 --- a/src/ImageSharp/Primitives/ValueSize.cs +++ b/src/ImageSharp/Primitives/ValueSize.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs b/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs index 3279d96e3..d4f376a31 100644 --- a/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs +++ b/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Binarization; diff --git a/src/ImageSharp/Processing/AffineTransformBuilder.cs b/src/ImageSharp/Processing/AffineTransformBuilder.cs index 1478d2951..66e46f683 100644 --- a/src/ImageSharp/Processing/AffineTransformBuilder.cs +++ b/src/ImageSharp/Processing/AffineTransformBuilder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/AnchorPositionMode.cs b/src/ImageSharp/Processing/AnchorPositionMode.cs index ef9c0fdaf..d492ed5e8 100644 --- a/src/ImageSharp/Processing/AnchorPositionMode.cs +++ b/src/ImageSharp/Processing/AnchorPositionMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/ColorBlindnessMode.cs b/src/ImageSharp/Processing/ColorBlindnessMode.cs index 2ff19e77e..78b54744f 100644 --- a/src/ImageSharp/Processing/ColorBlindnessMode.cs +++ b/src/ImageSharp/Processing/ColorBlindnessMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs b/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs index 714a45f5f..e65e44072 100644 --- a/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs +++ b/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/EdgeDetectionOperators.cs b/src/ImageSharp/Processing/EdgeDetectionOperators.cs index 1f3526760..e36df76bc 100644 --- a/src/ImageSharp/Processing/EdgeDetectionOperators.cs +++ b/src/ImageSharp/Processing/EdgeDetectionOperators.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs b/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs index 659b538fc..f52aab015 100644 --- a/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs b/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs index d4fe9b562..55fe2501b 100644 --- a/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Binarization; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs index 7e0b3df39..08ae60623 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs index 4534e474a..ba9b84f19 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs index 53b2d40b0..d1ce9cdf7 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs index 9c40d94ed..a8b7bf190 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs index 007fffb1a..7dd6823b8 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs b/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs index a04aa0df8..c595cc83b 100644 --- a/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs b/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs index 3c25bb7c4..048ccf1be 100644 --- a/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Drawing; diff --git a/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs b/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs index 521617281..aafab4b99 100644 --- a/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs b/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs index b622141b7..84c5cb422 100644 --- a/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs b/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs index f2a10532d..0639c5a16 100644 --- a/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs index 788677fc8..92abd0ff0 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs index 7bc441297..02d73d42a 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs index e214c5a16..33efccecf 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs index 4a3e460b8..3f05651df 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs index f89540e24..e395e2778 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs index 4125de832..00b0f4bb5 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs index ef1fa2a6e..d387fc7e3 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs index 0642db849..97acd1aa7 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs index eadbde7bc..7810e7c5c 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs index d68cb6aac..f50021dd3 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs index 3f8a67feb..5bff26f0c 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs index 2cf6085f3..386fa5fca 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs index ab75ea56b..d2c05765b 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs index f68c424bd..f3f0a82cc 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs index 629ba03e7..537d280d0 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs b/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs index 72962a3f9..a1e708993 100644 --- a/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Normalization; diff --git a/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs b/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs index 21e244f0a..10a570959 100644 --- a/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs b/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs index c3ce32e63..55fe83da0 100644 --- a/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs b/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs index b53880fc1..47b05ffe9 100644 --- a/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs b/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs index 45cff9398..fae679276 100644 --- a/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs b/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs index 86ccddd85..e160ee921 100644 --- a/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs index 984081dff..5a357375b 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs index 5fc8125ea..0afc3bf17 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs index de5296d83..ce9f65e96 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs index f6b3c0c37..7fd1198d5 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs index 33a6fc36d..f7e28cd73 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs index 882b17721..ff70c8f74 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs index 395462ae3..7eac4d0fa 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs index 0e4ad4066..09470a732 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs index 77a46af0d..e3efc8391 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs index ee8f3854e..d5adc2701 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Processing/FlipMode.cs b/src/ImageSharp/Processing/FlipMode.cs index 96cd38de4..56b8300ab 100644 --- a/src/ImageSharp/Processing/FlipMode.cs +++ b/src/ImageSharp/Processing/FlipMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/GrayscaleMode.cs b/src/ImageSharp/Processing/GrayscaleMode.cs index e42a2e633..42a3c0ae3 100644 --- a/src/ImageSharp/Processing/GrayscaleMode.cs +++ b/src/ImageSharp/Processing/GrayscaleMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/IImageProcessingContext.cs b/src/ImageSharp/Processing/IImageProcessingContext.cs index cb39766a9..8398f093e 100644 --- a/src/ImageSharp/Processing/IImageProcessingContext.cs +++ b/src/ImageSharp/Processing/IImageProcessingContext.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Processing.Processors; diff --git a/src/ImageSharp/Processing/IImageProcessingContextFactory.cs b/src/ImageSharp/Processing/IImageProcessingContextFactory.cs index 5394fac8b..d843d453b 100644 --- a/src/ImageSharp/Processing/IImageProcessingContextFactory.cs +++ b/src/ImageSharp/Processing/IImageProcessingContextFactory.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs b/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs index a39483b0d..38a1ef202 100644 --- a/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs +++ b/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/KnownDitherings.cs b/src/ImageSharp/Processing/KnownDitherings.cs index bb968d2ef..b5f670232 100644 --- a/src/ImageSharp/Processing/KnownDitherings.cs +++ b/src/ImageSharp/Processing/KnownDitherings.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/KnownFilterMatrices.cs b/src/ImageSharp/Processing/KnownFilterMatrices.cs index 268281e4f..1dadccfd9 100644 --- a/src/ImageSharp/Processing/KnownFilterMatrices.cs +++ b/src/ImageSharp/Processing/KnownFilterMatrices.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/KnownQuantizers.cs b/src/ImageSharp/Processing/KnownQuantizers.cs index e4a7a75d5..1d3c09c51 100644 --- a/src/ImageSharp/Processing/KnownQuantizers.cs +++ b/src/ImageSharp/Processing/KnownQuantizers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Processing/KnownResamplers.cs b/src/ImageSharp/Processing/KnownResamplers.cs index 348c08407..694328207 100644 --- a/src/ImageSharp/Processing/KnownResamplers.cs +++ b/src/ImageSharp/Processing/KnownResamplers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/OrientationMode.cs b/src/ImageSharp/Processing/OrientationMode.cs index ba55425b8..c6ef1a035 100644 --- a/src/ImageSharp/Processing/OrientationMode.cs +++ b/src/ImageSharp/Processing/OrientationMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/PixelRowOperation.cs b/src/ImageSharp/Processing/PixelRowOperation.cs index 6857b24f1..1ce20d7b8 100644 --- a/src/ImageSharp/Processing/PixelRowOperation.cs +++ b/src/ImageSharp/Processing/PixelRowOperation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs index 3558a9489..a09181fa8 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs index dd8833ad9..2d5918ec7 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs index 17fb39df3..a90f5f6f4 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs index 0d363689d..559e6e447 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs b/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs index 36cc7f697..416f5ad07 100644 --- a/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs index e933978c2..0c9af05e5 100644 --- a/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs index 65aa81c60..3c2ec0ef3 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs index cf97751be..080e29a36 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs index 92f7ab02d..3ae74571f 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs index fc80905ee..400adb267 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs index f7439879e..a4048e6a8 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs index 4bbb15cba..627cb7fbd 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs index 34b085fc6..191681c3e 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs index 8201b8e23..70bd69f32 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs index 8bb60286a..3325ea495 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs index 1b07589b5..df7abee68 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs index 472547765..f422146b8 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs index 8ca548d97..bf4623ac8 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs index d566f6691..a5ff500df 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs index cb77c8741..92a848a1f 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs index 4854eae68..6c904a17f 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs index 24c56363a..6b35f120a 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs index 90ed15aa3..65b2d2529 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs index 423fc6591..bc0239a99 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs index 50d5bfafe..6df09ca32 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs index 58568ce40..644e8d668 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs index 8371212fe..c36bedb91 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs index f72e95ee8..3c98c1673 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs index cae9ecb5b..35c7f9716 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs index 8ffd624d2..23b06a987 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs index ba60bfdf6..89c576e8f 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs index ec583862f..70b4d195f 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs index 3dbd54a2c..3918936fb 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs index 7207f95c4..2be8a8d30 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs b/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs index b147a87cc..5079ecc23 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs b/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs index 663ebf051..417fffec0 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs index 8b0cfc6ff..95e6fdbdd 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs index 561892683..7a8e953d9 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs index f7828fa9e..a51f42bdc 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Concurrent; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs index 73688c586..305b71e19 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs index 7fc54ff96..d1d9316cf 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs index 74d5094f5..fdda446ac 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs index 18ac90614..6c77bc904 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs index 24248204b..e42c3b42b 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs index 1ab56d120..ac99d2d4d 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs b/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs index d39237a2c..01f26fbbb 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Dithering { diff --git a/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs b/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs index e322afb8d..75253fd37 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Dithering/IDither.cs b/src/ImageSharp/Processing/Processors/Dithering/IDither.cs index 8b0e1b8a8..5cb95ead8 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/IDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/IDither.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs index a8e08fa3f..2a929c6fd 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs index f6026a64f..83f7d6136 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Dithering { diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs index 0f5a7fb55..811599e71 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs index 48aaa22d6..62b16203e 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs index 5ce7ccec0..1c4970710 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs index e0dd4eae1..de5a7ec30 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs index 34a066049..81e99eecd 100644 --- a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs index fca896929..96e701760 100644 --- a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs +++ b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs b/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs index 626ffd716..280c6e87b 100644 --- a/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs +++ b/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs index a816b0cb8..47e482c78 100644 --- a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs index 5ee1e40de..3a943b226 100644 --- a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs index 3721afee3..5016657c1 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs index 71259a618..8a70f1b74 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs index ba43ca617..127f0eaa5 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs index 60f5d29b0..b3f7d51ec 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs index 6822daa42..2373c98f0 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs index 0e6653d99..01189f1b1 100644 --- a/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs index 10a201b1d..6a86b463d 100644 --- a/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs index 425ae511f..0e28c9846 100644 --- a/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs index 77862b3e3..1b5dc0582 100644 --- a/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs index 3fdeafde3..f4dd63ad6 100644 --- a/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs index 7e1c0ca50..71638f2da 100644 --- a/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs index e4ed44e74..730d71053 100644 --- a/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs index 5cae98568..148a34d95 100644 --- a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs index dee9d2ff6..a8c913a50 100644 --- a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs index 153a1a17c..4dd2bb6af 100644 --- a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs index 71d3f9c9c..43d84b704 100644 --- a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs index 05d3cbdc7..bdb5a6c1a 100644 --- a/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs index 99b138033..343757929 100644 --- a/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs index 30484f059..96bdc59c7 100644 --- a/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs index 49be3b6a6..3b4685f28 100644 --- a/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs index bb6ea51c1..6dd6c783b 100644 --- a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs index 0706e9fc8..81ff899b3 100644 --- a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs index a537b8f60..eb1154181 100644 --- a/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs index 95a099106..8c0765bc7 100644 --- a/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs index 965a35be1..e098762c2 100644 --- a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs index 470d553c2..3b4bafc59 100644 --- a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs index 1c01b608e..e4bb904f2 100644 --- a/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs index ec423bd9a..f74a9f48f 100644 --- a/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs index 2cc40664b..01ac91c95 100644 --- a/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs index 34af41067..4803bd950 100644 --- a/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs index a31e52c7e..ba4b59478 100644 --- a/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs index b622126f3..248e230df 100644 --- a/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs b/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs index 2f12e065b..4bd4549fe 100644 --- a/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs index 988d6d866..999aad619 100644 --- a/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/IImageProcessor.cs b/src/ImageSharp/Processing/Processors/IImageProcessor.cs index 9d2e301de..13d27ae8a 100644 --- a/src/ImageSharp/Processing/Processors/IImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/IImageProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs index 4361936d1..2e4a56e66 100644 --- a/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs b/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs index 7e72c7bf0..a86f819f4 100644 --- a/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs +++ b/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs index 964a88d6a..6b0fb68b8 100644 --- a/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs index 1fdb10661..4fc33de0d 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs index 1547de8ac..436f66441 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs index ff8a6b73d..80a987828 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs index cce527ad4..8ff4f0527 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs index 3b984578b..f6cbe1be8 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs index 209135deb..c6327d3e0 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs index 641587c39..31f05b77f 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs index b55b725a6..7e98cad56 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs index 031b121b9..a1d0a42da 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs index ed0968f7c..6067381fb 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs index 241ec1ebe..b147673b8 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs index 727e72469..af5029fa0 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs index 5e0d1cbf7..13efc879e 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs index fbecbc37c..49a3a2d98 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs index 3b16f8bc8..22b75fcb0 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs index 378009c40..daf18f806 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs index d2bf06bcd..1f963017c 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs index 775e0aa23..6db0c2a17 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Concurrent; diff --git a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs index 8ef05640a..cd3c8a68e 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs index 6c2e3bd88..7b8151f08 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs index e59b9a6a7..493c3e0ff 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs index 26c906f06..05bbb0b23 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs index 02e85167d..b10c5bab5 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs index 7fefda3f1..1f2c7ea51 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs index 38816a168..4af8460ee 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs index 82ff572fa..d2c5d1fed 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs index bdaeb57f6..2bfb5907f 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs index 9bc94831a..72fb05d00 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs index ece3777e0..e419e23cd 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs index 5c1daf183..5a29a02c5 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs index 1fe69ea30..a623d37da 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs index d95ed5aab..586c8ff5e 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs index 8f8e38dd9..49e268d7e 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Quantization { diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs index 0f1dff181..1cab3996c 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs index 5e086feaa..b7f21473d 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs index 9aa21e4dc..52b32ed16 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Transforms { diff --git a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs index a366fd51d..657c2b28d 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs b/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs index 4d46540bc..575ac5fbe 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs index b2a50a988..e2b42591c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs index 8c91e1953..38e278bca 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs index 55eebba4f..509df8a42 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs index 02df8282f..7413cbafb 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs index fec41dbff..0a9660a66 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs index a3c8f7108..927d0361c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs index 534832d13..552e2e1f1 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs index be1388dce..b058c1689 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs index b154aba88..1b0f07c7c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs index 470eafcd8..ddb228b82 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs index 0a00cf8e9..8ac445827 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs index f716ba701..e787d361b 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs index f348721d7..6f11b62d2 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs index b53e7b5c0..2708848ef 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs index 43f67f791..ce94e2a27 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs index 1bcfa5fd2..0760c6f69 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs index b0a79766f..704583343 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs index 590d292e0..1cc567166 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs index 8cdfcd882..7ad238eaa 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs index 7eb6d111e..fd21495fd 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs index 9a78af82b..27da022d9 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs index 345e56790..fe761f9d6 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs index 82f58a7c9..33b081b0f 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs index de44d32e4..6066efd1c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs index f3521ebed..990ebc482 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs index a79f60339..e4b3a7ba0 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs index 5390cbbd1..a619e2358 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs index 4e6e7a48c..63135e47b 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing.Processors.Transforms { diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs index 09d95c8ac..a654dcc62 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs index 96e516e39..f2fd4c628 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs index 5423eea88..30317070c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs index c1dce02be..a9f63bd3c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs index b474b4371..7c6069a5b 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs b/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs index b7e65b4cc..f079c7490 100644 --- a/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs +++ b/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/ResizeMode.cs b/src/ImageSharp/Processing/ResizeMode.cs index 142a926b3..b4d2d7d5c 100644 --- a/src/ImageSharp/Processing/ResizeMode.cs +++ b/src/ImageSharp/Processing/ResizeMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/ResizeOptions.cs b/src/ImageSharp/Processing/ResizeOptions.cs index b54d2eae1..bc978b7be 100644 --- a/src/ImageSharp/Processing/ResizeOptions.cs +++ b/src/ImageSharp/Processing/ResizeOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/RotateMode.cs b/src/ImageSharp/Processing/RotateMode.cs index c890f2bd6..7f9d4145e 100644 --- a/src/ImageSharp/Processing/RotateMode.cs +++ b/src/ImageSharp/Processing/RotateMode.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/TaperCorner.cs b/src/ImageSharp/Processing/TaperCorner.cs index 395b17142..63b9a0fa1 100644 --- a/src/ImageSharp/Processing/TaperCorner.cs +++ b/src/ImageSharp/Processing/TaperCorner.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/TaperSide.cs b/src/ImageSharp/Processing/TaperSide.cs index 226d11aed..0fdcf3788 100644 --- a/src/ImageSharp/Processing/TaperSide.cs +++ b/src/ImageSharp/Processing/TaperSide.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Properties/AssemblyInfo.cs b/src/ImageSharp/Properties/AssemblyInfo.cs index 225de354a..36da83142 100644 --- a/src/ImageSharp/Properties/AssemblyInfo.cs +++ b/src/ImageSharp/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // Redundant suppressing of SA1413 for Rider. [assembly: diff --git a/src/ImageSharp/ReadOrigin.cs b/src/ImageSharp/ReadOrigin.cs index f17bc82f1..76e40755b 100644 --- a/src/ImageSharp/ReadOrigin.cs +++ b/src/ImageSharp/ReadOrigin.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp { diff --git a/tests/ImageSharp.Benchmarks/BenchmarkBase.cs b/tests/ImageSharp.Benchmarks/BenchmarkBase.cs index 87ed8fa42..412aec6f0 100644 --- a/tests/ImageSharp.Benchmarks/BenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/BenchmarkBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Benchmarks { diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs index 6be1998fb..fb799cb02 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs index e4723d3a0..170e99041 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs index 82dd57c29..b04712f7e 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs index b69dd36d7..025e6128b 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs index 072bd53ed..81cabe161 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs index 2a6e21556..f30b19c16 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs index 58e3e01e3..a0fa12d67 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Drawing.Imaging; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs index 70c85ef02..57ea71cf8 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs index 5c7a9e991..5f3659c21 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Drawing.Imaging; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs index aedf9cd77..ceeed0f4e 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs index 7bd1b8044..0a88cf1c9 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs index f10eacb28..86eeff384 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs b/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs index 93f5bc8d8..b1f497129 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs b/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs index 4a9d709ee..906b4c98b 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // This file contains small, cheap and "unit test" benchmarks to test MultiImageBenchmarkBase. // Need this because there are no real test cases for the common benchmark utility stuff. diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs index 55d66d488..623cd5696 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs index 20f3e0d56..db95d043a 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs index 05b7156ff..3887bcac7 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs index 5dac39116..18573d45f 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs index 32d838f8c..6da398c10 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs index 51da29172..a13ae4de1 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs index 06492bc92..cd2f411bd 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs index 1696623ef..fd23688c5 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs index 6f3ea0e14..c398e2609 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs index b64c86974..f9ab79feb 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs index a710fc196..cf01e5e61 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Drawing.Imaging; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs index ae32167a9..a635f0747 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs index 4a3c88a28..4787f7d6b 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Drawing; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs index 0d0e3212b..99234922d 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Drawing; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs index 1daf9b4d5..b80dc3393 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs b/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs index eafbc0fde..b8e00191f 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Configs; using BenchmarkDotNet.Jobs; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs index dc1d21c14..874eacdab 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs index 1184bef2e..a4412e0d6 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs index dfcc51646..2302db39d 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs index c21c0abf5..c4e8e3e04 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs index b57136a92..2e477b7ec 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs index 3a69a6e24..c766b72e6 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs index 483ab6174..407fc3f26 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs b/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs index 602e1137f..c94eeafcc 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs index 5ca584917..8bf9fc9bc 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs index 3f9d1648c..a63b19505 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs index f82afaac4..f0d5fe49a 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs index 59705a202..f0b573ef6 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs index a2290ce1f..dc2c3d8e5 100644 --- a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs +++ b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Benchmarks { diff --git a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs index b11e389af..3c3f2001f 100644 --- a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs +++ b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs b/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs index b8e58a8c5..86a119a6c 100644 --- a/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs +++ b/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs b/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs index 5d3bc26ba..d0afb1d3e 100644 --- a/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs +++ b/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Benchmarks { diff --git a/tests/ImageSharp.Benchmarks/Config.cs b/tests/ImageSharp.Benchmarks/Config.cs index fda98a097..8af7d8f68 100644 --- a/tests/ImageSharp.Benchmarks/Config.cs +++ b/tests/ImageSharp.Benchmarks/Config.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. #if Windows_NT using System.Security.Principal; diff --git a/tests/ImageSharp.Benchmarks/General/Array2D.cs b/tests/ImageSharp.Benchmarks/General/Array2D.cs index 92190e653..40c6ab120 100644 --- a/tests/ImageSharp.Benchmarks/General/Array2D.cs +++ b/tests/ImageSharp.Benchmarks/General/Array2D.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs b/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs index 41137e28b..63b45a583 100644 --- a/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs +++ b/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs index fc0b149c1..c800db7f8 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs index 9644cbc7d..10622f5cd 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs index c01d988ee..b4b379515 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs index 145b98b0f..61ebadee7 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs index 0ccde7a13..9de30afba 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs index e8cb8ca62..dba159d95 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs index b7eb01fcb..1edf28516 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs index bb308d480..6bb577e61 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs b/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs index 2afa8753f..9fa543eda 100644 --- a/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs +++ b/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs index 6d7c3c423..255c1d909 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs index 55527da18..4a5fd8144 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs index 0b24276d3..bd29b3d83 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs index 93a27a555..dfe581c50 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs index 6a59e993b..3770aefe6 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs index 80a2e80d2..73b35e10d 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs index 699a4cf09..b2edd9c9a 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs index 7acb3ecfe..ae110fb4f 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs index 4c8b987b2..d0c495266 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs index 498520605..8e8a01864 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs index b325ec7c6..1af7080a3 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/StructCasting.cs b/tests/ImageSharp.Benchmarks/General/StructCasting.cs index ff89ad3ff..6ac50e42c 100644 --- a/tests/ImageSharp.Benchmarks/General/StructCasting.cs +++ b/tests/ImageSharp.Benchmarks/General/StructCasting.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.CompilerServices; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs b/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs index 80f404162..45464eb46 100644 --- a/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs +++ b/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs index 41764b816..fdffcc6e4 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs index 8d842a0f5..c1c3ccffb 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs index f103867cd..42914e5c2 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs index 30dddf483..19f478228 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs index 61de53782..70be3d681 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs index a800df405..84f67536c 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs index 5e9ffaae8..2122e1afa 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs index cdc7cac2e..d63610969 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs index dc921bc42..2b52348be 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.InteropServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs index 8fa0b5cfc..44c8adab9 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs index 3c79df494..a5c8dafa2 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs index 6d177588b..396f754fe 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Benchmarks.General.Vectorization { diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs index beac94269..faa905a66 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs b/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs index 8953228f9..16b9a47fd 100644 --- a/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs +++ b/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Program.cs b/tests/ImageSharp.Benchmarks/Program.cs index 5caf238fb..6ddfff755 100644 --- a/tests/ImageSharp.Benchmarks/Program.cs +++ b/tests/ImageSharp.Benchmarks/Program.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Reflection; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Crop.cs b/tests/ImageSharp.Benchmarks/Samplers/Crop.cs index 8a5cccd68..7abd8fa79 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Crop.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Crop.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing; using System.Drawing.Drawing2D; diff --git a/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs b/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs index 7718e7215..5c68e6b92 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs b/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs index e53661c73..c817ab207 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs b/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs index 711669b14..57dbbd330 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Resize.cs b/tests/ImageSharp.Benchmarks/Samplers/Resize.cs index 49a1bd541..8af41d5a7 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Resize.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Resize.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing; using System.Drawing.Drawing2D; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs b/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs index 0610079fe..8578d3b98 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Skew.cs b/tests/ImageSharp.Benchmarks/Samplers/Skew.cs index 7b8ec83a5..e791385cf 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Skew.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Skew.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs b/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs index a94d0ed83..318dfb643 100644 --- a/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs +++ b/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Tests.Formats.Jpg; diff --git a/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs b/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs index 97731be94..b50122628 100644 --- a/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs b/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs index 3fc4c5659..8ef69181f 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs b/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs index c658227ae..3c74c7f09 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs b/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs index 7f7c084e7..a93d5915a 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.cs b/tests/ImageSharp.Tests/Color/ColorTests.cs index c689431f3..0ec10a77d 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Color/ReferencePalette.cs b/tests/ImageSharp.Tests/Color/ReferencePalette.cs index d8403e27e..25cabc46b 100644 --- a/tests/ImageSharp.Tests/Color/ReferencePalette.cs +++ b/tests/ImageSharp.Tests/Color/ReferencePalette.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs index 4bba0ab03..cfec1ffa3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs index 90c2c2244..dc09207cd 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs index a6a5fa32a..f81009088 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs index dbf64cb1d..20d330a1e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs index 418893f35..785dd1a8e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.ColorSpaces.Conversion; using Xunit; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs index 88196034b..736275dec 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs index 3c77f132e..d2f906e6f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs b/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs index dbf3fe6d8..9dfcbd9c0 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs b/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs index e1386e1a0..6de0314c3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs index 2046cdfdc..83f7801c8 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs index 50d831fd9..eeba1b22f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs index 471610eba..5b847b025 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs index 39011bb29..e52aadc4e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs index e00765832..af13c26fa 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs index 43300ab88..37650c672 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs index 4ab309fe1..177d434d5 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs index e7ff34f49..29e93f1df 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs index 844cda476..e72a79103 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs index 74ed180f3..5f3a8f499 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs index a3db00e80..826d7255a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs index fc202ccc9..5388bc668 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs index 3e481d4f6..48e461d62 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs index 078ba44da..0130e7cc6 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs index c5af01788..37c51356c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs index 49990fb90..0f39d5db2 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs index 924b45b4a..c2d4b3f35 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs index 099165731..759c2f7b3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs index a7a819d1f..572817174 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs index b83b861be..7469d5d5f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs index 932fdc410..0aacd4a57 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs index 4d04418d9..c01b31255 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs index 3cdaa4279..c1fed0384 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs index e14d02faf..3db47c54a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs index 0c62ffcc3..960f888de 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs index 5566ce1b4..25d1e6d25 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs index f130bb947..6497a3b9e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs index 9e0af62ee..f21a10db8 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs index 68fe54b51..35cc082bb 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs index 7c3e66f52..33d1e782d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs index d42322336..170365cc2 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs index 8223ffdbc..29e306909 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs index e300049df..943cf9f48 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs index 1c343afa2..0c9ee268f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs index 9a3cb8b01..5ce26d620 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs index 9e4602475..ad6cfc1b0 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs index 71b41e6ca..a6e47f3ef 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs index 4737ba59f..0e7fd1033 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs index 1193ccaa1..a2fec52be 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs index b1342c80c..944647e10 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs index 49b99b705..6dbce8ed7 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs index 42f00c51e..1781ed74d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs index f12361773..1a8b38a1c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs index 761b9851e..81208e5c3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs index 2b0350cea..a9edfef5b 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs index eda5db125..7efeb4fb9 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs index 47f780789..3089a2fe1 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs index 2fed3e9c5..95a50816e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs index 75634eb51..bb364435a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs index d6d59ec07..8d4f82927 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs index dbb0c6e20..fdbab2f80 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs index 5fcc59090..b62c74331 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs index 7ff80c170..fc440c621 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs index 801730205..ff9498c12 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs index 3464fdbbd..3e3f48962 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs index 26af5ddd3..ed5df4dc3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs index dc40ee518..4062f4df5 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs index 00569ced2..549eb235d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs index 104b1f4b2..06110af77 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.ColorSpaces; using SixLabors.ImageSharp.ColorSpaces.Conversion; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs index 8a2cd1159..bbd2dda6c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs index b01e3a854..88c9fec45 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs index 8f9fef5e9..8f09d3715 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs index 9adc94af7..eb4c8c0e8 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs index 94879eee7..1eec1d5b4 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs index bd870b01a..e239f3efe 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/HslTests.cs b/tests/ImageSharp.Tests/Colorspaces/HslTests.cs index 60cfa9761..409428ffa 100644 --- a/tests/ImageSharp.Tests/Colorspaces/HslTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/HslTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs b/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs index d1d1d15c8..f44b8d96a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs b/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs index a657098f5..3ebf92cbb 100644 --- a/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs b/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs index ef42e68bc..9db4ab92c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs b/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs index f0c1471e0..d954c770f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs b/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs index 17816aab1..2f0ae2f93 100644 --- a/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs b/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs index df9659994..9d48d239a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs b/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs index f3e6f88f4..f802770e9 100644 --- a/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Common/ConstantsTests.cs b/tests/ImageSharp.Tests/Common/ConstantsTests.cs index 38d754d60..8795e90b8 100644 --- a/tests/ImageSharp.Tests/Common/ConstantsTests.cs +++ b/tests/ImageSharp.Tests/Common/ConstantsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs b/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs index edaad4f51..22240f14e 100644 --- a/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Text; diff --git a/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs b/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs index b6bfca4b5..78d47d8d4 100644 --- a/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs +++ b/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs b/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs index d47d5da8e..5c09e7110 100644 --- a/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Common/Tuple8.cs b/tests/ImageSharp.Tests/Common/Tuple8.cs index 7c7f254db..a8d3f1034 100644 --- a/tests/ImageSharp.Tests/Common/Tuple8.cs +++ b/tests/ImageSharp.Tests/Common/Tuple8.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Runtime.InteropServices; diff --git a/tests/ImageSharp.Tests/ConfigurationTests.cs b/tests/ImageSharp.Tests/ConfigurationTests.cs index a68baf93f..368f47280 100644 --- a/tests/ImageSharp.Tests/ConfigurationTests.cs +++ b/tests/ImageSharp.Tests/ConfigurationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs b/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs index 0aff95d99..d991fe7cf 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs b/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs index d08d81899..c721d15ff 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/FileTestBase.cs b/tests/ImageSharp.Tests/FileTestBase.cs index 12f7636a2..c862e8e93 100644 --- a/tests/ImageSharp.Tests/FileTestBase.cs +++ b/tests/ImageSharp.Tests/FileTestBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs index f63fc0a16..6d07d84df 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs index 235ecabf2..8f6125533 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs index ccb57c35f..232df080d 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Formats.Bmp; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs index 9818f9d41..2082b7a8d 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs index ca236e914..a2d4ebd1a 100644 --- a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs +++ b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs index 12d890357..62d9bb2b9 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs index bfe950d4f..69e06490c 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs index a3bc5d45c..d3434864c 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Gif; using Xunit; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs index ddb5608da..ed028fee8 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs index dc0da5e2d..de172ec51 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Gif; diff --git a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs index 6a90c0c27..88f9c7d8a 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Gif; diff --git a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs index c6458d22f..f9ad1f30d 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Gif; diff --git a/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs b/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs index 9dba7179d..cf94e468b 100644 --- a/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs +++ b/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs index 8b0e89f59..655f12c85 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs index 169d3dd2d..a18775ac1 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // Uncomment this to turn unit tests into benchmarks: // #define BENCHMARKING diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs index b3c911f56..c85c83d2c 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // Uncomment this to turn unit tests into benchmarks: // #define BENCHMARKING diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs index af8ba83c3..c8befba3a 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg.Components; using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs index 683a79a8f..3d8a3963e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs b/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs index 978ee7b2a..908dc35dd 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs index aebf80d08..9fb0b6ae2 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; using SixLabors.ImageSharp.Metadata; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs index 27c612aee..2bc404e5b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs index 57051a9d7..d7c0b4e23 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Microsoft.DotNet.RemoteExecutor; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs index a01f4d46c..356e3f18b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs index c2fc320af..ce45f9485 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs index 4ecf987e9..7e556c997 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Microsoft.DotNet.RemoteExecutor; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index a35bb177c..77265c60e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs index 6cbdb83fc..2c52baeda 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs index 42eea2708..be5974cb4 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs index 32481e1f5..47f687311 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs index 50a2a4416..bd7abf8fc 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg; using Xunit; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs index a6f80f558..bed4374bd 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs index 6e04610d5..b08923b70 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Text; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs index fb09065b0..a938ee1b0 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Text; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs index 82fcc368f..87567751a 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg.Components; using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs index f8afb3d0b..3850b29e3 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // ReSharper disable InconsistentNaming using SixLabors.ImageSharp.Formats.Jpeg.Components; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs index ca4040380..852cc322b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs index 0276e1708..c8a2cd1f7 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit.Abstractions; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs index 3e125adac..60fcca523 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs index b7cf6a840..5d4e6f9ed 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs index b9526994e..2ca6c1615 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs index 0fce671e5..9f5e362b4 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs index 826335b65..bdc9e0776 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs index fc0540c64..14041ca8d 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs index 1adcf0bc0..fc1cb03a7 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs index 533ecaca1..2abdf91fb 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs index c11edb67c..70a8db867 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs index 4de576b25..90c778c4e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs index 142e38dc0..c90ed1b6e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs index 13685c8e8..8b2282d08 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs index 61a5d8f1d..450c2b225 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Jpeg.Components; using Xunit; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs index 3a207722b..fcffd399e 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers.Binary; using System.Text; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs index 6cefff95d..afc6e05a6 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers.Binary; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs index 72b27ec5d..ed28a2646 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using Microsoft.DotNet.RemoteExecutor; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 2d5b2e25d..7828134a7 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // ReSharper disable InconsistentNaming using System; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs index bf4206600..a0a377348 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs index a50b1059f..1cd9fe5c2 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Formats.Png; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs index 72c0fd7ab..4f250d07b 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Formats.Png; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs index 6f886b73d..34bd52c8b 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Microsoft.DotNet.RemoteExecutor; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs index 6e0fa4a0e..99b3fe8fe 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs index 4797397e1..2b0b088a1 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs index 48171a77d..3bbf1b187 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/GlobalSuppressions.cs b/tests/ImageSharp.Tests/GlobalSuppressions.cs index 95fba0dff..2b23eb6c1 100644 --- a/tests/ImageSharp.Tests/GlobalSuppressions.cs +++ b/tests/ImageSharp.Tests/GlobalSuppressions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. diff --git a/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs b/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs index 9c02dd601..b5e8a12e6 100644 --- a/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs +++ b/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.Processing; diff --git a/tests/ImageSharp.Tests/GraphicsOptionsTests.cs b/tests/ImageSharp.Tests/GraphicsOptionsTests.cs index 851aba6ba..1a267bf49 100644 --- a/tests/ImageSharp.Tests/GraphicsOptionsTests.cs +++ b/tests/ImageSharp.Tests/GraphicsOptionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities; diff --git a/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs b/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs index 16a27a9ce..f2eb1be1e 100644 --- a/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs b/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs index fbe259d2b..41ddaa0ed 100644 --- a/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs b/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs index 08d64a738..5f7b31127 100644 --- a/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs b/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs index fd1eb546b..64a25c227 100644 --- a/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs +++ b/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs b/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs index e2486fb4a..6ab1cb287 100644 --- a/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs +++ b/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs b/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs index 57e280d93..1871203da 100644 --- a/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs +++ b/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Common.Helpers; using Xunit; diff --git a/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs b/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs index bc1ffda48..89206dbca 100644 --- a/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs +++ b/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs b/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs index 62e204843..14fad2bd6 100644 --- a/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs +++ b/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs b/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs index 07f1b5cd0..30a46b60a 100644 --- a/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs +++ b/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageCloneTests.cs b/tests/ImageSharp.Tests/Image/ImageCloneTests.cs index bc2eec79d..fc709a2ee 100644 --- a/tests/ImageSharp.Tests/Image/ImageCloneTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageCloneTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs index 2b7c1e2c6..303801a07 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs index a05b428e1..cf92b42a3 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs index d81defbcd..9fb1bf37a 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameTests.cs b/tests/ImageSharp.Tests/Image/ImageFrameTests.cs index 58d7d7981..998aabc70 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Image/ImageRotationTests.cs b/tests/ImageSharp.Tests/Image/ImageRotationTests.cs index 28196c0da..84778e845 100644 --- a/tests/ImageSharp.Tests/Image/ImageRotationTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageRotationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Image/ImageSaveTests.cs b/tests/ImageSharp.Tests/Image/ImageSaveTests.cs index 156e51578..0a56dca09 100644 --- a/tests/ImageSharp.Tests/Image/ImageSaveTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageSaveTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs index dcf4dcfe8..f923832ab 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs index 2be950407..c7dbbc2d8 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs b/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs index d010f6023..5941854c1 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs b/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs index 399652851..87ca1fb95 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs index cb3400758..c3ee5b198 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs index 4c6b92100..8a7f87ff2 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs index 2b1411fa6..7cee11983 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs index b8ed6e75b..97ae94948 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs index 4e91cfebc..dbe1410c2 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs index 171b681ce..d8d7129df 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs index 0c722b4d6..ab3a87a31 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Save.cs b/tests/ImageSharp.Tests/Image/ImageTests.Save.cs index dc65ecfef..99feb8177 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Save.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Save.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs index e0152558b..f1aaf0ae3 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.cs b/tests/ImageSharp.Tests/Image/ImageTests.cs index 6bba8b15c..54de9b55f 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs b/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs index 7352ddd7d..cd66be363 100644 --- a/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs +++ b/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs b/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs index cb09fa010..1f6a3c6bf 100644 --- a/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs +++ b/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs b/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs index 10a531eaf..22358e173 100644 --- a/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs +++ b/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/ImageInfoTests.cs b/tests/ImageSharp.Tests/ImageInfoTests.cs index bde5f7b6a..07c7293a7 100644 --- a/tests/ImageSharp.Tests/ImageInfoTests.cs +++ b/tests/ImageSharp.Tests/ImageInfoTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; diff --git a/tests/ImageSharp.Tests/Issues/Issue594.cs b/tests/ImageSharp.Tests/Issues/Issue594.cs index 8ddd9caf8..d9a44f870 100644 --- a/tests/ImageSharp.Tests/Issues/Issue594.cs +++ b/tests/ImageSharp.Tests/Issues/Issue594.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs b/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs index 8db79fca0..a241921ec 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs b/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs index 9f8543fff..933dfec74 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs b/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs index 6465e0b81..391d654d6 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs b/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs index 9e14bd1db..18a2bf030 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.InteropServices; diff --git a/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs b/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs index ab04b3700..c692f7c9d 100644 --- a/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs +++ b/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs index 59f3f5aa0..0eb4fe0ec 100644 --- a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs +++ b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; using Xunit; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs index 555d641c7..4e5ce8823 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs index f0cc18f29..a9a6d9860 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs index 298b5a93f..1ce7af0d1 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs index ab69a3077..acca894a0 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs index c10fdc15d..a1f3f7ede 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs index 8884037a5..654c06734 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs index 15b07265f..3522d5a92 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs index 8dd28653c..644e86665 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/TestStructs.cs b/tests/ImageSharp.Tests/Memory/TestStructs.cs index 858bb8e64..d95b4edf6 100644 --- a/tests/ImageSharp.Tests/Memory/TestStructs.cs +++ b/tests/ImageSharp.Tests/Memory/TestStructs.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs b/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs index 746c0f3c7..000b247e2 100644 --- a/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs +++ b/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Metadata; diff --git a/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs b/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs index 60d791e91..5e81e2d9c 100644 --- a/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs +++ b/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata.Profiles.Exif; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs index 7069b0346..5b927e2f9 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs index 85c9231fa..d55fca3c5 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs index 64219fce0..95f927de0 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs index 7f52fb6ca..1949e3eaa 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs index 495057455..be5fb243b 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs index 4ca7f84a5..69ad26220 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs index 96c897537..9f07d4759 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs index 8245d26e0..b7a0d8a13 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs index 412d5fc07..95ab5226c 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs index a050f3859..98cbbd4e9 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs index bd9eb1ea8..70fe79baf 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs index a18fb1ab8..e5fb6114a 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs index fc3502e3e..b2f1c0ed4 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs index 39ebf3374..05f5a271b 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs index 6245d8bb6..27f8314bb 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs index 15cd27b94..1e40d9b7d 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs index 7c301c754..30f953757 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs index 0873874af..9a92cea95 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs index 2888958b0..248ae034a 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs index c88ea3a95..5d72e403b 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs index 20e4a7141..83af8fd31 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs index 85e11c856..7dec70b6c 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs index 7249e03aa..853dc4daf 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs index 633c7c823..5504a4331 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs index 1502b8b30..4a303723e 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs index c4ac921b1..a6cbe2acc 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs index 5c80ac36b..0cdcfd6df 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 3baea45d6..cb1fdace8 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Numerics/RationalTests.cs b/tests/ImageSharp.Tests/Numerics/RationalTests.cs index 7b3bd86fc..761543f89 100644 --- a/tests/ImageSharp.Tests/Numerics/RationalTests.cs +++ b/tests/ImageSharp.Tests/Numerics/RationalTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs b/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs index 2931ab391..c171232d7 100644 --- a/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs +++ b/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs b/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs index 6b542badf..a1c9ac341 100644 --- a/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs index 74b9ef1c8..d4cb1b002 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs index 172349739..065d87b61 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs index 4dbd00cbb..988e3f5db 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs index 6ee14c015..9d9a0dff2 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs index b979eebde..5c032d79f 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs index e36d54b52..8be964c66 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs index 487adc241..688617bdf 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs b/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs index b1ae7fd13..8d60a7021 100644 --- a/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs index 1712a6e1e..10325e510 100644 --- a/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs index c529e1b51..38efe1ff5 100644 --- a/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs b/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs index 179ba12b2..07424602a 100644 --- a/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs b/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs index f9bb084de..d4fc794d0 100644 --- a/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs b/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs index 3ad2dccdd..08b054f63 100644 --- a/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs index 40739c69a..4fe322a6e 100644 --- a/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs index 1533f9cf9..62baa56ef 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs index 0ab703398..6d52ea2d1 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs index a726cee4e..a5be4fc45 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs index 96334be02..7ef933c6e 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs index e2d370cc0..4efb066dd 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs index a91ea0977..b8d9e50da 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelBlenders { diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs index 7831dc124..e939761da 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats.PixelBlenders; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs index f41fbc022..67e70d98a 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs index 2ff5157b7..d93f72d0c 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs index 19623c3d8..eb5382881 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats.Utils; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs index 817c29aa1..23bed6a01 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs index 9a0f4d8ac..b3c617059 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs index afcec7938..45a805ec0 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs index 1c966951f..96d1f329c 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs index aa9b7bb1b..b6af8ffa8 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs index 87aed91e7..4855351c3 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs index b2a1a2dc3..6d02cbd3e 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs index a17594af6..4b1954409 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs index dce934286..08ba9ce16 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs index 37793911a..39760bffa 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using Xunit; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs index 0a28db6b0..634627b0b 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs index 1ecbaf361..650196fba 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Buffers; using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs index 6787602bb..232152e63 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs index f9cc042a7..ed210f8a7 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs index 9d48675f1..be31c7f76 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs index ad45b0771..2bfd9e99d 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs index 06e3d5948..8634dfe00 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs index 6ab7b9c95..6c887aaad 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs index 7b3f71985..cee4ecd92 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs index 6656ba19c..b64aeeff2 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs index 34ec0bdef..0b29d4142 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs b/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs index 3a2841bb3..99d766ad6 100644 --- a/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs index 45f65eb4b..0d9721854 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs index 54abf0db0..6eff0f5b8 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs b/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs index 162775a25..0a85a94c4 100644 --- a/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs b/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs index 6b9b14bbf..5df77bb67 100644 --- a/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs +++ b/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs b/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs index d515b21a9..dc73ccf76 100644 --- a/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs +++ b/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using Xunit; diff --git a/tests/ImageSharp.Tests/Primitives/PointFTests.cs b/tests/ImageSharp.Tests/Primitives/PointFTests.cs index 2bb4cc6dd..1cc468965 100644 --- a/tests/ImageSharp.Tests/Primitives/PointFTests.cs +++ b/tests/ImageSharp.Tests/Primitives/PointFTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/PointTests.cs b/tests/ImageSharp.Tests/Primitives/PointTests.cs index 8e86c7218..7d4aea01e 100644 --- a/tests/ImageSharp.Tests/Primitives/PointTests.cs +++ b/tests/ImageSharp.Tests/Primitives/PointTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs b/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs index f0ba75716..774f7c379 100644 --- a/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs +++ b/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/RectangleTests.cs b/tests/ImageSharp.Tests/Primitives/RectangleTests.cs index acfbe9e61..2e306842c 100644 --- a/tests/ImageSharp.Tests/Primitives/RectangleTests.cs +++ b/tests/ImageSharp.Tests/Primitives/RectangleTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/SizeFTests.cs b/tests/ImageSharp.Tests/Primitives/SizeFTests.cs index 8cda5d4eb..2bdbe72b3 100644 --- a/tests/ImageSharp.Tests/Primitives/SizeFTests.cs +++ b/tests/ImageSharp.Tests/Primitives/SizeFTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/SizeTests.cs b/tests/ImageSharp.Tests/Primitives/SizeTests.cs index 4aea06036..4dddb63d4 100644 --- a/tests/ImageSharp.Tests/Primitives/SizeTests.cs +++ b/tests/ImageSharp.Tests/Primitives/SizeTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs b/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs index 953563006..766f78e95 100644 --- a/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs +++ b/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.ComponentModel.DataAnnotations; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs b/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs index f992ac35b..674d706b8 100644 --- a/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs +++ b/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs b/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs index 34165319a..b92941162 100644 --- a/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs +++ b/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Binarization; diff --git a/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs b/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs index 5d550a595..ad48c299c 100644 --- a/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs +++ b/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs index b67c482dd..50c4169fc 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs index e0b1e1bbb..33c83ad63 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs index 8d17bc356..903dfdfa8 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs index 5849f1a98..f686a889c 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs b/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs index ff20e3b9d..23c89b5bc 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs b/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs index 0cc8db651..b97d91c44 100644 --- a/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs +++ b/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs b/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs index 34b99461d..412e7393c 100644 --- a/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs +++ b/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs b/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs index 797423394..b63bad4e8 100644 --- a/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs +++ b/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs b/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs index f449b8cb5..9d359d77b 100644 --- a/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs b/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs index cd4d78279..b3cc94894 100644 --- a/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs +++ b/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs index 41e60c84a..3f8cb45ea 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs index a8b5b3643..384d01b4c 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs index 70c78ec81..efa6128ac 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs b/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs index bf2d6823a..4ed75aba8 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs index 46fa61168..332ecee0f 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs index 9afaf16fd..407d10717 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs b/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs index 8aef5415c..a3d004e40 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs b/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs index 7e8b76458..8f6dba662 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs index c171a1243..64973b01f 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs index 29d1d63e6..355415027 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs index 6cb38e2fe..f51bea16f 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Tests.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs b/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs index 89e7d5ef9..6771ec271 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs index 346df0379..985b1d9a3 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs index 8ae410768..f7b4f8177 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs index 02e5f4276..9460b6099 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs b/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs index 063844178..b7c659ab7 100644 --- a/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs +++ b/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs b/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs index 1c6a1c7dd..de3bbb7c7 100644 --- a/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs +++ b/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Moq; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs b/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs index 5e2b7062e..681d6e3b4 100644 --- a/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs +++ b/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs b/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs index 0336b231b..ddafa0df9 100644 --- a/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs +++ b/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs b/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs index 5d41c58ce..1c9732a70 100644 --- a/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs index e718df4a2..b1113f5fe 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs index 3801a4888..909105bad 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs index bd574c916..9a9fec4fe 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs index 9dc135016..1664693e9 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs index 66e9ba2df..f25850e83 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs index 3d1e378b1..f6efeb2d6 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs index d1a3baa5a..02678c0fc 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs index 535520cb8..1906d283e 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs index 2ae926392..71e707c54 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs index 88ebec4e2..b716bccc3 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs index 4eeebc3a0..5b5c32d8f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs index dd4abfc76..64dc4d7a1 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs index d7cee311d..278f703e8 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs index 86518b015..aadcdd0a0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs index bb52731bb..438a92b8f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs index 5c6a29822..d71a6d9e9 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs index 1758db8dd..d2edfc935 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs index ae9abed7f..a14460faf 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs index 2352a4dce..04dabec82 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs index 9b96653b8..dd008957b 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs index cb7a403f9..d88fb9c4e 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs index 04e86c955..c6e2e78d5 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs index 8b77f902d..2e10c8c58 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs index 65e616dca..bf535decd 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs index bd7336119..4014de635 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs index 26dac7532..ba8ccf2a1 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs index 4be11a72c..e6d519ad0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs index fa43cb15a..4d822288c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs index e6a960f9e..e40493ac9 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs b/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs index 88cd6688a..cc48fd40a 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs index 470f48f78..8572e754f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs index dd27164f3..fa6f27c92 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs index acc9a0e01..b33a24515 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs index bcbb60e79..c498b9bc7 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs index d78e9254c..48cb133b2 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs index 2de903d66..4bf6e91b2 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs index a4fec9fd9..51a11919c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Metadata.Profiles.Exif; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs index f0eef3afd..1fd7ecf0f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs index 6ba795e56..ea85c4ef5 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs index ae53afd67..ff15b2859 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs index 28833248c..54abb7990 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs index d3025d911..62b7cfa68 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs index cdc96f042..42f029a00 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs index 3d08cf1a4..405bf9fe5 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs index 8dbc05655..f61b4e18c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs index 3f323000a..aec0d2a1f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs index 04647c019..b9c3502c8 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs index cf7c0c54b..79c259c1e 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs index 0720bcfa2..7591f2384 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs index 70b5be73e..bf3d8e3ff 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs index 16ff9419a..4eca2ccbd 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs index edf6a6440..24d94f5b9 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs index 8525528c7..537d619da 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs index 59d226ef5..d6264540c 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs index db1e76ae5..2fc9c8aea 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs index 22388a0ac..6c6e4a015 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs index c702aebe4..afe08f6f6 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs index e7b92b7b3..1f6da58f1 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs index 327b14bcd..ebd17a9c3 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs index b1831f96e..42aa8aadb 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs index 66a157a8a..fe22e7b87 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs b/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs index 8c75cea7f..8b64492c0 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs index 9f8034fa3..8d2b493a1 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs index 0b63d6377..7d16bdf33 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs index 858607a02..87c0348ec 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs index 34a1eaa30..9579b24c6 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. // Uncomment to enable local profiling benchmarks. DO NOT PUSH TO MAIN! // #define PROFILING diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs index ba5eb532b..26c34ba00 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs index 2b81e721f..a4e022a1a 100644 --- a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs +++ b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs index 067604f82..7ec63064c 100644 --- a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs +++ b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs index 2a9280d6d..0457de35e 100644 --- a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs index a4d5e7c13..41925c2e0 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs index 837674e70..9b6e1eb23 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs index 31f368cec..e84f393c2 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs index 3bc787b34..1f5558659 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs index d7f9dd877..913d1f5c6 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs index 91f81cb43..d0e5eb21e 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs index c7b856a60..43c595898 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs index 671edcfae..4aa4d48e2 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs index bfe7d94b1..7df3ed21d 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Globalization; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestFile.cs b/tests/ImageSharp.Tests/TestFile.cs index bd185fa6b..91f1dbe0e 100644 --- a/tests/ImageSharp.Tests/TestFile.cs +++ b/tests/ImageSharp.Tests/TestFile.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Concurrent; diff --git a/tests/ImageSharp.Tests/TestFileSystem.cs b/tests/ImageSharp.Tests/TestFileSystem.cs index 9211e70f7..7779e8d6e 100644 --- a/tests/ImageSharp.Tests/TestFileSystem.cs +++ b/tests/ImageSharp.Tests/TestFileSystem.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestFontUtilities.cs b/tests/ImageSharp.Tests/TestFontUtilities.cs index e087516c6..af648431f 100644 --- a/tests/ImageSharp.Tests/TestFontUtilities.cs +++ b/tests/ImageSharp.Tests/TestFontUtilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/TestFormat.cs b/tests/ImageSharp.Tests/TestFormat.cs index 783d6fa48..f3f4daa55 100644 --- a/tests/ImageSharp.Tests/TestFormat.cs +++ b/tests/ImageSharp.Tests/TestFormat.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index e18ef3eef..8815d8367 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs index eff29555c..ab7631066 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs b/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs index eceecb2c8..8dcc90640 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs index 3287311bf..65832660b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs index 85b178c73..f945feafa 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs index 1e4324e04..398963e63 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs index 051bfecdc..cbd61e052 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs index e896c1854..74c7b3851 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs index 170251389..98ad54424 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs index 60c8c8cef..02b2c7d62 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs index 5c67b5d13..0eb1b22d6 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs index 0f00f1d86..9c03c9983 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs b/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs index d7c54f35f..89264bdbe 100644 --- a/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs b/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs index 248755ea3..8d06c949a 100644 --- a/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs index 9b7ebe34a..e1ef383f3 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs index 626b698e1..005ae5825 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs index df1c1837b..2b4b1963c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison { diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs index d84f1c358..d0deed371 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison { diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs index 76c018f06..76ee3d501 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs index 2faeacf68..0e6271513 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs index 6452bc581..2c1363a07 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs index 36da98453..9ab2ce2a3 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs index 1025ed9a1..0cd25b10f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs index b8ad5c506..1e3b93874 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs index 48d7b80fb..4b7d1b89f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Concurrent; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs index 199cc4316..762ffdb05 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs index 45cf57064..4bbe4dc78 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs index 131647301..54a4877e6 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs index c652b32af..606e12ada 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs index 47b647329..dda7595cf 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs index e08dff525..386a0477f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs b/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs index b01ece7ba..a04e5384e 100644 --- a/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs +++ b/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs index 9d3427a06..c76934383 100644 --- a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs +++ b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs index 4708d70b0..a146e260c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs index eb6f5e8c5..92c4cecd6 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs index 254112339..05a1fbf84 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs index 563fe2cb3..34bec526b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs b/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs index 7c29ac4db..27088d928 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs index d49c34efd..592c47f9c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs index 4152d3bc6..f2e9fca5c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs index fbdb512de..f643f90da 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs b/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs index dd928cb75..709e9755d 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs b/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs index 3fd5f6e37..7e936fb65 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs b/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs index ba146b9e4..d4c63c011 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestType.cs b/tests/ImageSharp.Tests/TestUtilities/TestType.cs index 7643fb321..c950b19b5 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestType.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestType.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit.Abstractions; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs b/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs index 8af20a94f..5743682f6 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs b/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs index 8677184e3..484ec021b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Numerics; using Xunit.Abstractions; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs index 5039f0154..4798e953a 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs index f411e9b08..6bf435b51 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs index b977ca022..6464d0af4 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs index 6083b1fae..511fd1cc2 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using Xunit; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs index 9f9ea44f9..31681e442 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs index 4c0d5758f..dd777ba6f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs index 160b1fe40..8431b8556 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs index 30f7f1f16..0a48c4555 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs index 498f3edca..0390457a0 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Concurrent; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs index 821370b7a..27f43d004 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/VectorAssert.cs b/tests/ImageSharp.Tests/VectorAssert.cs index ba82eb1ac..92bc1e45d 100644 --- a/tests/ImageSharp.Tests/VectorAssert.cs +++ b/tests/ImageSharp.Tests/VectorAssert.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Collections.Generic; From 0f581ab5e6c763edc61603b27fdf5c4a5066a4c7 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 1 May 2020 09:19:23 +0200 Subject: [PATCH 050/130] Remove not needed image parameter from CalculateBitDepth --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 4 ++-- src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index d8509548a..12ffb2cfc 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -227,12 +227,12 @@ namespace SixLabors.ImageSharp.Formats.Png if (this.options.MakeTransparentBlack) { quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, clonedImage); - this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, clonedImage, quantized); + this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, quantized); } else { quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, image); - this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, image, quantized); + this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, quantized); } return quantized; diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs index 3f490ca6f..3a8e528cc 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs @@ -89,11 +89,9 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// The type of the pixel. /// The options. - /// The image. /// The quantized frame. public static byte CalculateBitDepth( PngEncoderOptions options, - Image image, IndexedImageFrame quantizedFrame) where TPixel : unmanaged, IPixel { From bc7eb2791d36d5c20ee0be6f38ba3001b7545067 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 1 May 2020 10:16:02 +0200 Subject: [PATCH 051/130] Add IgnoreMetadata to the png encoder options --- .../Formats/Png/IPngEncoderOptions.cs | 8 ++- src/ImageSharp/Formats/Png/PngChunkFilter.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoder.cs | 15 +++--- .../Formats/Png/PngEncoderOptions.cs | 8 +-- .../Formats/Png/PngEncoderOptionsHelpers.cs | 5 ++ .../Formats/Png/PngEncoderTests.Chunks.cs | 52 +++++++++++++++++++ 6 files changed, 76 insertions(+), 14 deletions(-) diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index e5d0b09cf..770afa3c5 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -59,7 +59,13 @@ namespace SixLabors.ImageSharp.Formats.Png PngInterlaceMode? InterlaceMethod { get; } /// - /// Gets chunk filter method. + /// Gets a value indicating whether the metadata should be ignored when the image is being encoded. + /// When set to true, all ancillary chunks will be skipped. + /// + bool IgnoreMetadata { get; } + + /// + /// Gets the chunk filter method. This allows to filter ancillary chunks. /// PngChunkFilter? ChunkFilter { get; } diff --git a/src/ImageSharp/Formats/Png/PngChunkFilter.cs b/src/ImageSharp/Formats/Png/PngChunkFilter.cs index 04f27fb73..31d3012a6 100644 --- a/src/ImageSharp/Formats/Png/PngChunkFilter.cs +++ b/src/ImageSharp/Formats/Png/PngChunkFilter.cs @@ -37,7 +37,7 @@ namespace SixLabors.ImageSharp.Formats.Png ExcludeTextChunks = 1 << 3, /// - /// All possible optimizations. + /// All ancillary chunks will be excluded. /// ExcludeAll = ~None } diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 53cec6e4e..062e56c1d 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -34,22 +34,19 @@ namespace SixLabors.ImageSharp.Formats.Png /// public IQuantizer Quantizer { get; set; } - /// - /// Gets or sets the transparency threshold. - /// + /// public byte Threshold { get; set; } = byte.MaxValue; /// public PngInterlaceMode? InterlaceMethod { get; set; } - /// - /// Gets or sets the chunk filter. This can be used to exclude some ancillary chunks from being written. - /// + /// public PngChunkFilter? ChunkFilter { get; set; } - /// - /// Gets or sets a value indicating whether fully transparent pixels should be converted to black pixels. - /// + /// + public bool IgnoreMetadata { get; set; } + + /// public bool MakeTransparentBlack { get; set; } /// diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index 2b43edd12..d0eb1a843 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -30,6 +30,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.Threshold = source.Threshold; this.InterlaceMethod = source.InterlaceMethod; this.ChunkFilter = source.ChunkFilter; + this.IgnoreMetadata = source.IgnoreMetadata; this.MakeTransparentBlack = source.MakeTransparentBlack; } @@ -60,11 +61,12 @@ namespace SixLabors.ImageSharp.Formats.Png /// public PngInterlaceMode? InterlaceMethod { get; set; } - /// - /// Gets or sets a the optimize method. - /// + /// public PngChunkFilter? ChunkFilter { get; set; } + /// + public bool IgnoreMetadata { get; set; } + /// public bool MakeTransparentBlack { get; set; } } diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs index 3a8e528cc..52d7fe6d0 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs @@ -40,6 +40,11 @@ namespace SixLabors.ImageSharp.Formats.Png use16Bit = options.BitDepth == PngBitDepth.Bit16; bytesPerPixel = CalculateBytesPerPixel(options.ColorType, use16Bit); + if (options.IgnoreMetadata) + { + options.ChunkFilter = PngChunkFilter.ExcludeAll; + } + // Ensure we are not allowing impossible combinations. if (!PngConstants.ColorTypes.ContainsKey(options.ColorType.Value)) { diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs index fa1544816..0418b36c8 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs @@ -144,6 +144,58 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } + [Fact] + public void IgnoreMetadata_WillExcludeAllAncillaryChunks() + { + // arrange + var testFile = TestFile.Create(TestImages.Png.PngWithMetadata); + using Image input = testFile.CreateRgba32Image(); + using var memStream = new MemoryStream(); + var encoder = new PngEncoder() { IgnoreMetadata = true, TextCompressionThreshold = 8 }; + var expectedChunkTypes = new Dictionary() + { + { PngChunkType.Header, false }, + { PngChunkType.Palette, false }, + { PngChunkType.Data, false }, + { PngChunkType.End, false } + }; + var excludedChunkTypes = new List() + { + PngChunkType.Gamma, + PngChunkType.Exif, + PngChunkType.Physical, + PngChunkType.Text, + PngChunkType.InternationalText, + PngChunkType.CompressedText, + }; + + // act + input.Save(memStream, encoder); + + // assert + Assert.True(excludedChunkTypes.Count > 0); + memStream.Position = 0; + Span bytesSpan = memStream.ToArray().AsSpan(8); // Skip header. + while (bytesSpan.Length > 0) + { + int length = BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(0, 4)); + var chunkType = (PngChunkType)BinaryPrimitives.ReadInt32BigEndian(bytesSpan.Slice(4, 4)); + Assert.False(excludedChunkTypes.Contains(chunkType), $"{chunkType} chunk should have been excluded"); + if (expectedChunkTypes.ContainsKey(chunkType)) + { + expectedChunkTypes[chunkType] = true; + } + + bytesSpan = bytesSpan.Slice(4 + 4 + length + 4); + } + + // all expected chunk types should have been seen at least once. + foreach (PngChunkType chunkType in expectedChunkTypes.Keys) + { + Assert.True(expectedChunkTypes[chunkType], $"We expect {chunkType} chunk to be present at least once"); + } + } + [Theory] [InlineData(PngChunkFilter.ExcludeGammaChunk)] [InlineData(PngChunkFilter.ExcludeExifChunk)] From ec3656ff7a189acc6adf3d2f7df04aef22d5f4ef Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 1 May 2020 10:38:47 +0200 Subject: [PATCH 052/130] Add PngTransparentColorBehavior enum --- .../Formats/Png/IPngEncoderOptions.cs | 5 +++-- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 15 +++++++------ .../Formats/Png/PngEncoderOptions.cs | 4 ++-- .../Png/PngTransparentColorBehavior.cs | 22 +++++++++++++++++++ .../Formats/Png/PngEncoderTests.cs | 8 +++---- 6 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 770afa3c5..ca9d5757f 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -70,8 +70,9 @@ namespace SixLabors.ImageSharp.Formats.Png PngChunkFilter? ChunkFilter { get; } /// - /// Gets a value indicating whether fully transparent pixels should be converted to black pixels. + /// Gets a value indicating whether fully transparent pixels that may contain R, G, B values which are not 0, + /// should be converted to transparent black, which can yield in better compression in some cases. /// - bool MakeTransparentBlack { get; } + PngTransparentColorBehavior TransparentColorBehavior { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 062e56c1d..d4ca4b7df 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -47,7 +47,7 @@ namespace SixLabors.ImageSharp.Formats.Png public bool IgnoreMetadata { get; set; } /// - public bool MakeTransparentBlack { get; set; } + public PngTransparentColorBehavior TransparentColorBehavior { get; set; } /// /// Encodes the image to the specified stream from the . diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 12ffb2cfc..05c17f376 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -145,10 +145,11 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); Image clonedImage = null; - if (this.options.MakeTransparentBlack) + bool clearTransparency = this.options.TransparentColorBehavior == PngTransparentColorBehavior.Clear; + if (clearTransparency) { clonedImage = image.Clone(); - MakeTransparentPixelsBlack(clonedImage); + ClearTransparentPixels(clonedImage); } IndexedImageFrame quantized = this.CreateQuantizedImage(image, clonedImage); @@ -162,7 +163,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.WritePhysicalChunk(stream, metadata); this.WriteExifChunk(stream, metadata); this.WriteTextChunks(stream, pngMetadata); - this.WriteDataChunks(this.options.MakeTransparentBlack ? clonedImage : image, quantized, stream); + this.WriteDataChunks(clearTransparency ? clonedImage : image, quantized, stream); this.WriteEndChunk(stream); stream.Flush(); @@ -190,11 +191,11 @@ namespace SixLabors.ImageSharp.Formats.Png } /// - /// Makes transparent pixels black. + /// Convert transparent pixels, to transparent black pixels, which can yield to better compression in some cases. /// /// The type of the pixel. /// The cloned image where the transparent pixels will be changed. - private static void MakeTransparentPixelsBlack(Image image) + private static void ClearTransparentPixels(Image image) where TPixel : unmanaged, IPixel { Rgba32 rgba32 = default; @@ -207,7 +208,7 @@ namespace SixLabors.ImageSharp.Formats.Png if (rgba32.A == 0) { - span[x].FromRgba32(Color.Black); + span[x].FromRgba32(Color.Transparent); } } } @@ -224,7 +225,7 @@ namespace SixLabors.ImageSharp.Formats.Png where TPixel : unmanaged, IPixel { IndexedImageFrame quantized; - if (this.options.MakeTransparentBlack) + if (this.options.TransparentColorBehavior == PngTransparentColorBehavior.Clear) { quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, clonedImage); this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, quantized); diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index d0eb1a843..e46dafada 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -31,7 +31,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.InterlaceMethod = source.InterlaceMethod; this.ChunkFilter = source.ChunkFilter; this.IgnoreMetadata = source.IgnoreMetadata; - this.MakeTransparentBlack = source.MakeTransparentBlack; + this.TransparentColorBehavior = source.TransparentColorBehavior; } /// @@ -68,6 +68,6 @@ namespace SixLabors.ImageSharp.Formats.Png public bool IgnoreMetadata { get; set; } /// - public bool MakeTransparentBlack { get; set; } + public PngTransparentColorBehavior TransparentColorBehavior { get; set; } } } diff --git a/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs b/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs new file mode 100644 index 000000000..b459751c4 --- /dev/null +++ b/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs @@ -0,0 +1,22 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +namespace SixLabors.ImageSharp.Formats.Png +{ + /// + /// Enum indicating how the transparency should be handled on encoding. + /// + public enum PngTransparentColorBehavior + { + /// + /// Converts fully transparent pixels that may contain R, G, B values which are not 0, + /// to transparent black, which can yield in better compression in some cases. + /// + Clear, + + /// + /// The transparency will be kept as is. + /// + Preserve + } +} diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 857445260..d29279b29 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -392,17 +392,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png [Theory] [InlineData(PngColorType.Palette)] - [InlineData(PngColorType.Rgb)] [InlineData(PngColorType.RgbWithAlpha)] - [InlineData(PngColorType.Grayscale)] [InlineData(PngColorType.GrayscaleWithAlpha)] - public void Encode_WithMakeTransparentBlackOption_Works(PngColorType colorType) + public void Encode_WithPngTransparentColorBehaviorClear_Works(PngColorType colorType) { // arrange var image = new Image(50, 50); var encoder = new PngEncoder() { - MakeTransparentBlack = true, + TransparentColorBehavior = PngTransparentColorBehavior.Clear, ColorType = colorType }; Rgba32 rgba32 = Color.Blue; @@ -442,7 +440,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png if (y > 25) { - expectedColor = Color.Black; + expectedColor = Color.Transparent; } for (int x = 0; x < actual.Width; x++) From 129b6392d5161c8686aea1cda13349fa78ee231d Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 1 May 2020 10:50:17 +0200 Subject: [PATCH 053/130] Switched Preserve to be 0 for PngTransparentColorBehavior enum --- src/ImageSharp/Formats/Png/PngChunkFilter.cs | 2 +- .../Formats/Png/PngTransparentColorBehavior.cs | 10 +++++----- .../Formats/Png/PngEncoderTests.Chunks.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngChunkFilter.cs b/src/ImageSharp/Formats/Png/PngChunkFilter.cs index 31d3012a6..4e8b5ab96 100644 --- a/src/ImageSharp/Formats/Png/PngChunkFilter.cs +++ b/src/ImageSharp/Formats/Png/PngChunkFilter.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; diff --git a/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs b/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs index b459751c4..a288ecab5 100644 --- a/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs +++ b/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs @@ -9,14 +9,14 @@ namespace SixLabors.ImageSharp.Formats.Png public enum PngTransparentColorBehavior { /// - /// Converts fully transparent pixels that may contain R, G, B values which are not 0, - /// to transparent black, which can yield in better compression in some cases. + /// The transparency will be kept as is. /// - Clear, + Preserve = 0, /// - /// The transparency will be kept as is. + /// Converts fully transparent pixels that may contain R, G, B values which are not 0, + /// to transparent black, which can yield in better compression in some cases. /// - Preserve + Clear = 1, } } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs index 0418b36c8..fa63f73e0 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs @@ -1,5 +1,5 @@ // Copyright (c) Six Labors and contributors. -// Licensed under the Apache License, Version 2.0. +// Licensed under the GNU Affero General Public License, Version 3. using System; using System.Buffers.Binary; From b69d772659bcac29bdc4b51cb31c29415c97df63 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 1 May 2020 12:12:04 +0200 Subject: [PATCH 054/130] Rename PngTransparentColorBehavior to PngTransparentColorMode --- src/ImageSharp/Formats/Png/IPngEncoderOptions.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 4 ++-- src/ImageSharp/Formats/Png/PngEncoderOptions.cs | 4 ++-- ...TransparentColorBehavior.cs => PngTransparentColorMode.cs} | 2 +- tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename src/ImageSharp/Formats/Png/{PngTransparentColorBehavior.cs => PngTransparentColorMode.cs} (93%) diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 409a306dd..66117371e 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -73,6 +73,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// Gets a value indicating whether fully transparent pixels that may contain R, G, B values which are not 0, /// should be converted to transparent black, which can yield in better compression in some cases. /// - PngTransparentColorBehavior TransparentColorBehavior { get; } + PngTransparentColorMode TransparentColorMode { get; } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index a7f035617..9b1fc80e0 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -47,7 +47,7 @@ namespace SixLabors.ImageSharp.Formats.Png public bool IgnoreMetadata { get; set; } /// - public PngTransparentColorBehavior TransparentColorBehavior { get; set; } + public PngTransparentColorMode TransparentColorMode { get; set; } /// /// Encodes the image to the specified stream from the . diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index ba5dd663d..6c30550c2 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -145,7 +145,7 @@ namespace SixLabors.ImageSharp.Formats.Png PngMetadata pngMetadata = metadata.GetFormatMetadata(PngFormat.Instance); PngEncoderOptionsHelpers.AdjustOptions(this.options, pngMetadata, out this.use16Bit, out this.bytesPerPixel); Image clonedImage = null; - bool clearTransparency = this.options.TransparentColorBehavior == PngTransparentColorBehavior.Clear; + bool clearTransparency = this.options.TransparentColorMode == PngTransparentColorMode.Clear; if (clearTransparency) { clonedImage = image.Clone(); @@ -225,7 +225,7 @@ namespace SixLabors.ImageSharp.Formats.Png where TPixel : unmanaged, IPixel { IndexedImageFrame quantized; - if (this.options.TransparentColorBehavior == PngTransparentColorBehavior.Clear) + if (this.options.TransparentColorMode == PngTransparentColorMode.Clear) { quantized = PngEncoderOptionsHelpers.CreateQuantizedFrame(this.options, clonedImage); this.bitDepth = PngEncoderOptionsHelpers.CalculateBitDepth(this.options, quantized); diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index 916610674..53e6ee30f 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -31,7 +31,7 @@ namespace SixLabors.ImageSharp.Formats.Png this.InterlaceMethod = source.InterlaceMethod; this.ChunkFilter = source.ChunkFilter; this.IgnoreMetadata = source.IgnoreMetadata; - this.TransparentColorBehavior = source.TransparentColorBehavior; + this.TransparentColorMode = source.TransparentColorMode; } /// @@ -68,6 +68,6 @@ namespace SixLabors.ImageSharp.Formats.Png public bool IgnoreMetadata { get; set; } /// - public PngTransparentColorBehavior TransparentColorBehavior { get; set; } + public PngTransparentColorMode TransparentColorMode { get; set; } } } diff --git a/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs b/src/ImageSharp/Formats/Png/PngTransparentColorMode.cs similarity index 93% rename from src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs rename to src/ImageSharp/Formats/Png/PngTransparentColorMode.cs index a288ecab5..63967c153 100644 --- a/src/ImageSharp/Formats/Png/PngTransparentColorBehavior.cs +++ b/src/ImageSharp/Formats/Png/PngTransparentColorMode.cs @@ -6,7 +6,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Enum indicating how the transparency should be handled on encoding. /// - public enum PngTransparentColorBehavior + public enum PngTransparentColorMode { /// /// The transparency will be kept as is. diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 419bb8c05..4f2490f9a 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -400,7 +400,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png var image = new Image(50, 50); var encoder = new PngEncoder() { - TransparentColorBehavior = PngTransparentColorBehavior.Clear, + TransparentColorMode = PngTransparentColorMode.Clear, ColorType = colorType }; Rgba32 rgba32 = Color.Blue; From 9bbd505e263a4324bdb47a2244116f8ab050f6be Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Sun, 3 May 2020 13:14:58 +0100 Subject: [PATCH 055/130] Add Async APIs to IImageEncoder and IImageDecoder --- src/ImageSharp/Formats/Bmp/BmpDecoder.cs | 32 +++++++++++++++ src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs | 41 ++++++++++++++++++- src/ImageSharp/Formats/Bmp/BmpEncoder.cs | 13 +++++- src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs | 21 +++++++++- src/ImageSharp/Formats/Gif/GifDecoder.cs | 35 ++++++++++++++++ src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 35 +++++++++++++++- src/ImageSharp/Formats/Gif/GifEncoder.cs | 9 ++++ src/ImageSharp/Formats/Gif/GifEncoderCore.cs | 20 ++++++++- src/ImageSharp/Formats/IImageDecoder.cs | 21 ++++++++++ src/ImageSharp/Formats/IImageEncoder.cs | 12 +++++- src/ImageSharp/Formats/IImageInfoDetector.cs | 13 +++++- src/ImageSharp/Formats/Jpeg/JpegDecoder.cs | 38 +++++++++++++++++ .../Formats/Jpeg/JpegDecoderCore.cs | 34 ++++++++++++++- src/ImageSharp/Formats/Jpeg/JpegEncoder.cs | 23 ++++++++++- .../Formats/Jpeg/JpegEncoderCore.cs | 3 +- src/ImageSharp/Formats/Png/PngDecoder.cs | 38 +++++++++++++++++ src/ImageSharp/Formats/Png/PngDecoderCore.cs | 41 ++++++++++++++++++- src/ImageSharp/Formats/Png/PngEncoder.cs | 16 ++++++++ src/ImageSharp/Formats/Png/PngEncoderCore.cs | 20 ++++++++- src/ImageSharp/Formats/Tga/TgaDecoder.cs | 35 ++++++++++++++++ src/ImageSharp/Formats/Tga/TgaDecoderCore.cs | 38 ++++++++++++++++- src/ImageSharp/Formats/Tga/TgaEncoder.cs | 10 ++++- src/ImageSharp/Formats/Tga/TgaEncoderCore.cs | 19 ++++++++- tests/ImageSharp.Tests/TestFormat.cs | 17 +++++++- .../ReferenceCodecs/MagickReferenceDecoder.cs | 8 +++- .../SystemDrawingReferenceDecoder.cs | 12 +++++- .../SystemDrawingReferenceEncoder.cs | 15 ++++++- .../Tests/TestImageProviderTests.cs | 32 ++++++++++++++- 28 files changed, 623 insertions(+), 28 deletions(-) diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs index 6547fe76a..2699331cc 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -27,6 +28,26 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// public RleSkippedPixelHandling RleSkippedPixelHandling { get; set; } = RleSkippedPixelHandling.Black; + /// + public async Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + Guard.NotNull(stream, nameof(stream)); + + var decoder = new BmpDecoderCore(configuration, this); + + try + { + return await decoder.DecodeAsync(stream).ConfigureAwait(false); + } + catch (InvalidMemoryOperationException ex) + { + Size dims = decoder.Dimensions; + + throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}. This error can happen for very large RLE bitmaps, which are not supported.", ex); + } + } + /// public Image Decode(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel @@ -50,6 +71,9 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + /// + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream).ConfigureAwait(false); + /// public IImageInfo Identify(Configuration configuration, Stream stream) { @@ -57,5 +81,13 @@ namespace SixLabors.ImageSharp.Formats.Bmp return new BmpDecoderCore(configuration, this).Identify(stream); } + + /// + public async Task IdentifyAsync(Configuration configuration, Stream stream) + { + Guard.NotNull(stream, nameof(stream)); + + return await new BmpDecoderCore(configuration, this).IdentifyAsync(stream).ConfigureAwait(false); + } } } diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs index 0661f3145..b5ae055a9 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs @@ -7,6 +7,7 @@ using System.Buffers.Binary; using System.IO; using System.Numerics; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using SixLabors.ImageSharp.Common.Helpers; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; @@ -130,8 +131,32 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// is null. /// /// The decoded image. - public Image Decode(Stream stream) + public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel + { + // cheat for now do async copy of the stream into memory stream and use the sync version + // we should use an array pool backed memorystream implementation + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } + } + + /// + /// Decodes the image from the specified this._stream and sets + /// the data to image. + /// + /// The pixel format. + /// The stream, where the image should be + /// decoded from. Cannot be null (Nothing in Visual Basic). + /// + /// is null. + /// + /// The decoded image. + public Image Decode(Stream stream) + where TPixel : unmanaged, IPixel { try { @@ -218,6 +243,20 @@ namespace SixLabors.ImageSharp.Formats.Bmp return new ImageInfo(new PixelTypeInfo(this.infoHeader.BitsPerPixel), this.infoHeader.Width, this.infoHeader.Height, this.metadata); } + /// + /// Reads the raw image information from the specified stream. + /// + /// The containing image data. + public async Task IdentifyAsync(Stream stream) + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } + } + /// /// Returns the y- value based on the given height. /// diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs index fbc94a73f..52b87ef27 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs @@ -1,7 +1,8 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Quantization; @@ -39,5 +40,13 @@ namespace SixLabors.ImageSharp.Formats.Bmp var encoder = new BmpEncoderCore(this, image.GetMemoryAllocator()); encoder.Encode(image, stream); } + + /// + public Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + var encoder = new BmpEncoderCore(this, image.GetMemoryAllocator()); + return encoder.EncodeAsync(image, stream); + } } -} \ No newline at end of file +} diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs index cc07c4d87..3e10eedbb 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs @@ -5,7 +5,7 @@ using System; using System.Buffers; using System.IO; using System.Runtime.InteropServices; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Common.Helpers; using SixLabors.ImageSharp.Memory; @@ -97,8 +97,25 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// The pixel format. /// The to encode from. /// The to encode the image data to. - public void Encode(Image image, Stream stream) + public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } + } + + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + public void Encode(Image image, Stream stream) + where TPixel : unmanaged, IPixel { Guard.NotNull(image, nameof(image)); Guard.NotNull(stream, nameof(stream)); diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index faa2498d1..e5de1c028 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -24,6 +25,27 @@ namespace SixLabors.ImageSharp.Formats.Gif /// public FrameDecodingMode DecodingMode { get; set; } = FrameDecodingMode.All; + /// + public async Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + var decoder = new GifDecoderCore(configuration, this); + + try + { + return await decoder.DecodeAsync(stream).ConfigureAwait(false); + } + catch (InvalidMemoryOperationException ex) + { + Size dims = decoder.Dimensions; + + GifThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; + } + } + /// public Image Decode(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel @@ -54,7 +76,20 @@ namespace SixLabors.ImageSharp.Formats.Gif return decoder.Identify(stream); } + + /// + public async Task IdentifyAsync(Configuration configuration, Stream stream) + { + Guard.NotNull(stream, nameof(stream)); + + var decoder = new GifDecoderCore(configuration, this); + return await decoder.IdentifyAsync(stream).ConfigureAwait(false); + } + /// public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + /// + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream).ConfigureAwait(false); } } diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index 81aa55695..fdac0e2ae 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -6,7 +6,7 @@ using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -103,8 +103,25 @@ namespace SixLabors.ImageSharp.Formats.Gif /// The pixel format. /// The stream containing image data. /// The decoded image - public Image Decode(Stream stream) + public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } + } + + /// + /// Decodes the stream to the image. + /// + /// The pixel format. + /// The stream containing image data. + /// The decoded image + public Image Decode(Stream stream) + where TPixel : unmanaged, IPixel { Image image = null; ImageFrame previousFrame = null; @@ -163,6 +180,20 @@ namespace SixLabors.ImageSharp.Formats.Gif return image; } + /// + /// Reads the raw image information from the specified stream. + /// + /// The containing image data. + public async Task IdentifyAsync(Stream stream) + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } + } + /// /// Reads the raw image information from the specified stream. /// diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index 762fc03fc..8d4c33eff 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; @@ -38,5 +39,13 @@ namespace SixLabors.ImageSharp.Formats.Gif var encoder = new GifEncoderCore(image.GetConfiguration(), this); encoder.Encode(image, stream); } + + /// + public Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + var encoder = new GifEncoderCore(image.GetConfiguration(), this); + return encoder.EncodeAsync(image, stream); + } } } diff --git a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs index 34c92a180..46fd7e16a 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs @@ -6,6 +6,7 @@ using System.Buffers; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; @@ -74,8 +75,25 @@ namespace SixLabors.ImageSharp.Formats.Gif /// The pixel format. /// The to encode from. /// The to encode the image data to. - public void Encode(Image image, Stream stream) + public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } + } + + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + public void Encode(Image image, Stream stream) + where TPixel : unmanaged, IPixel { Guard.NotNull(image, nameof(image)); Guard.NotNull(stream, nameof(stream)); diff --git a/src/ImageSharp/Formats/IImageDecoder.cs b/src/ImageSharp/Formats/IImageDecoder.cs index 4f17f6729..cc5a87f07 100644 --- a/src/ImageSharp/Formats/IImageDecoder.cs +++ b/src/ImageSharp/Formats/IImageDecoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats @@ -30,5 +31,25 @@ namespace SixLabors.ImageSharp.Formats /// The . // TODO: Document ImageFormatExceptions (https://github.com/SixLabors/ImageSharp/issues/1110) Image Decode(Configuration configuration, Stream stream); + + /// + /// Decodes the image from the specified stream to an of a specific pixel type. + /// + /// The pixel format. + /// The configuration for the image. + /// The containing image data. + /// The . + // TODO: Document ImageFormatExceptions (https://github.com/SixLabors/ImageSharp/issues/1110) + Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel; + + /// + /// Decodes the image from the specified stream to an . + /// + /// The configuration for the image. + /// The containing image data. + /// The . + // TODO: Document ImageFormatExceptions (https://github.com/SixLabors/ImageSharp/issues/1110) + Task DecodeAsync(Configuration configuration, Stream stream); } } diff --git a/src/ImageSharp/Formats/IImageEncoder.cs b/src/ImageSharp/Formats/IImageEncoder.cs index 01478eb3e..f4d9b2793 100644 --- a/src/ImageSharp/Formats/IImageEncoder.cs +++ b/src/ImageSharp/Formats/IImageEncoder.cs @@ -1,7 +1,8 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats @@ -19,5 +20,14 @@ namespace SixLabors.ImageSharp.Formats /// The to encode the image data to. void Encode(Image image, Stream stream) where TPixel : unmanaged, IPixel; + + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel; } } diff --git a/src/ImageSharp/Formats/IImageInfoDetector.cs b/src/ImageSharp/Formats/IImageInfoDetector.cs index 2bd33c616..b231e6777 100644 --- a/src/ImageSharp/Formats/IImageInfoDetector.cs +++ b/src/ImageSharp/Formats/IImageInfoDetector.cs @@ -1,7 +1,8 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; namespace SixLabors.ImageSharp.Formats { @@ -17,5 +18,13 @@ namespace SixLabors.ImageSharp.Formats /// The containing image data. /// The object IImageInfo Identify(Configuration configuration, Stream stream); + + /// + /// Reads the raw image information from the specified stream. + /// + /// The configuration for the image. + /// The containing image data. + /// The object + Task IdentifyAsync(Configuration configuration, Stream stream); } -} \ No newline at end of file +} diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs index 97f455c6f..09bf77022 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -17,6 +18,28 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// public bool IgnoreMetadata { get; set; } + /// + public async Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + Guard.NotNull(stream, nameof(stream)); + + using var decoder = new JpegDecoderCore(configuration, this); + try + { + return await decoder.DecodeAsync(stream); + } + catch (InvalidMemoryOperationException ex) + { + (int w, int h) = (decoder.ImageWidth, decoder.ImageHeight); + + JpegThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; + } + } + /// public Image Decode(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel @@ -43,6 +66,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + /// + public async Task DecodeAsync(Configuration configuration, Stream stream) + => await this.DecodeAsync(configuration, stream).ConfigureAwait(false); + /// public IImageInfo Identify(Configuration configuration, Stream stream) { @@ -53,5 +80,16 @@ namespace SixLabors.ImageSharp.Formats.Jpeg return decoder.Identify(stream); } } + + /// + public async Task IdentifyAsync(Configuration configuration, Stream stream) + { + Guard.NotNull(stream, nameof(stream)); + + using (var decoder = new JpegDecoderCore(configuration, this)) + { + return await decoder.IdentifyAsync(stream).ConfigureAwait(false); + } + } } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index a754bfd2e..2f9495267 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -6,6 +6,7 @@ using System.Buffers.Binary; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using System.Threading.Tasks; using SixLabors.ImageSharp.Common.Helpers; using SixLabors.ImageSharp.Formats.Jpeg.Components; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; @@ -218,8 +219,25 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// The pixel format. /// The stream, where the image should be. /// The decoded image. - public Image Decode(Stream stream) + public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } + } + + /// + /// Decodes the image from the specified and sets the data to image. + /// + /// The pixel format. + /// The stream, where the image should be. + /// The decoded image. + public Image Decode(Stream stream) + where TPixel : unmanaged, IPixel { this.ParseStream(stream); this.InitExifProfile(); @@ -229,6 +247,20 @@ namespace SixLabors.ImageSharp.Formats.Jpeg return this.PostProcessIntoImage(); } + /// + /// Reads the raw image information from the specified stream. + /// + /// The containing image data. + public async Task IdentifyAsync(Stream stream) + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } + } + /// /// Reads the raw image information from the specified stream. /// diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs index 9f3d04a8a..e87f9ce75 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs @@ -1,7 +1,8 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats.Jpeg @@ -35,5 +36,25 @@ namespace SixLabors.ImageSharp.Formats.Jpeg var encoder = new JpegEncoderCore(this); encoder.Encode(image, stream); } + + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + public async Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + var encoder = new JpegEncoderCore(this); + + // this hack has to be be here because JpegEncoderCore is unsafe + using (var ms = new MemoryStream()) + { + encoder.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } + } } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs index 21bf538ec..44f9ba1df 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs @@ -6,6 +6,7 @@ using System.Buffers.Binary; using System.IO; using System.Linq; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using SixLabors.ImageSharp.Common.Helpers; using SixLabors.ImageSharp.Formats.Jpeg.Components; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; @@ -194,7 +195,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// The image to write from. /// The stream to write to. public void Encode(Image image, Stream stream) - where TPixel : unmanaged, IPixel + where TPixel : unmanaged, IPixel { Guard.NotNull(image, nameof(image)); Guard.NotNull(stream, nameof(stream)); diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs index b2e243997..b33a0b1dd 100644 --- a/src/ImageSharp/Formats/Png/PngDecoder.cs +++ b/src/ImageSharp/Formats/Png/PngDecoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -34,6 +35,33 @@ namespace SixLabors.ImageSharp.Formats.Png /// public bool IgnoreMetadata { get; set; } + /// + /// Decodes the image from the specified stream to the . + /// + /// The pixel format. + /// The configuration for the image. + /// The containing image data. + /// The decoded image. + public async Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + var decoder = new PngDecoderCore(configuration, this); + + try + { + return await decoder.DecodeAsync(stream).ConfigureAwait(false); + } + catch (InvalidMemoryOperationException ex) + { + Size dims = decoder.Dimensions; + + PngThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; + } + } + /// /// Decodes the image from the specified stream to the . /// @@ -68,7 +96,17 @@ namespace SixLabors.ImageSharp.Formats.Png return decoder.Identify(stream); } + /// + public async Task IdentifyAsync(Configuration configuration, Stream stream) + { + var decoder = new PngDecoderCore(configuration, this); + return await decoder.IdentifyAsync(stream).ConfigureAwait(false); + } + /// public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + /// + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream).ConfigureAwait(false); } } diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index d6ba08895..f610f5750 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -9,7 +9,7 @@ using System.IO.Compression; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats.Png.Chunks; using SixLabors.ImageSharp.Formats.Png.Filters; using SixLabors.ImageSharp.Formats.Png.Zlib; @@ -149,8 +149,31 @@ namespace SixLabors.ImageSharp.Formats.Png /// Thrown if the image is larger than the maximum allowable size. /// /// The decoded image. - public Image Decode(Stream stream) + public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } + } + + /// + /// Decodes the stream to the image. + /// + /// The pixel format. + /// The stream containing image data. + /// + /// Thrown if the stream does not contain and end chunk. + /// + /// + /// Thrown if the image is larger than the maximum allowable size. + /// + /// The decoded image. + public Image Decode(Stream stream) + where TPixel : unmanaged, IPixel { var metadata = new ImageMetadata(); PngMetadata pngMetadata = metadata.GetPngMetadata(); @@ -240,6 +263,20 @@ namespace SixLabors.ImageSharp.Formats.Png } } + /// + /// Reads the raw image information from the specified stream. + /// + /// The containing image data. + public async Task IdentifyAsync(Stream stream) + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } + } + /// /// Reads the raw image information from the specified stream. /// diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index bee021550..a2c2ca100 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Quantization; @@ -56,5 +57,20 @@ namespace SixLabors.ImageSharp.Formats.Png encoder.Encode(image, stream); } } + + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + public async Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + using (var encoder = new PngEncoderCore(image.GetMemoryAllocator(), image.GetConfiguration(), new PngEncoderOptions(this))) + { + await encoder.EncodeAsync(image, stream); + } + } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index c15038847..1c8696fc1 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -7,6 +7,7 @@ using System.Buffers.Binary; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats.Png.Chunks; using SixLabors.ImageSharp.Formats.Png.Filters; @@ -131,8 +132,25 @@ namespace SixLabors.ImageSharp.Formats.Png /// The pixel format. /// The to encode from. /// The to encode the image data to. - public void Encode(Image image, Stream stream) + public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } + } + + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + public void Encode(Image image, Stream stream) + where TPixel : unmanaged, IPixel { Guard.NotNull(image, nameof(image)); Guard.NotNull(stream, nameof(stream)); diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index abfaba629..5cd7ca7b0 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -2,6 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -12,6 +13,29 @@ namespace SixLabors.ImageSharp.Formats.Tga /// public sealed class TgaDecoder : IImageDecoder, ITgaDecoderOptions, IImageInfoDetector { + /// + public async Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + Guard.NotNull(stream, nameof(stream)); + + var decoder = new TgaDecoderCore(configuration, this); + + try + { + return await decoder.DecodeAsync(stream).ConfigureAwait(false); + } + catch (InvalidMemoryOperationException ex) + { + Size dims = decoder.Dimensions; + + TgaThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); + + // Not reachable, as the previous statement will throw a exception. + return null; + } + } + /// public Image Decode(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel @@ -38,6 +62,9 @@ namespace SixLabors.ImageSharp.Formats.Tga /// public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + /// + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream).ConfigureAwait(false); + /// public IImageInfo Identify(Configuration configuration, Stream stream) { @@ -45,5 +72,13 @@ namespace SixLabors.ImageSharp.Formats.Tga return new TgaDecoderCore(configuration, this).Identify(stream); } + + /// + public Task IdentifyAsync(Configuration configuration, Stream stream) + { + Guard.NotNull(stream, nameof(stream)); + + return new TgaDecoderCore(configuration, this).IdentifyAsync(stream); + } } } diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index ead053572..808139e59 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -5,7 +5,7 @@ using System; using System.Buffers; using System.IO; using System.Runtime.CompilerServices; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -88,8 +88,28 @@ namespace SixLabors.ImageSharp.Formats.Tga /// is null. /// /// The decoded image. - public Image Decode(Stream stream) + public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } + } + + /// + /// Decodes the image from the specified stream. + /// + /// The pixel format. + /// The stream, where the image should be decoded from. Cannot be null. + /// + /// is null. + /// + /// The decoded image. + public Image Decode(Stream stream) + where TPixel : unmanaged, IPixel { try { @@ -650,6 +670,20 @@ namespace SixLabors.ImageSharp.Formats.Tga } } + /// + /// Reads the raw image information from the specified stream. + /// + /// The containing image data. + public async Task IdentifyAsync(Stream stream) + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } + } + /// /// Reads the raw image information from the specified stream. /// diff --git a/src/ImageSharp/Formats/Tga/TgaEncoder.cs b/src/ImageSharp/Formats/Tga/TgaEncoder.cs index 6280b2ae6..058dd3559 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoder.cs @@ -2,7 +2,7 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; @@ -30,5 +30,13 @@ namespace SixLabors.ImageSharp.Formats.Tga var encoder = new TgaEncoderCore(this, image.GetMemoryAllocator()); encoder.Encode(image, stream); } + + /// + public Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + var encoder = new TgaEncoderCore(this, image.GetMemoryAllocator()); + return encoder.EncodeAsync(image, stream); + } } } diff --git a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs index aee3a26cc..3b16048f3 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs @@ -5,7 +5,7 @@ using System; using System.Buffers.Binary; using System.IO; using System.Runtime.CompilerServices; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; @@ -55,6 +55,23 @@ namespace SixLabors.ImageSharp.Formats.Tga this.compression = options.Compression; } + /// + /// Encodes the image to the specified stream from the . + /// + /// The pixel format. + /// The to encode from. + /// The to encode the image data to. + public async Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } + } + /// /// Encodes the image to the specified stream from the . /// diff --git a/tests/ImageSharp.Tests/TestFormat.cs b/tests/ImageSharp.Tests/TestFormat.cs index f3f4daa55..c5a80cfb8 100644 --- a/tests/ImageSharp.Tests/TestFormat.cs +++ b/tests/ImageSharp.Tests/TestFormat.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Numerics; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.PixelFormats; using Xunit; @@ -187,7 +187,7 @@ namespace SixLabors.ImageSharp.Tests } } - public class TestDecoder : ImageSharp.Formats.IImageDecoder + public class TestDecoder : IImageDecoder { private TestFormat testFormat; @@ -219,9 +219,15 @@ namespace SixLabors.ImageSharp.Tests return this.testFormat.Sample(); } + public Task> DecodeAsync(Configuration config, Stream stream) + where TPixel : unmanaged, IPixel + => Task.FromResult(this.Decode(config, stream)); + public bool IsSupportedFileFormat(Span header) => this.testFormat.IsSupportedFileFormat(header); public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream); } public class TestEncoder : ImageSharp.Formats.IImageEncoder @@ -242,6 +248,13 @@ namespace SixLabors.ImageSharp.Tests { // TODO record this happened so we can verify it. } + + public Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + // TODO record this happened so we can verify it. + return Task.CompletedTask; + } } public struct TestPixelForAgnosticDecode : IPixel diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs index a146e260c..f013ccc91 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs @@ -5,7 +5,7 @@ using System; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; - +using System.Threading.Tasks; using ImageMagick; using SixLabors.ImageSharp.Advanced; @@ -49,6 +49,10 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs } } + public Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + => Task.FromResult(this.Decode(configuration, stream)); + public Image Decode(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel { @@ -80,5 +84,7 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs } public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream); } } diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs index 05a1fbf84..06035b59f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs @@ -2,7 +2,8 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; - +using System.Threading.Tasks; +using SixLabors.ImageSharp.ColorSpaces.Conversion; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -13,6 +14,10 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs { public static SystemDrawingReferenceDecoder Instance { get; } = new SystemDrawingReferenceDecoder(); + public Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + => Task.FromResult(this.Decode(configuration, stream)); + public Image Decode(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel { @@ -43,6 +48,9 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs } } + public Task IdentifyAsync(Configuration configuration, Stream stream) + => Task.FromResult(this.Identify(configuration, stream)); + public IImageInfo Identify(Configuration configuration, Stream stream) { using (var sourceBitmap = new System.Drawing.Bitmap(stream)) @@ -53,5 +61,7 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs } public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream); } } diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs index 34bec526b..0f5300814 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs @@ -1,9 +1,9 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. using System.Drawing.Imaging; using System.IO; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.PixelFormats; @@ -30,5 +30,16 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs sdBitmap.Save(stream, this.imageFormat); } } + + public Task EncodeAsync(Image image, Stream stream) + where TPixel : unmanaged, IPixel + { + using (System.Drawing.Bitmap sdBitmap = SystemDrawingBridge.To32bppArgbSystemDrawingBitmap(image)) + { + sdBitmap.Save(stream, this.imageFormat); + } + + return Task.CompletedTask; + } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs index 0390457a0..ff3dc160b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Concurrent; using System.IO; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Memory; @@ -349,6 +349,9 @@ namespace SixLabors.ImageSharp.Tests private static readonly ConcurrentDictionary InvocationCounts = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary InvocationCountsAsync = + new ConcurrentDictionary(); + private static readonly object Monitor = new object(); private string callerName; @@ -368,15 +371,27 @@ namespace SixLabors.ImageSharp.Tests return new Image(42, 42); } + public Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + InvocationCountsAsync[this.callerName]++; + return Task.FromResult(new Image(42, 42)); + } + internal static int GetInvocationCount(string callerName) => InvocationCounts[callerName]; + internal static int GetInvocationCountAsync(string callerName) => InvocationCountsAsync[callerName]; + internal void InitCaller(string name) { this.callerName = name; InvocationCounts[name] = 0; + InvocationCountsAsync[name] = 0; } public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream); } private class TestDecoderWithParameters : IImageDecoder @@ -384,6 +399,9 @@ namespace SixLabors.ImageSharp.Tests private static readonly ConcurrentDictionary InvocationCounts = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary InvocationCountsAsync = + new ConcurrentDictionary(); + private static readonly object Monitor = new object(); private string callerName; @@ -407,15 +425,27 @@ namespace SixLabors.ImageSharp.Tests return new Image(42, 42); } + public Task> DecodeAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + InvocationCountsAsync[this.callerName]++; + return Task.FromResult(new Image(42, 42)); + } + internal static int GetInvocationCount(string callerName) => InvocationCounts[callerName]; + internal static int GetInvocationCountAsync(string callerName) => InvocationCountsAsync[callerName]; + internal void InitCaller(string name) { this.callerName = name; InvocationCounts[name] = 0; + InvocationCountsAsync[name] = 0; } public Image Decode(Configuration configuration, Stream stream) => this.Decode(configuration, stream); + + public async Task DecodeAsync(Configuration configuration, Stream stream) => await this.DecodeAsync(configuration, stream); } } } From 4d95e2e92a7e1d73a2d54133f097c8ed37cef0bd Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Sun, 3 May 2020 14:54:32 +0100 Subject: [PATCH 056/130] Save async tests --- .../Advanced/AdvancedImageExtensions.cs | 56 ++++++++- src/ImageSharp/Advanced/IImageVisitor.cs | 16 +++ src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs | 20 ++- src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs | 15 ++- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 30 +++-- .../Formats/Jpeg/JpegDecoderCore.cs | 30 +++-- src/ImageSharp/Formats/Jpeg/JpegEncoder.cs | 17 ++- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 30 +++-- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 15 ++- src/ImageSharp/Formats/Tga/TgaDecoderCore.cs | 30 +++-- src/ImageSharp/Formats/Tga/TgaEncoderCore.cs | 15 ++- src/ImageSharp/Image.cs | 33 ++++- src/ImageSharp/ImageExtensions.cs | 57 ++++----- src/ImageSharp/Image{TPixel}.cs | 9 ++ .../Image/ImageTests.SaveAsync.cs | 109 ++++++++++++++++ .../TestUtilities/AsyncOnlyStream.cs | 117 ++++++++++++++++++ 16 files changed, 511 insertions(+), 88 deletions(-) create mode 100644 tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs create mode 100644 tests/ImageSharp.Tests/TestUtilities/AsyncOnlyStream.cs diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index f4e9f3042..c845cfc4f 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -2,9 +2,13 @@ // Licensed under the GNU Affero General Public License, Version 3. using System; +using System.Collections.Generic; +using System.IO; using System.Linq; using System.Runtime.InteropServices; - +using System.Text; +using System.Threading.Tasks; +using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -15,6 +19,47 @@ namespace SixLabors.ImageSharp.Advanced /// public static class AdvancedImageExtensions { + /// + /// For a given path find the best encoder to use + /// + /// The source. + /// The Path + /// The matching encoder. + public static IImageEncoder FindEncoded(this Image source, string path) + { + Guard.NotNull(path, nameof(path)); + + string ext = Path.GetExtension(path); + IImageFormat format = source.GetConfiguration().ImageFormatsManager.FindFormatByFileExtension(ext); + if (format is null) + { + var sb = new StringBuilder(); + sb.AppendLine($"No encoder was found for extension '{ext}'. Registered encoders include:"); + foreach (IImageFormat fmt in source.GetConfiguration().ImageFormats) + { + sb.AppendFormat(" - {0} : {1}{2}", fmt.Name, string.Join(", ", fmt.FileExtensions), Environment.NewLine); + } + + throw new NotSupportedException(sb.ToString()); + } + + IImageEncoder encoder = source.GetConfiguration().ImageFormatsManager.FindEncoder(format); + + if (encoder is null) + { + var sb = new StringBuilder(); + sb.AppendLine($"No encoder was found for extension '{ext}' using image format '{format.Name}'. Registered encoders include:"); + foreach (KeyValuePair enc in source.GetConfiguration().ImageFormatsManager.ImageEncoders) + { + sb.AppendFormat(" - {0} : {1}{2}", enc.Key, enc.Value.GetType().Name, Environment.NewLine); + } + + throw new NotSupportedException(sb.ToString()); + } + + return encoder; + } + /// /// Accepts a to implement a double-dispatch pattern in order to /// apply pixel-specific operations on non-generic instances @@ -24,6 +69,15 @@ namespace SixLabors.ImageSharp.Advanced public static void AcceptVisitor(this Image source, IImageVisitor visitor) => source.Accept(visitor); + /// + /// Accepts a to implement a double-dispatch pattern in order to + /// apply pixel-specific operations on non-generic instances + /// + /// The source. + /// The visitor. + public static Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) + => source.AcceptAsync(visitor); + /// /// Gets the configuration for the image. /// diff --git a/src/ImageSharp/Advanced/IImageVisitor.cs b/src/ImageSharp/Advanced/IImageVisitor.cs index 50e6337e5..fa7b8e2f1 100644 --- a/src/ImageSharp/Advanced/IImageVisitor.cs +++ b/src/ImageSharp/Advanced/IImageVisitor.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. +using System.Threading.Tasks; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Advanced @@ -19,4 +20,19 @@ namespace SixLabors.ImageSharp.Advanced void Visit(Image image) where TPixel : unmanaged, IPixel; } + + /// + /// A visitor to implement a double-dispatch pattern in order to apply pixel-specific operations + /// on non-generic instances. + /// + public interface IImageVisitorAsync + { + /// + /// Provides a pixel-specific implementation for a given operation. + /// + /// The image. + /// The pixel type. + Task VisitAsync(Image image) + where TPixel : unmanaged, IPixel; + } } diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs index b5ae055a9..7db6fea26 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs @@ -134,13 +134,21 @@ namespace SixLabors.ImageSharp.Formats.Bmp public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel { - // cheat for now do async copy of the stream into memory stream and use the sync version - // we should use an array pool backed memorystream implementation - using (var ms = new MemoryStream()) + // if we can seek then we arn't in a context that errors on async operations + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); + return this.Decode(stream); + } + else + { + // cheat for now do async copy of the stream into memory stream and use the sync version + // we should use an array pool backed memorystream implementation + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } } } diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs index 3e10eedbb..93727bb6e 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs @@ -100,11 +100,18 @@ namespace SixLabors.ImageSharp.Formats.Bmp public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - this.Encode(image, ms); - ms.Position = 0; - await ms.CopyToAsync(stream).ConfigureAwait(false); + this.Encode(image, stream); + } + else + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } } } diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index fdac0e2ae..c79d006df 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -106,11 +106,18 @@ namespace SixLabors.ImageSharp.Formats.Gif public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); + return this.Decode(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } } } @@ -186,11 +193,18 @@ namespace SixLabors.ImageSharp.Formats.Gif /// The containing image data. public async Task IdentifyAsync(Stream stream) { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); + return this.Identify(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 2f9495267..b694c02bb 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -222,11 +222,18 @@ namespace SixLabors.ImageSharp.Formats.Jpeg public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); + return this.Decode(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } } } @@ -253,11 +260,18 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// The containing image data. public async Task IdentifyAsync(Stream stream) { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); + return this.Identify(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs index e87f9ce75..1838b8d6d 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs @@ -48,12 +48,19 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { var encoder = new JpegEncoderCore(this); - // this hack has to be be here because JpegEncoderCore is unsafe - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - encoder.Encode(image, ms); - ms.Position = 0; - await ms.CopyToAsync(stream).ConfigureAwait(false); + encoder.Encode(image, stream); + } + else + { + // this hack has to be be here because JpegEncoderCore is unsafe + using (var ms = new MemoryStream()) + { + encoder.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } } } } diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index f610f5750..713e5c651 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -152,11 +152,18 @@ namespace SixLabors.ImageSharp.Formats.Png public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); + return this.Decode(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } } } @@ -269,11 +276,18 @@ namespace SixLabors.ImageSharp.Formats.Png /// The containing image data. public async Task IdentifyAsync(Stream stream) { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); + return this.Identify(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } } } diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 1c8696fc1..a3b7ab23d 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -135,11 +135,18 @@ namespace SixLabors.ImageSharp.Formats.Png public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - this.Encode(image, ms); - ms.Position = 0; - await ms.CopyToAsync(stream).ConfigureAwait(false); + this.Encode(image, stream); + } + else + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } } } diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index 808139e59..f70d7ca24 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -91,11 +91,18 @@ namespace SixLabors.ImageSharp.Formats.Tga public async Task> DecodeAsync(Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); + return this.Decode(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Decode(ms); + } } } @@ -676,11 +683,18 @@ namespace SixLabors.ImageSharp.Formats.Tga /// The containing image data. public async Task IdentifyAsync(Stream stream) { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); + return this.Identify(stream); + } + else + { + using (var ms = new MemoryStream()) + { + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return this.Identify(ms); + } } } diff --git a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs index 3b16048f3..c0da8d40b 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs @@ -64,11 +64,18 @@ namespace SixLabors.ImageSharp.Formats.Tga public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { - using (var ms = new MemoryStream()) + if (stream.CanSeek) { - this.Encode(image, ms); - ms.Position = 0; - await ms.CopyToAsync(stream).ConfigureAwait(false); + this.Encode(image, stream); + } + else + { + using (var ms = new MemoryStream()) + { + this.Encode(image, ms); + ms.Position = 0; + await ms.CopyToAsync(stream).ConfigureAwait(false); + } } } diff --git a/src/ImageSharp/Image.cs b/src/ImageSharp/Image.cs index c43a20842..5de580283 100644 --- a/src/ImageSharp/Image.cs +++ b/src/ImageSharp/Image.cs @@ -3,7 +3,7 @@ using System; using System.IO; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; @@ -98,6 +98,21 @@ namespace SixLabors.ImageSharp this.AcceptVisitor(new EncodeVisitor(encoder, stream)); } + /// + /// Saves the image to the given stream using the given image encoder. + /// + /// The stream to save the image to. + /// The encoder to save the image with. + /// Thrown if the stream or encoder is null. + public Task SaveAsync(Stream stream, IImageEncoder encoder) + { + Guard.NotNull(stream, nameof(stream)); + Guard.NotNull(encoder, nameof(encoder)); + this.EnsureNotDisposed(); + + return this.AcceptVisitorAsync(new EncodeVisitor(encoder, stream)); + } + /// /// Returns a copy of the image in the given pixel format. /// @@ -140,7 +155,15 @@ namespace SixLabors.ImageSharp /// The visitor. internal abstract void Accept(IImageVisitor visitor); - private class EncodeVisitor : IImageVisitor + /// + /// Accepts a . + /// Implemented by invoking + /// with the pixel type of the image. + /// + /// The visitor. + internal abstract Task AcceptAsync(IImageVisitorAsync visitor); + + private class EncodeVisitor : IImageVisitor, IImageVisitorAsync { private readonly IImageEncoder encoder; @@ -157,6 +180,12 @@ namespace SixLabors.ImageSharp { this.encoder.Encode(image, this.stream); } + + public Task VisitAsync(Image image) + where TPixel : unmanaged, IPixel + { + return this.encoder.EncodeAsync(image, this.stream); + } } } } diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs index aa9030c6e..a71cc4064 100644 --- a/src/ImageSharp/ImageExtensions.cs +++ b/src/ImageSharp/ImageExtensions.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Text; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats; @@ -22,40 +23,36 @@ namespace SixLabors.ImageSharp /// The file path to save the image to. /// The path is null. public static void Save(this Image source, string path) - { - Guard.NotNull(path, nameof(path)); + => source.Save(path, source.FindEncoded(path)); - string ext = Path.GetExtension(path); - IImageFormat format = source.GetConfiguration().ImageFormatsManager.FindFormatByFileExtension(ext); - if (format is null) - { - var sb = new StringBuilder(); - sb.AppendLine($"No encoder was found for extension '{ext}'. Registered encoders include:"); - foreach (IImageFormat fmt in source.GetConfiguration().ImageFormats) - { - sb.AppendFormat(" - {0} : {1}{2}", fmt.Name, string.Join(", ", fmt.FileExtensions), Environment.NewLine); - } - - throw new NotSupportedException(sb.ToString()); - } - - IImageEncoder encoder = source.GetConfiguration().ImageFormatsManager.FindEncoder(format); + /// + /// Writes the image to the given stream using the currently loaded image format. + /// + /// The source image. + /// The file path to save the image to. + /// The path is null. + public static Task SaveAsync(this Image source, string path) + => source.SaveAsync(path, source.FindEncoded(path)); - if (encoder is null) + /// + /// Writes the image to the given stream using the currently loaded image format. + /// + /// The source image. + /// The file path to save the image to. + /// The encoder to save the image with. + /// The path is null. + /// The encoder is null. + public static void Save(this Image source, string path, IImageEncoder encoder) + { + Guard.NotNull(path, nameof(path)); + Guard.NotNull(encoder, nameof(encoder)); + using (Stream fs = source.GetConfiguration().FileSystem.Create(path)) { - var sb = new StringBuilder(); - sb.AppendLine($"No encoder was found for extension '{ext}' using image format '{format.Name}'. Registered encoders include:"); - foreach (KeyValuePair enc in source.GetConfiguration().ImageFormatsManager.ImageEncoders) - { - sb.AppendFormat(" - {0} : {1}{2}", enc.Key, enc.Value.GetType().Name, Environment.NewLine); - } - - throw new NotSupportedException(sb.ToString()); + source.Save(fs, encoder); } - - source.Save(path, encoder); } + /// /// Writes the image to the given stream using the currently loaded image format. /// @@ -64,13 +61,13 @@ namespace SixLabors.ImageSharp /// The encoder to save the image with. /// The path is null. /// The encoder is null. - public static void Save(this Image source, string path, IImageEncoder encoder) + public static async Task SaveAsync(this Image source, string path, IImageEncoder encoder) { Guard.NotNull(path, nameof(path)); Guard.NotNull(encoder, nameof(encoder)); using (Stream fs = source.GetConfiguration().FileSystem.Create(path)) { - source.Save(fs, encoder); + await source.SaveAsync(fs, encoder).ConfigureAwait(false); } } diff --git a/src/ImageSharp/Image{TPixel}.cs b/src/ImageSharp/Image{TPixel}.cs index 7eda2050a..64aa8ee0b 100644 --- a/src/ImageSharp/Image{TPixel}.cs +++ b/src/ImageSharp/Image{TPixel}.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Memory; @@ -288,6 +289,14 @@ namespace SixLabors.ImageSharp visitor.Visit(this); } + /// + internal override Task AcceptAsync(IImageVisitorAsync visitor) + { + this.EnsureNotDisposed(); + + return visitor.VisitAsync(this); + } + /// /// Switches the buffers used by the image and the pixelSource meaning that the Image will "own" the buffer from the pixelSource and the pixelSource will now own the Images buffer. /// diff --git a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs new file mode 100644 index 000000000..0f87df7b2 --- /dev/null +++ b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs @@ -0,0 +1,109 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using System.IO; + +using Moq; + +using SixLabors.ImageSharp.Formats.Png; +using SixLabors.ImageSharp.PixelFormats; +using Xunit; + +// ReSharper disable InconsistentNaming +namespace SixLabors.ImageSharp.Tests +{ + using System.Runtime.CompilerServices; + using System.Threading.Tasks; + using SixLabors.ImageSharp.Advanced; + using SixLabors.ImageSharp.Formats; + using SixLabors.ImageSharp.Tests.TestUtilities; + + public partial class ImageTests + { + public class SaveAsync + { + + [Fact] + public async Task DetectedEncoding() + { + string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); + string file = System.IO.Path.Combine(dir, "DetectedEncodingAsync.png"); + + using (var image = new Image(10, 10)) + { + await image.SaveAsync(file); + } + + using (Image.Load(file, out IImageFormat mime)) + { + Assert.Equal("image/png", mime.DefaultMimeType); + } + } + + [Fact] + public async Task WhenExtensionIsUnknown_Throws() + { + string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); + string file = System.IO.Path.Combine(dir, "UnknownExtensionsEncoding_Throws.tmp"); + + await Assert.ThrowsAsync( + async () => + { + using (var image = new Image(10, 10)) + { + await image.SaveAsync(file); + } + }); + } + + [Fact] + public async Task SetEncoding() + { + string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); + string file = System.IO.Path.Combine(dir, "SetEncoding.dat"); + + using (var image = new Image(10, 10)) + { + await image.SaveAsync(file, new PngEncoder()); + } + + using (Image.Load(file, out var mime)) + { + Assert.Equal("image/png", mime.DefaultMimeType); + } + } + + [Fact] + public async Task ThrowsWhenDisposed() + { + var image = new Image(5, 5); + image.Dispose(); + IImageEncoder encoder = Mock.Of(); + using (var stream = new MemoryStream()) + { + await Assert.ThrowsAsync(async () => await image.SaveAsync(stream, encoder)); + } + } + + [Theory] + [InlineData("test.png")] + [InlineData("test.tga")] + [InlineData("test.bmp")] + [InlineData("test.jpg")] + [InlineData("test.gif")] + public async Task SaveNeverCallsSyncMethods(string filename) + { + using (var image = new Image(5, 5)) + { + IImageEncoder encoder = image.FindEncoded(filename); + using (var stream = new MemoryStream()) + { + var asyncStream = new AsyncStreamWrapper(stream, () => false); + await image.SaveAsync(asyncStream, encoder); + } + } + } + } + } +} diff --git a/tests/ImageSharp.Tests/TestUtilities/AsyncOnlyStream.cs b/tests/ImageSharp.Tests/TestUtilities/AsyncOnlyStream.cs new file mode 100644 index 000000000..dc4133fbf --- /dev/null +++ b/tests/ImageSharp.Tests/TestUtilities/AsyncOnlyStream.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace SixLabors.ImageSharp.Tests.TestUtilities +{ + // https://github.com/dotnet/aspnetcore/blob/620c673705bb17b33cbc5ff32872d85a5fbf82b9/src/Hosting/TestHost/src/AsyncStreamWrapper.cs + internal class AsyncStreamWrapper : Stream + { + private Stream inner; + private Func allowSynchronousIO; + + internal AsyncStreamWrapper(Stream inner, Func allowSynchronousIO) + { + this.inner = inner; + this.allowSynchronousIO = allowSynchronousIO; + } + + public override bool CanRead => this.inner.CanRead; + + public override bool CanSeek => false; + + public override bool CanWrite => this.inner.CanWrite; + + public override long Length => throw new NotSupportedException("The stream is not seekable."); + + public override long Position + { + get => throw new NotSupportedException("The stream is not seekable."); + set => throw new NotSupportedException("The stream is not seekable."); + } + + public override void Flush() + { + // Not blocking Flush because things like StreamWriter.Dispose() always call it. + this.inner.Flush(); + } + + public override Task FlushAsync(CancellationToken cancellationToken) + { + return this.inner.FlushAsync(cancellationToken); + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (!this.allowSynchronousIO()) + { + throw new InvalidOperationException("Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true."); + } + + return this.inner.Read(buffer, offset, count); + } + + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return this.inner.ReadAsync(buffer, offset, count, cancellationToken); + } + + public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) + { + return this.inner.BeginRead(buffer, offset, count, callback, state); + } + + public override int EndRead(IAsyncResult asyncResult) + { + return this.inner.EndRead(asyncResult); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("The stream is not seekable."); + } + + public override void SetLength(long value) + { + throw new NotSupportedException("The stream is not seekable."); + } + + public override void Write(byte[] buffer, int offset, int count) + { + if (!this.allowSynchronousIO()) + { + throw new InvalidOperationException("Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true."); + } + + this.inner.Write(buffer, offset, count); + } + + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) + { + return this.inner.BeginWrite(buffer, offset, count, callback, state); + } + + public override void EndWrite(IAsyncResult asyncResult) + { + this.inner.EndWrite(asyncResult); + } + + public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return this.inner.WriteAsync(buffer, offset, count, cancellationToken); + } + + public override void Close() + { + // Don't dispose the inner stream, we don't want to impact the client stream + } + + protected override void Dispose(bool disposing) + { + // Don't dispose the inner stream, we don't want to impact the client stream + } + } +} From dff8ab68e7512328e2e69048de279c015ecd7267 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Wed, 6 May 2020 10:47:44 +0100 Subject: [PATCH 057/130] implement Load Async apis --- src/ImageSharp/Image.Decode.cs | 45 ++- src/ImageSharp/Image.FromStream.cs | 341 ++++++++++++++++++ ...Load_FromStream_UseDefaultConfiguration.cs | 82 ++++- ...yncOnlyStream.cs => AsyncStreamWrapper.cs} | 0 4 files changed, 458 insertions(+), 10 deletions(-) rename tests/ImageSharp.Tests/TestUtilities/{AsyncOnlyStream.cs => AsyncStreamWrapper.cs} (100%) diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index cb6f01ce4..c6f9b8224 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Linq; +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; @@ -86,7 +87,6 @@ namespace SixLabors.ImageSharp : null; } -#pragma warning disable SA1008 // Opening parenthesis must be spaced correctly /// /// Decodes the image stream to the current image. /// @@ -96,8 +96,7 @@ namespace SixLabors.ImageSharp /// /// A new . /// - private static (Image img, IImageFormat format) Decode(Stream stream, Configuration config) -#pragma warning restore SA1008 // Opening parenthesis must be spaced correctly + private static FormattedImage Decode(Stream stream, Configuration config) where TPixel : unmanaged, IPixel { IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); @@ -107,10 +106,32 @@ namespace SixLabors.ImageSharp } Image img = decoder.Decode(config, stream); - return (img, format); + return new FormattedImage(img, format); } - private static (Image img, IImageFormat format) Decode(Stream stream, Configuration config) + /// + /// Decodes the image stream to the current image. + /// + /// The stream. + /// the configuration. + /// The pixel format. + /// + /// A new . + /// + private static async Task> DecodeAsync(Stream stream, Configuration config) + where TPixel : unmanaged, IPixel + { + IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); + if (decoder is null) + { + return (null, null); + } + + Image img = await decoder.DecodeAsync(config, stream); + return new FormattedImage(img, format); + } + + private static FormattedImage Decode(Stream stream, Configuration config) { IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); if (decoder is null) @@ -119,7 +140,19 @@ namespace SixLabors.ImageSharp } Image img = decoder.Decode(config, stream); - return (img, format); + return new FormattedImage(img, format); + } + + private static async Task DecodeAsync(Stream stream, Configuration config) + { + IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); + if (decoder is null) + { + return (null, null); + } + + Image img = await decoder.DecodeAsync(config, stream); + return new FormattedImage(img, format); } /// diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index bcd11845b..fa4b30d65 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Text; +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.PixelFormats; @@ -99,6 +100,21 @@ namespace SixLabors.ImageSharp public static Image Load(Stream stream, out IImageFormat format) => Load(Configuration.Default, stream, out format); + + /// + /// Decode a new instance of the class from the given stream. + /// The pixel format is selected by the decoder. + /// + /// The stream containing image information. + /// The format type of the decoded image. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The . + public static Task LoadWithFormatAsync(Stream stream) + => LoadWithFormatAsync(Configuration.Default, stream); + /// /// Decode a new instance of the class from the given stream. /// The pixel format is selected by the decoder. @@ -111,6 +127,18 @@ namespace SixLabors.ImageSharp /// The . public static Image Load(Stream stream) => Load(Configuration.Default, stream); + /// + /// Decode a new instance of the class from the given stream. + /// The pixel format is selected by the decoder. + /// + /// The stream containing image information. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The . + public static Task LoadAsync(Stream stream) => LoadAsync(Configuration.Default, stream); + /// /// Decode a new instance of the class from the given stream. /// The pixel format is selected by the decoder. @@ -126,6 +154,21 @@ namespace SixLabors.ImageSharp public static Image Load(Stream stream, IImageDecoder decoder) => Load(Configuration.Default, stream, decoder); + /// + /// Decode a new instance of the class from the given stream. + /// The pixel format is selected by the decoder. + /// + /// The stream containing image information. + /// The decoder. + /// The stream is null. + /// The decoder is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The . + public static Task LoadAsync(Stream stream, IImageDecoder decoder) + => LoadAsync(Configuration.Default, stream, decoder); + /// /// Decode a new instance of the class from the given stream. /// The pixel format is selected by the decoder. @@ -146,6 +189,26 @@ namespace SixLabors.ImageSharp return WithSeekableStream(configuration, stream, s => decoder.Decode(configuration, s)); } + /// + /// Decode a new instance of the class from the given stream. + /// The pixel format is selected by the decoder. + /// + /// The configuration for the decoder. + /// The stream containing image information. + /// The decoder. + /// The configuration is null. + /// The stream is null. + /// The decoder is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// A new .> + public static Task LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) + { + Guard.NotNull(decoder, nameof(decoder)); + return WithSeekableStreamAsync(configuration, stream, s => decoder.DecodeAsync(configuration, s)); + } + /// /// Decode a new instance of the class from the given stream. /// @@ -159,6 +222,23 @@ namespace SixLabors.ImageSharp /// A new .> public static Image Load(Configuration configuration, Stream stream) => Load(configuration, stream, out _); + /// + /// Decode a new instance of the class from the given stream. + /// + /// The configuration for the decoder. + /// The stream containing image information. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// A new .> + public static async Task LoadAsync(Configuration configuration, Stream stream) + { + var fmt = await LoadWithFormatAsync(configuration, stream); + return fmt.Image; + } + /// /// Create a new instance of the class from the given stream. /// @@ -173,6 +253,20 @@ namespace SixLabors.ImageSharp where TPixel : unmanaged, IPixel => Load(Configuration.Default, stream); + /// + /// Create a new instance of the class from the given stream. + /// + /// The stream containing image information. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The pixel format. + /// A new .> + public static Task> LoadAsync(Stream stream) + where TPixel : unmanaged, IPixel + => LoadAsync(Configuration.Default, stream); + /// /// Create a new instance of the class from the given stream. /// @@ -188,6 +282,22 @@ namespace SixLabors.ImageSharp where TPixel : unmanaged, IPixel => Load(Configuration.Default, stream, out format); + + /// + /// Create a new instance of the class from the given stream. + /// + /// The stream containing image information. + /// The format type of the decoded image. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The pixel format. + /// A new .> + public static Task> LoadWithFormatAsync(Stream stream) + where TPixel : unmanaged, IPixel + => LoadWithFormatAsync(Configuration.Default, stream); + /// /// Create a new instance of the class from the given stream. /// @@ -203,6 +313,21 @@ namespace SixLabors.ImageSharp where TPixel : unmanaged, IPixel => WithSeekableStream(Configuration.Default, stream, s => decoder.Decode(Configuration.Default, s)); + /// + /// Create a new instance of the class from the given stream. + /// + /// The stream containing image information. + /// The decoder. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The pixel format. + /// A new .> + public static Task> LoadAsync(Stream stream, IImageDecoder decoder) + where TPixel : unmanaged, IPixel + => WithSeekableStreamAsync(Configuration.Default, stream, s => decoder.DecodeAsync(Configuration.Default, s)); + /// /// Create a new instance of the class from the given stream. /// @@ -220,6 +345,23 @@ namespace SixLabors.ImageSharp where TPixel : unmanaged, IPixel => WithSeekableStream(configuration, stream, s => decoder.Decode(configuration, s)); + /// + /// Create a new instance of the class from the given stream. + /// + /// The Configuration. + /// The stream containing image information. + /// The decoder. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The pixel format. + /// A new .> + public static Task> LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) + where TPixel : unmanaged, IPixel + => WithSeekableStreamAsync(configuration, stream, s => decoder.DecodeAsync(configuration, s)); + /// /// Create a new instance of the class from the given stream. /// @@ -272,6 +414,89 @@ namespace SixLabors.ImageSharp throw new UnknownImageFormatException(sb.ToString()); } + /// + /// Create a new instance of the class from the given stream. + /// + /// The configuration options. + /// The stream containing image information. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// A new . + public static async Task LoadWithFormatAsync(Configuration configuration, Stream stream) + { + (Image img, IImageFormat format) data = await WithSeekableStreamAsync(configuration, stream, s => DecodeAsync(s, configuration)); + + if (data.img != null) + { + return data; + } + + var sb = new StringBuilder(); + sb.AppendLine("Image cannot be loaded. Available decoders:"); + + foreach (KeyValuePair val in configuration.ImageFormatsManager.ImageDecoders) + { + sb.AppendFormat(" - {0} : {1}{2}", val.Key.Name, val.Value.GetType().Name, Environment.NewLine); + } + + throw new UnknownImageFormatException(sb.ToString()); + } + + /// + /// Create a new instance of the class from the given stream. + /// + /// The configuration options. + /// The stream containing image information. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The pixel format. + /// A new . + public static async Task> LoadWithFormatAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + (Image img, IImageFormat format) data = await WithSeekableStreamAsync(configuration, stream, s => DecodeAsync(s, configuration)); + + if (data.img != null) + { + return data; + } + + var sb = new StringBuilder(); + sb.AppendLine("Image cannot be loaded. Available decoders:"); + + foreach (KeyValuePair val in configuration.ImageFormatsManager.ImageDecoders) + { + sb.AppendFormat(" - {0} : {1}{2}", val.Key.Name, val.Value.GetType().Name, Environment.NewLine); + } + + throw new UnknownImageFormatException(sb.ToString()); + } + + /// + /// Create a new instance of the class from the given stream. + /// + /// The configuration options. + /// The stream containing image information. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image format not recognised. + /// Image contains invalid content. + /// The pixel format. + /// A new . + public static async Task> LoadAsync(Configuration configuration, Stream stream) + where TPixel : unmanaged, IPixel + { + (Image img, _) = await LoadWithFormatAsync(configuration, stream); + return img; + } + /// /// Decode a new instance of the class from the given stream. /// The pixel format is selected by the decoder. @@ -336,5 +561,121 @@ namespace SixLabors.ImageSharp return action(memoryStream); } } + + private static async Task WithSeekableStreamAsync(Configuration configuration, Stream stream, Func> action) + { + Guard.NotNull(configuration, nameof(configuration)); + Guard.NotNull(stream, nameof(stream)); + + if (!stream.CanRead) + { + throw new NotSupportedException("Cannot read from the stream."); + } + + // to make sure we don't trigger anything with aspnetcore then we just need to make sure we are seekable and we make the copy using CopyToAsync + // if the stream is seekable then we arn't using one of the aspnetcore wrapped streams that error on sync api calls and we can use it with out + // having to further wrap + if (stream.CanSeek) + { + if (configuration.ReadOrigin == ReadOrigin.Begin) + { + stream.Position = 0; + } + + return await action(stream); + } + + using (var memoryStream = new MemoryStream()) // should really find a nice way to use a pool for these!! + { + await stream.CopyToAsync(memoryStream); + memoryStream.Position = 0; + + return await action(memoryStream); + } + } + } + + public readonly struct FormattedImage where TPixel : unmanaged, IPixel + { + public FormattedImage(Image image, IImageFormat format) + { + this.Image = image; + this.Format = format; + } + + public readonly Image Image { get; } + + public readonly IImageFormat Format { get; } + + + public static implicit operator (Image image, IImageFormat format)(FormattedImage value) + { + return (value.Image, value.Format); + } + + public static implicit operator FormattedImage((Image image, IImageFormat format) value) + { + return new FormattedImage(value.image, value.format); + } + + public override bool Equals(object obj) + { + return obj is FormattedImage other && + EqualityComparer>.Default.Equals(this.Image, other.Image) && + EqualityComparer.Default.Equals(this.Format, other.Format); + } + + public override int GetHashCode() + { + return HashCode.Combine(this.Image, this.Format); + } + + public void Deconstruct(out Image image, out IImageFormat format) + { + image = this.Image; + format = this.Format; + } + } + + public readonly struct FormattedImage + { + public FormattedImage(Image image, IImageFormat format) + { + this.Image = image; + this.Format = format; + } + + public readonly Image Image { get; } + + public readonly IImageFormat Format { get; } + + + public static implicit operator (Image image, IImageFormat format)(FormattedImage value) + { + return (value.Image, value.Format); + } + + public static implicit operator FormattedImage((Image image, IImageFormat format) value) + { + return new FormattedImage(value.image, value.format); + } + + public override bool Equals(object obj) + { + return obj is FormattedImage other && + EqualityComparer.Default.Equals(this.Image, other.Image) && + EqualityComparer.Default.Equals(this.Format, other.Format); + } + + public override int GetHashCode() + { + return HashCode.Combine(this.Image, this.Format); + } + + public void Deconstruct(out Image image, out IImageFormat format) + { + image = this.Image; + format = this.Format; + } } } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs index ab3a87a31..9a7960f0f 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs @@ -3,11 +3,11 @@ using System; using System.IO; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Bmp; using SixLabors.ImageSharp.PixelFormats; - +using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; namespace SixLabors.ImageSharp.Tests @@ -18,7 +18,17 @@ namespace SixLabors.ImageSharp.Tests { private static readonly byte[] Data = TestFile.Create(TestImages.Bmp.Bit8).Bytes; - private MemoryStream Stream { get; } = new MemoryStream(Data); + private MemoryStream BaseStream { get; } + + private AsyncStreamWrapper Stream { get; } + + private bool AllowSynchronousIO { get; set; } = true; + + public Load_FromStream_UseDefaultConfiguration() + { + this.BaseStream = new MemoryStream(Data); + this.Stream = new AsyncStreamWrapper(this.BaseStream, () => this.AllowSynchronousIO); + } private static void VerifyDecodedImage(Image img) { @@ -81,9 +91,73 @@ namespace SixLabors.ImageSharp.Tests } } + [Fact] + public async Task Async_Stream_OutFormat_Agnostic() + { + this.AllowSynchronousIO = false; + var formattedImage = await Image.LoadWithFormatAsync(this.Stream); + using (formattedImage.Image) + { + VerifyDecodedImage(formattedImage.Image); + Assert.IsType(formattedImage.Format); + } + } + + [Fact] + public async Task Async_Stream_Specific() + { + this.AllowSynchronousIO = false; + using (var img = await Image.LoadAsync(this.Stream)) + { + VerifyDecodedImage(img); + } + } + + [Fact] + public async Task Async_Stream_Agnostic() + { + this.AllowSynchronousIO = false; + using (var img = await Image.LoadAsync(this.Stream)) + { + VerifyDecodedImage(img); + } + } + + [Fact] + public async Task Async_Stream_OutFormat_Specific() + { + this.AllowSynchronousIO = false; + var formattedImage = await Image.LoadWithFormatAsync(this.Stream); + using (formattedImage.Image) + { + VerifyDecodedImage(formattedImage.Image); + Assert.IsType(formattedImage.Format); + } + } + + [Fact] + public async Task Async_Stream_Decoder_Specific() + { + this.AllowSynchronousIO = false; + using (var img = await Image.LoadAsync(this.Stream, new BmpDecoder())) + { + VerifyDecodedImage(img); + } + } + + [Fact] + public async Task Async_Stream_Decoder_Agnostic() + { + this.AllowSynchronousIO = false; + using (var img = await Image.LoadAsync(this.Stream, new BmpDecoder())) + { + VerifyDecodedImage(img); + } + } + public void Dispose() { - this.Stream?.Dispose(); + this.BaseStream?.Dispose(); } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/AsyncOnlyStream.cs b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs similarity index 100% rename from tests/ImageSharp.Tests/TestUtilities/AsyncOnlyStream.cs rename to tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs From c69683e1224baa1c0e2c1d45ff7a2718e6a9d39b Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Wed, 6 May 2020 12:09:27 +0100 Subject: [PATCH 058/130] IdentifyAsync + stylecop --- .../Advanced/AdvancedImageExtensions.cs | 1 + src/ImageSharp/Advanced/IImageVisitor.cs | 1 + src/ImageSharp/Formats/Gif/GifDecoder.cs | 1 - src/ImageSharp/Formats/IImageEncoder.cs | 1 + src/ImageSharp/Formats/Jpeg/JpegEncoder.cs | 1 + src/ImageSharp/Formats/Png/PngEncoder.cs | 1 + src/ImageSharp/FormattedImage.cs | 79 +++++++ src/ImageSharp/FormattedImageInfo.cs | 79 +++++++ src/ImageSharp/FormattedImage{TPixel}.cs | 82 ++++++++ src/ImageSharp/Image.Decode.cs | 38 +++- src/ImageSharp/Image.FromStream.cs | 195 +++++++++--------- src/ImageSharp/Image.cs | 1 + src/ImageSharp/ImageExtensions.cs | 3 +- .../Image/ImageTests.DetectFormat.cs | 27 ++- .../Image/ImageTests.Identify.cs | 66 +++++- .../Image/ImageTests.ImageLoadTestBase.cs | 1 + .../Image/ImageTests.SaveAsync.cs | 1 - .../TestUtilities/AsyncStreamWrapper.cs | 3 + 18 files changed, 481 insertions(+), 100 deletions(-) create mode 100644 src/ImageSharp/FormattedImage.cs create mode 100644 src/ImageSharp/FormattedImageInfo.cs create mode 100644 src/ImageSharp/FormattedImage{TPixel}.cs diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index c845cfc4f..e3a5938e2 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -75,6 +75,7 @@ namespace SixLabors.ImageSharp.Advanced /// /// The source. /// The visitor. + /// A representing the asynchronous operation. public static Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) => source.AcceptAsync(visitor); diff --git a/src/ImageSharp/Advanced/IImageVisitor.cs b/src/ImageSharp/Advanced/IImageVisitor.cs index fa7b8e2f1..5c736c43f 100644 --- a/src/ImageSharp/Advanced/IImageVisitor.cs +++ b/src/ImageSharp/Advanced/IImageVisitor.cs @@ -32,6 +32,7 @@ namespace SixLabors.ImageSharp.Advanced /// /// The image. /// The pixel type. + /// A representing the asynchronous operation. Task VisitAsync(Image image) where TPixel : unmanaged, IPixel; } diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index e5de1c028..4adfcb225 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -76,7 +76,6 @@ namespace SixLabors.ImageSharp.Formats.Gif return decoder.Identify(stream); } - /// public async Task IdentifyAsync(Configuration configuration, Stream stream) { diff --git a/src/ImageSharp/Formats/IImageEncoder.cs b/src/ImageSharp/Formats/IImageEncoder.cs index f4d9b2793..8588385f8 100644 --- a/src/ImageSharp/Formats/IImageEncoder.cs +++ b/src/ImageSharp/Formats/IImageEncoder.cs @@ -27,6 +27,7 @@ namespace SixLabors.ImageSharp.Formats /// The pixel format. /// The to encode from. /// The to encode the image data to. + /// A representing the asynchronous operation. Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel; } diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs index 1838b8d6d..488d7d5f0 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs @@ -43,6 +43,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// The pixel format. /// The to encode from. /// The to encode the image data to. + /// A representing the asynchronous operation. public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index a2c2ca100..4209bef61 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -64,6 +64,7 @@ namespace SixLabors.ImageSharp.Formats.Png /// The pixel format. /// The to encode from. /// The to encode the image data to. + /// A representing the asynchronous operation. public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { diff --git a/src/ImageSharp/FormattedImage.cs b/src/ImageSharp/FormattedImage.cs new file mode 100644 index 000000000..5617be351 --- /dev/null +++ b/src/ImageSharp/FormattedImage.cs @@ -0,0 +1,79 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using System.Collections.Generic; +using SixLabors.ImageSharp.Formats; + +namespace SixLabors.ImageSharp +{ + /// + /// Struct to curry and for return from async overloads. + /// + public readonly struct FormattedImage + { + /// + /// Initializes a new instance of the struct. + /// + /// The . + /// The . + public FormattedImage(Image image, IImageFormat format) + { + this.Image = image; + this.Format = format; + } + + /// + /// Gets the Image. + /// + public readonly Image Image { get; } + + /// + /// Gets the Format. + /// + public readonly IImageFormat Format { get; } + + /// + /// Converts to + /// + /// The to convert. + public static implicit operator (Image image, IImageFormat format)(FormattedImage value) + { + return (value.Image, value.Format); + } + + /// + /// Converts to + /// + /// The to convert. + public static implicit operator FormattedImage((Image image, IImageFormat format) value) + { + return new FormattedImage(value.image, value.format); + } + + /// + public override bool Equals(object obj) + { + return obj is FormattedImage other && + EqualityComparer.Default.Equals(this.Image, other.Image) && + EqualityComparer.Default.Equals(this.Format, other.Format); + } + + /// + public override int GetHashCode() + { + return HashCode.Combine(this.Image, this.Format); + } + + /// + /// Deconstructs into component parts. + /// + /// The . + /// The . + public void Deconstruct(out Image image, out IImageFormat format) + { + image = this.Image; + format = this.Format; + } + } +} diff --git a/src/ImageSharp/FormattedImageInfo.cs b/src/ImageSharp/FormattedImageInfo.cs new file mode 100644 index 000000000..b3f854fc4 --- /dev/null +++ b/src/ImageSharp/FormattedImageInfo.cs @@ -0,0 +1,79 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using System.Collections.Generic; +using SixLabors.ImageSharp.Formats; + +namespace SixLabors.ImageSharp +{ + /// + /// Struct to curry and for return from async overloads. + /// + public readonly struct FormattedImageInfo + { + /// + /// Initializes a new instance of the struct. + /// + /// The . + /// The . + public FormattedImageInfo(IImageInfo imageInfo, IImageFormat format) + { + this.ImageInfo = imageInfo; + this.Format = format; + } + + /// + /// Gets the Image Info. + /// + public readonly IImageInfo ImageInfo { get; } + + /// + /// Gets the Format. + /// + public readonly IImageFormat Format { get; } + + /// + /// Converts to a + /// + /// The to convert. + public static implicit operator (IImageInfo imageInfo, IImageFormat format)(FormattedImageInfo value) + { + return (value.ImageInfo, value.Format); + } + + /// + /// Converts to + /// + /// The to convert. + public static implicit operator FormattedImageInfo((IImageInfo imageInfo, IImageFormat format) value) + { + return new FormattedImageInfo(value.imageInfo, value.format); + } + + /// + public override bool Equals(object obj) + { + return obj is FormattedImageInfo other && + EqualityComparer.Default.Equals(this.ImageInfo, other.ImageInfo) && + EqualityComparer.Default.Equals(this.Format, other.Format); + } + + /// + public override int GetHashCode() + { + return HashCode.Combine(this.ImageInfo, this.Format); + } + + /// + /// Deconstructs into component parts. + /// + /// The . + /// The . + public void Deconstruct(out IImageInfo imageInfo, out IImageFormat format) + { + imageInfo = this.ImageInfo; + format = this.Format; + } + } +} diff --git a/src/ImageSharp/FormattedImage{TPixel}.cs b/src/ImageSharp/FormattedImage{TPixel}.cs new file mode 100644 index 000000000..dc4609b7e --- /dev/null +++ b/src/ImageSharp/FormattedImage{TPixel}.cs @@ -0,0 +1,82 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using System.Collections.Generic; +using SixLabors.ImageSharp.Formats; +using SixLabors.ImageSharp.PixelFormats; + +namespace SixLabors.ImageSharp +{ + /// + /// Struct to curry and for return from async overloads. + /// + /// The pixel format. + public readonly struct FormattedImage + where TPixel : unmanaged, IPixel + { + /// + /// Initializes a new instance of the struct. + /// + /// The . + /// The . + public FormattedImage(Image image, IImageFormat format) + { + this.Image = image; + this.Format = format; + } + + /// + /// Gets the Image. + /// + public readonly Image Image { get; } + + /// + /// Gets the Format. + /// + public readonly IImageFormat Format { get; } + + /// + /// Converts to . + /// + /// The to convert. + public static implicit operator (Image image, IImageFormat format)(FormattedImage value) + { + return (value.Image, value.Format); + } + + /// + /// Converts to + /// + /// The to convert. + public static implicit operator FormattedImage((Image image, IImageFormat format) value) + { + return new FormattedImage(value.image, value.format); + } + + /// + public override bool Equals(object obj) + { + return obj is FormattedImage other && + EqualityComparer>.Default.Equals(this.Image, other.Image) && + EqualityComparer.Default.Equals(this.Format, other.Format); + } + + /// + public override int GetHashCode() + { + return HashCode.Combine(this.Image, this.Format); + } + + /// + /// Deconstructs into component parts. + /// + /// The . + /// The . + public void Deconstruct(out Image image, out IImageFormat format) + { + image = this.Image; + format = this.Format; + } + } +} diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index c6f9b8224..c1cf5cc14 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -71,6 +71,20 @@ namespace SixLabors.ImageSharp } } + /// + /// By reading the header on the provided stream this calculates the images format. + /// + /// The image stream to read the header from. + /// The configuration. + /// The mime type or null if none found. + private static Task InternalDetectFormatAsync(Stream stream, Configuration config) + { + // we are going to cheat here because we know that by this point we have been wrapped in a + // seekable stream then we are free to use sync APIs this is potentially brittle and may + // need a better fix in the future. + return Task.FromResult(InternalDetectFormat(stream, config)); + } + /// /// By reading the header on the provided stream this calculates the images format. /// @@ -163,14 +177,34 @@ namespace SixLabors.ImageSharp /// /// The or null if suitable info detector not found. /// - private static (IImageInfo info, IImageFormat format) InternalIdentity(Stream stream, Configuration config) + private static FormattedImageInfo InternalIdentity(Stream stream, Configuration config) + { + if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector)) + { + return (null, null); + } + + var info = detector?.Identify(config, stream); + return new FormattedImageInfo(info, format); + } + + /// + /// Reads the raw image information from the specified stream. + /// + /// The stream. + /// the configuration. + /// + /// The or null if suitable info detector not found. + /// + private static async Task InternalIdentityAsync(Stream stream, Configuration config) { if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector)) { return (null, null); } - return (detector?.Identify(config, stream), format); + var info = await detector?.IdentifyAsync(config, stream); + return new FormattedImageInfo(info, format); } } } diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index fa4b30d65..713270525 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -38,6 +38,28 @@ namespace SixLabors.ImageSharp public static IImageFormat DetectFormat(Configuration configuration, Stream stream) => WithSeekableStream(configuration, stream, s => InternalDetectFormat(s, configuration)); + /// + /// By reading the header on the provided stream this calculates the images format type. + /// + /// The image stream to read the header from. + /// The stream is null. + /// The stream is not readable. + /// The format type or null if none found. + public static Task DetectFormatAsync(Stream stream) + => DetectFormatAsync(Configuration.Default, stream); + + /// + /// By reading the header on the provided stream this calculates the images format type. + /// + /// The configuration. + /// The image stream to read the header from. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// The format type or null if none found. + public static Task DetectFormatAsync(Configuration configuration, Stream stream) + => WithSeekableStreamAsync(configuration, stream, s => InternalDetectFormatAsync(s, configuration)); + /// /// Reads the raw image information from the specified stream without fully decoding it. /// @@ -51,6 +73,19 @@ namespace SixLabors.ImageSharp public static IImageInfo Identify(Stream stream) => Identify(stream, out IImageFormat _); + /// + /// Reads the raw image information from the specified stream without fully decoding it. + /// + /// The image stream to read the header from. + /// The stream is null. + /// The stream is not readable. + /// Image contains invalid content. + /// + /// The or null if suitable info detector not found. + /// + public static Task IdentifyAsync(Stream stream) + => IdentifyAsync(Configuration.Default, stream); + /// /// Reads the raw image information from the specified stream without fully decoding it. /// @@ -65,6 +100,39 @@ namespace SixLabors.ImageSharp public static IImageInfo Identify(Stream stream, out IImageFormat format) => Identify(Configuration.Default, stream, out format); + /// + /// Reads the raw image information from the specified stream without fully decoding it. + /// + /// The configuration. + /// The image stream to read the information from. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image contains invalid content. + /// + /// The or null if suitable info detector is not found. + /// + public static IImageInfo Identify(Configuration configuration, Stream stream) + => Identify(configuration, stream, out _); + + /// + /// Reads the raw image information from the specified stream without fully decoding it. + /// + /// The configuration. + /// The image stream to read the information from. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image contains invalid content. + /// + /// The or null if suitable info detector is not found. + /// + public static async Task IdentifyAsync(Configuration configuration, Stream stream) + { + FormattedImageInfo res = await IdentifyWithFormatAsync(configuration, stream); + return res.ImageInfo; + } + /// /// Reads the raw image information from the specified stream without fully decoding it. /// @@ -80,12 +148,41 @@ namespace SixLabors.ImageSharp /// public static IImageInfo Identify(Configuration configuration, Stream stream, out IImageFormat format) { - (IImageInfo info, IImageFormat format) data = WithSeekableStream(configuration, stream, s => InternalIdentity(s, configuration ?? Configuration.Default)); + FormattedImageInfo data = WithSeekableStream(configuration, stream, s => InternalIdentity(s, configuration ?? Configuration.Default)); - format = data.format; - return data.info; + format = data.Format; + return data.ImageInfo; } + /// + /// Reads the raw image information from the specified stream without fully decoding it. + /// + /// The image stream to read the information from. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image contains invalid content. + /// + /// The with set to null if suitable info detector is not found. + /// + public static Task IdentifyWithFormatAsync(Stream stream) + => IdentifyWithFormatAsync(Configuration.Default, stream); + + /// + /// Reads the raw image information from the specified stream without fully decoding it. + /// + /// The configuration. + /// The image stream to read the information from. + /// The configuration is null. + /// The stream is null. + /// The stream is not readable. + /// Image contains invalid content. + /// + /// The with set to null if suitable info detector is not found. + /// + public static Task IdentifyWithFormatAsync(Configuration configuration, Stream stream) + => WithSeekableStreamAsync(configuration, stream, s => InternalIdentityAsync(s, configuration ?? Configuration.Default)); + /// /// Decode a new instance of the class from the given stream. /// The pixel format is selected by the decoder. @@ -100,18 +197,16 @@ namespace SixLabors.ImageSharp public static Image Load(Stream stream, out IImageFormat format) => Load(Configuration.Default, stream, out format); - /// /// Decode a new instance of the class from the given stream. /// The pixel format is selected by the decoder. /// /// The stream containing image information. - /// The format type of the decoded image. /// The stream is null. /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// The . + /// A representing the asynchronous operation. public static Task LoadWithFormatAsync(Stream stream) => LoadWithFormatAsync(Configuration.Default, stream); @@ -282,18 +377,16 @@ namespace SixLabors.ImageSharp where TPixel : unmanaged, IPixel => Load(Configuration.Default, stream, out format); - /// /// Create a new instance of the class from the given stream. /// /// The stream containing image information. - /// The format type of the decoded image. /// The stream is null. /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A representing the asynchronous operation. public static Task> LoadWithFormatAsync(Stream stream) where TPixel : unmanaged, IPixel => LoadWithFormatAsync(Configuration.Default, stream); @@ -594,88 +687,4 @@ namespace SixLabors.ImageSharp } } } - - public readonly struct FormattedImage where TPixel : unmanaged, IPixel - { - public FormattedImage(Image image, IImageFormat format) - { - this.Image = image; - this.Format = format; - } - - public readonly Image Image { get; } - - public readonly IImageFormat Format { get; } - - - public static implicit operator (Image image, IImageFormat format)(FormattedImage value) - { - return (value.Image, value.Format); - } - - public static implicit operator FormattedImage((Image image, IImageFormat format) value) - { - return new FormattedImage(value.image, value.format); - } - - public override bool Equals(object obj) - { - return obj is FormattedImage other && - EqualityComparer>.Default.Equals(this.Image, other.Image) && - EqualityComparer.Default.Equals(this.Format, other.Format); - } - - public override int GetHashCode() - { - return HashCode.Combine(this.Image, this.Format); - } - - public void Deconstruct(out Image image, out IImageFormat format) - { - image = this.Image; - format = this.Format; - } - } - - public readonly struct FormattedImage - { - public FormattedImage(Image image, IImageFormat format) - { - this.Image = image; - this.Format = format; - } - - public readonly Image Image { get; } - - public readonly IImageFormat Format { get; } - - - public static implicit operator (Image image, IImageFormat format)(FormattedImage value) - { - return (value.Image, value.Format); - } - - public static implicit operator FormattedImage((Image image, IImageFormat format) value) - { - return new FormattedImage(value.image, value.format); - } - - public override bool Equals(object obj) - { - return obj is FormattedImage other && - EqualityComparer.Default.Equals(this.Image, other.Image) && - EqualityComparer.Default.Equals(this.Format, other.Format); - } - - public override int GetHashCode() - { - return HashCode.Combine(this.Image, this.Format); - } - - public void Deconstruct(out Image image, out IImageFormat format) - { - image = this.Image; - format = this.Format; - } - } } diff --git a/src/ImageSharp/Image.cs b/src/ImageSharp/Image.cs index 5de580283..8a691a4b3 100644 --- a/src/ImageSharp/Image.cs +++ b/src/ImageSharp/Image.cs @@ -104,6 +104,7 @@ namespace SixLabors.ImageSharp /// The stream to save the image to. /// The encoder to save the image with. /// Thrown if the stream or encoder is null. + /// A representing the asynchronous operation. public Task SaveAsync(Stream stream, IImageEncoder encoder) { Guard.NotNull(stream, nameof(stream)); diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs index a71cc4064..df2c12106 100644 --- a/src/ImageSharp/ImageExtensions.cs +++ b/src/ImageSharp/ImageExtensions.cs @@ -31,6 +31,7 @@ namespace SixLabors.ImageSharp /// The source image. /// The file path to save the image to. /// The path is null. + /// A representing the asynchronous operation. public static Task SaveAsync(this Image source, string path) => source.SaveAsync(path, source.FindEncoded(path)); @@ -52,7 +53,6 @@ namespace SixLabors.ImageSharp } } - /// /// Writes the image to the given stream using the currently loaded image format. /// @@ -61,6 +61,7 @@ namespace SixLabors.ImageSharp /// The encoder to save the image with. /// The path is null. /// The encoder is null. + /// A representing the asynchronous operation. public static async Task SaveAsync(this Image source, string path, IImageEncoder encoder) { Guard.NotNull(path, nameof(path)); diff --git a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs index f923832ab..b1acea967 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs @@ -3,8 +3,9 @@ using System; using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; - +using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; // ReSharper disable InconsistentNaming @@ -91,6 +92,30 @@ namespace SixLabors.ImageSharp.Tests IImageFormat type = Image.DetectFormat(new Configuration(), this.DataStream); Assert.Null(type); } + + [Fact] + public async Task FromStreamAsync_GlobalConfiguration() + { + using (var stream = new MemoryStream(this.ActualImageBytes)) + { + IImageFormat type = await Image.DetectFormatAsync(new AsyncStreamWrapper(stream, () => false)); + Assert.Equal(ExpectedGlobalFormat, type); + } + } + + [Fact] + public async Task FromStreamAsync_CustomConfiguration() + { + IImageFormat type = await Image.DetectFormatAsync(this.LocalConfiguration, new AsyncStreamWrapper(this.DataStream, () => false)); + Assert.Equal(this.LocalImageFormat, type); + } + + [Fact] + public async Task WhenNoMatchingFormatFoundAsync_ReturnsNull() + { + IImageFormat type = await Image.DetectFormatAsync(new Configuration(), new AsyncStreamWrapper(this.DataStream, () => false)); + Assert.Null(type); + } } } } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs index c7dbbc2d8..8493db073 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs @@ -2,8 +2,9 @@ // Licensed under the GNU Affero General Public License, Version 3. using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; - +using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; // ReSharper disable InconsistentNaming @@ -77,6 +78,17 @@ namespace SixLabors.ImageSharp.Tests } } + [Fact] + public void FromStream_GlobalConfiguration_NoFormat() + { + using (var stream = new MemoryStream(this.ActualImageBytes)) + { + IImageInfo info = Image.Identify(stream); + + Assert.NotNull(info); + } + } + [Fact] public void FromStream_CustomConfiguration() { @@ -86,6 +98,14 @@ namespace SixLabors.ImageSharp.Tests Assert.Equal(this.LocalImageFormat, type); } + [Fact] + public void FromStream_CustomConfiguration_NoFormat() + { + IImageInfo info = Image.Identify(this.LocalConfiguration, this.DataStream); + + Assert.Equal(this.LocalImageInfo, info); + } + [Fact] public void WhenNoMatchingFormatFound_ReturnsNull() { @@ -94,6 +114,50 @@ namespace SixLabors.ImageSharp.Tests Assert.Null(info); Assert.Null(type); } + + [Fact] + public async Task FromStreamAsync_GlobalConfiguration_NoFormat() + { + using (var stream = new MemoryStream(this.ActualImageBytes)) + { + var asyncStream = new AsyncStreamWrapper(stream, () => false); + IImageInfo info = await Image.IdentifyAsync(asyncStream); + + Assert.NotNull(info); + } + } + + [Fact] + public async Task FromStreamAsync_GlobalConfiguration() + { + using (var stream = new MemoryStream(this.ActualImageBytes)) + { + var asyncStream = new AsyncStreamWrapper(stream, () => false); + FormattedImageInfo info = await Image.IdentifyWithFormatAsync(asyncStream); + + Assert.NotNull(info.ImageInfo); + Assert.Equal(ExpectedGlobalFormat, info.Format); + } + } + + [Fact] + public async Task FromStreamAsync_CustomConfiguration() + { + var asyncStream = new AsyncStreamWrapper(this.DataStream, () => false); + FormattedImageInfo info = await Image.IdentifyWithFormatAsync(this.LocalConfiguration, asyncStream); + + Assert.Equal(this.LocalImageInfo, info.ImageInfo); + Assert.Equal(this.LocalImageFormat, info.Format); + } + + [Fact] + public async Task WhenNoMatchingFormatFoundAsync_ReturnsNull() + { + var asyncStream = new AsyncStreamWrapper(this.DataStream, () => false); + FormattedImageInfo info = await Image.IdentifyWithFormatAsync(new Configuration(), asyncStream); + + Assert.Null(info.ImageInfo); + } } } } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs b/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs index 5941854c1..6085fff2e 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs @@ -60,6 +60,7 @@ namespace SixLabors.ImageSharp.Tests var detector = new Mock(); detector.Setup(x => x.Identify(It.IsAny(), It.IsAny())).Returns(this.localImageInfoMock.Object); + detector.Setup(x => x.IdentifyAsync(It.IsAny(), It.IsAny())).ReturnsAsync(this.localImageInfoMock.Object); this.localDecoder = detector.As(); this.localMimeTypeDetector = new MockImageFormatDetector(this.localImageFormatMock.Object); diff --git a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs index 0f87df7b2..a327861ca 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs @@ -23,7 +23,6 @@ namespace SixLabors.ImageSharp.Tests { public class SaveAsync { - [Fact] public async Task DetectedEncoding() { diff --git a/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs index dc4133fbf..3d23a3c3b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs +++ b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs @@ -1,3 +1,6 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + using System; using System.Collections.Generic; using System.IO; From 9415e583679a776d0ffd8f7b438e2b0a1b35c48c Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 8 May 2020 16:46:31 +0200 Subject: [PATCH 059/130] Change Scanlines and SamplesPerLine from short to int --- .../Formats/Jpeg/Components/Decoder/JpegFrame.cs | 8 ++++---- src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs index 7fc3f0d97..483c22a39 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. using System; @@ -28,12 +28,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder /// /// Gets or sets the number of scanlines within the frame. /// - public short Scanlines { get; set; } + public int Scanlines { get; set; } /// /// Gets or sets the number of samples per scanline. /// - public short SamplesPerLine { get; set; } + public int SamplesPerLine { get; set; } /// /// Gets or sets the number of components within a frame. In progressive frames this value can range from only 1 to 4. @@ -105,4 +105,4 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder } } } -} \ No newline at end of file +} diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index a754bfd2e..e61ca326a 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -841,8 +841,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg Extended = frameMarker.Marker == JpegConstants.Markers.SOF1, Progressive = frameMarker.Marker == JpegConstants.Markers.SOF2, Precision = this.temp[0], - Scanlines = (short)((this.temp[1] << 8) | this.temp[2]), - SamplesPerLine = (short)((this.temp[3] << 8) | this.temp[4]), + Scanlines = (this.temp[1] << 8) | this.temp[2], + SamplesPerLine = (this.temp[3] << 8) | this.temp[4], ComponentCount = this.temp[5] }; From bd826f170329abfbc91fa9bb8074fb9dbb621099 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 9 May 2020 14:03:16 +0100 Subject: [PATCH 060/130] Ensure min dimension of 1px following rounding. Fix #1195 --- .../Transforms/Resize/ResizeHelper.cs | 19 ++++++++++++------- .../Processors/Transforms/ResizeTests.cs | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs index 6066efd1c..6fd87b3f8 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs @@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms // case ResizeMode.Stretch: default: - return (new Size(width, height), new Rectangle(0, 0, width, height)); + return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(0, 0, width, height)); } } @@ -143,7 +143,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms } // Target image width and height can be different to the rectangle width and height. - return (new Size(width, height), new Rectangle(targetX, targetY, targetWidth, targetHeight)); + return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(targetX, targetY, Sanitize(targetWidth), Sanitize(targetHeight))); } // Switch to pad mode to downscale and calculate from there. @@ -253,7 +253,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms } // Target image width and height can be different to the rectangle width and height. - return (new Size(width, height), new Rectangle(targetX, targetY, targetWidth, targetHeight)); + return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(targetX, targetY, Sanitize(targetWidth), Sanitize(targetHeight))); } private static (Size, Rectangle) CalculateMaxRectangle( @@ -282,7 +282,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms } // Replace the size to match the rectangle. - return (new Size(targetWidth, targetHeight), new Rectangle(0, 0, targetWidth, targetHeight)); + return (new Size(Sanitize(targetWidth), Sanitize(targetHeight)), new Rectangle(0, 0, Sanitize(targetWidth), Sanitize(targetHeight))); } private static (Size, Rectangle) CalculateMinRectangle( @@ -330,7 +330,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms } // Replace the size to match the rectangle. - return (new Size(targetWidth, targetHeight), new Rectangle(0, 0, targetWidth, targetHeight)); + return (new Size(Sanitize(targetWidth), Sanitize(targetHeight)), new Rectangle(0, 0, Sanitize(targetWidth), Sanitize(targetHeight))); } private static (Size, Rectangle) CalculatePadRectangle( @@ -398,7 +398,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms } // Target image width and height can be different to the rectangle width and height. - return (new Size(width, height), new Rectangle(targetX, targetY, targetWidth, targetHeight)); + return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(targetX, targetY, Sanitize(targetWidth), Sanitize(targetHeight))); } private static (Size, Rectangle) CalculateManualRectangle( @@ -419,9 +419,14 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms int targetHeight = targetRectangle.Height > 0 ? targetRectangle.Height : height; // Target image width and height can be different to the rectangle width and height. - return (new Size(width, height), new Rectangle(targetX, targetY, targetWidth, targetHeight)); + return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(targetX, targetY, Sanitize(targetWidth), Sanitize(targetHeight))); } private static void ThrowInvalid(string message) => throw new InvalidOperationException(message); + + private static int Sanitize(int input) + { + return Math.Max(1, input); + } } } diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs index aec0d2a1f..5feb8e9f0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs @@ -605,5 +605,21 @@ namespace SixLabors.ImageSharp.Tests.Processing.Processors.Transforms image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); } } + + [Fact] + public void Issue1195() + { + using (var image = new Image(2, 300)) + { + var size = new Size(50, 50); + image.Mutate(x => x + .Resize( + new ResizeOptions + { + Size = size, + Mode = ResizeMode.Max + })); + } + } } } From 0fd2a4c5f7dd4c9774007f045eb752464a9a9495 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 9 May 2020 21:03:56 +0100 Subject: [PATCH 061/130] Update ResizeHelper.cs --- .../Processors/Transforms/Resize/ResizeHelper.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs index 6fd87b3f8..aa5c80b76 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs @@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms // case ResizeMode.Stretch: default: - return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(0, 0, width, height)); + return (new Size(Sanitize(width), Sanitize(height)), new Rectangle(0, 0, Sanitize(width), Sanitize(height))); } } @@ -424,9 +424,6 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms private static void ThrowInvalid(string message) => throw new InvalidOperationException(message); - private static int Sanitize(int input) - { - return Math.Max(1, input); - } + private static int Sanitize(int input) => Math.Max(1, input); } } From 6bd5672639f716c4977feb99014a08226582dd0c Mon Sep 17 00:00:00 2001 From: Jaben Cargman Date: Wed, 13 May 2020 01:54:34 -0400 Subject: [PATCH 062/130] Minor typo. "commmon" -> "common" --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bd9007e4f..185d2e362 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Please visit https://sixlabors.com/pricing for details. ## Documentation - [Detailed documentation](https://sixlabors.github.io/docs/) for the ImageSharp API is available. This includes additional conceptual documentation to help you get started. -- Our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) is also available containing buildable code samples demonstrating commmon activities. +- Our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) is also available containing buildable code samples demonstrating common activities. ## Questions @@ -95,4 +95,4 @@ Please... Spread the word, contribute algorithms, submit performance improvement - [Dirk Lemstra](https://github.com/dlemstra) - [Anton Firsov](https://github.com/antonfirsov) - [Scott Williams](https://github.com/tocsoft) -- [Brian Popow](https://github.com/brianpopow) \ No newline at end of file +- [Brian Popow](https://github.com/brianpopow) From 6bbe57c5d338c4124e6477277d7b7f0ceafbef31 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 00:43:07 +0100 Subject: [PATCH 063/130] Add hardware accelerated checksums --- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 14 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 13 +- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 343 ++++++++++++------ src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs | 70 ++++ src/ImageSharp/Formats/Png/Zlib/Crc32.cs | 290 +++++++++------ src/ImageSharp/Formats/Png/Zlib/IChecksum.cs | 43 --- src/ImageSharp/Formats/Png/Zlib/README.md | 10 +- .../Formats/Png/Zlib/ZlibDeflateStream.cs | 8 +- ...on-generic-polynomials-pclmulqdq-paper.pdf | Bin 0 -> 384202 bytes tests/Directory.Build.targets | 1 + .../General/Adler32Benchmark.cs | 72 ++++ .../General/Crc32Benchmark.cs | 72 ++++ .../ImageSharp.Benchmarks.csproj | 1 + .../Formats/Png/PngDecoderTests.Chunks.cs | 57 ++- 14 files changed, 693 insertions(+), 301 deletions(-) create mode 100644 src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs delete mode 100644 src/ImageSharp/Formats/Png/Zlib/IChecksum.cs create mode 100644 src/ImageSharp/Formats/Png/Zlib/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf create mode 100644 tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs create mode 100644 tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index d6ba08895..b6943e5ac 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -30,11 +30,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// private readonly byte[] buffer = new byte[4]; - /// - /// Reusable CRC for validating chunks. - /// - private readonly Crc32 crc = new Crc32(); - /// /// The global configuration. /// @@ -1159,18 +1154,17 @@ namespace SixLabors.ImageSharp.Formats.Png /// The . private void ValidateChunk(in PngChunk chunk) { - uint crc = this.ReadChunkCrc(); + uint inputCrc = this.ReadChunkCrc(); if (chunk.IsCritical) { Span chunkType = stackalloc byte[4]; BinaryPrimitives.WriteUInt32BigEndian(chunkType, (uint)chunk.Type); - this.crc.Reset(); - this.crc.Update(chunkType); - this.crc.Update(chunk.Data.GetSpan()); + uint validCrc = Crc32.Calculate(chunkType); + validCrc = Crc32.Calculate(validCrc, chunk.Data.GetSpan()); - if (this.crc.Value != crc) + if (validCrc != inputCrc) { string chunkTypeName = Encoding.ASCII.GetString(chunkType); PngThrowHelper.ThrowInvalidChunkCrc(chunkTypeName); diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index c15038847..5f62dc852 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -47,11 +47,6 @@ namespace SixLabors.ImageSharp.Formats.Png /// private readonly byte[] chunkDataBuffer = new byte[16]; - /// - /// Reusable CRC for validating chunks. - /// - private readonly Crc32 crc = new Crc32(); - /// /// The encoder options /// @@ -1041,18 +1036,16 @@ namespace SixLabors.ImageSharp.Formats.Png stream.Write(this.buffer, 0, 8); - this.crc.Reset(); - - this.crc.Update(this.buffer.AsSpan(4, 4)); // Write the type buffer + uint crc = Crc32.Calculate(this.buffer.AsSpan(4, 4)); // Write the type buffer if (data != null && length > 0) { stream.Write(data, offset, length); - this.crc.Update(data.AsSpan(offset, length)); + crc = Crc32.Calculate(crc, data.AsSpan(offset, length)); } - BinaryPrimitives.WriteUInt32BigEndian(this.buffer, (uint)this.crc.Value); + BinaryPrimitives.WriteUInt32BigEndian(this.buffer, crc); stream.Write(this.buffer, 0, 4); // write the crc } diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index 3a5a37ce2..b8cbc8f92 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -4,145 +4,278 @@ using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +#if SUPPORTS_RUNTIME_INTRINSICS +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif namespace SixLabors.ImageSharp.Formats.Png.Zlib { /// - /// Computes Adler32 checksum for a stream of data. An Adler32 - /// checksum is not as reliable as a CRC32 checksum, but a lot faster to - /// compute. + /// Calculates the 32 bit Adler checksum of a given buffer according to + /// RFC 1950. ZLIB Compressed Data Format Specification version 3.3) /// - /// - /// The specification for Adler32 may be found in RFC 1950. - /// ZLIB Compressed Data Format Specification version 3.3) - /// - /// - /// From that document: - /// - /// "ADLER32 (Adler-32 checksum) - /// This contains a checksum value of the uncompressed data - /// (excluding any dictionary data) computed according to Adler-32 - /// algorithm. This algorithm is a 32-bit extension and improvement - /// of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 - /// standard. - /// - /// Adler-32 is composed of two sums accumulated per byte: s1 is - /// the sum of all bytes, s2 is the sum of all s1 values. Both sums - /// are done modulo 65521. s1 is initialized to 1, s2 to zero. The - /// Adler-32 checksum is stored as s2*65536 + s1 in most- - /// significant-byte first (network) order." - /// - /// "8.2. The Adler-32 algorithm - /// - /// The Adler-32 algorithm is much faster than the CRC32 algorithm yet - /// still provides an extremely low probability of undetected errors. - /// - /// The modulo on unsigned long accumulators can be delayed for 5552 - /// bytes, so the modulo operation time is negligible. If the bytes - /// are a, b, c, the second sum is 3a + 2b + c + 3, and so is position - /// and order sensitive, unlike the first sum, which is just a - /// checksum. That 65521 is prime is important to avoid a possible - /// large class of two-byte errors that leave the check unchanged. - /// (The Fletcher checksum uses 255, which is not prime and which also - /// makes the Fletcher check insensitive to single byte changes 0 - - /// 255.) - /// - /// The sum s1 is initialized to 1 instead of zero to make the length - /// of the sequence part of s2, so that the length does not have to be - /// checked separately. (Any sequence of zeroes has a Fletcher - /// checksum of zero.)" - /// - /// - /// - internal sealed class Adler32 : IChecksum + internal static class Adler32 { - /// - /// largest prime smaller than 65536 - /// - private const uint Base = 65521; +#if SUPPORTS_RUNTIME_INTRINSICS + private const int MinBufferSize = 64; +#endif + + // Largest prime smaller than 65536 + private const uint BASE = 65521; + + // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 + private const uint NMAX = 5552; /// - /// The checksum calculated to far. + /// Calculates the Adler32 checksum with the bytes taken from the span. /// - private uint checksum; + /// The readonly span of bytes. + /// The . + [MethodImpl(InliningOptions.ShortMethod)] + public static uint Calculate(ReadOnlySpan buffer) + => Calculate(1U, buffer); /// - /// Initializes a new instance of the class. - /// The checksum starts off with a value of 1. + /// Calculates the Adler32 checksum with the bytes taken from the span and seed. /// - public Adler32() + /// The input Adler32 value. + /// The readonly span of bytes. + /// The . + [MethodImpl(InliningOptions.HotPath | InliningOptions.ShortMethod)] + public static uint Calculate(uint adler, ReadOnlySpan buffer) { - this.Reset(); - } + if (buffer.IsEmpty) + { + return 1U; + } - /// - public long Value - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => this.checksum; - } +#if SUPPORTS_RUNTIME_INTRINSICS + if (Sse3.IsSupported && buffer.Length >= MinBufferSize) + { + return CalculateSse(adler, buffer); + } - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Reset() - { - this.checksum = 1; + return CalculateScalar(adler, buffer); +#else + return CalculateScalar(adler, buffer); +#endif } - /// - /// Updates the checksum with a byte value. - /// - /// - /// The data value to add. The high byte of the int is ignored. - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Update(int value) + // Based on https://github.com/chromium/chromium/blob/master/third_party/zlib/adler32_simd.c +#if SUPPORTS_RUNTIME_INTRINSICS + [MethodImpl(InliningOptions.HotPath | InliningOptions.ShortMethod)] + private static unsafe uint CalculateSse(uint adler, ReadOnlySpan buffer) { - // We could make a length 1 byte array and call update again, but I - // would rather not have that overhead - uint s1 = this.checksum & 0xFFFF; - uint s2 = this.checksum >> 16; + uint s1 = adler & 0xFFFF; + uint s2 = (adler >> 16) & 0xFFFF; + + // Process the data in blocks. + const int BLOCK_SIZE = 1 << 5; + + uint length = (uint)buffer.Length; + uint blocks = length / BLOCK_SIZE; + length -= blocks * BLOCK_SIZE; + + int index = 0; + fixed (byte* bufferPtr = &buffer[0]) + { + index += (int)blocks * BLOCK_SIZE; + var localBufferPtr = bufferPtr; + + // _mm_setr_epi8 on x86 + var tap1 = Vector128.Create(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17); + var tap2 = Vector128.Create(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1); + Vector128 zero = Vector128.Zero; + var ones = Vector128.Create((short)1); + + while (blocks > 0) + { + uint n = NMAX / BLOCK_SIZE; /* The NMAX constraint. */ + if (n > blocks) + { + n = blocks; + } - s1 = (s1 + ((uint)value & 0xFF)) % Base; - s2 = (s1 + s2) % Base; + blocks -= n; - this.checksum = (s2 << 16) + s1; + // Process n blocks of data. At most NMAX data bytes can be + // processed before s2 must be reduced modulo BASE. + Vector128 v_ps = Vector128.CreateScalar(s1 * n).AsInt32(); + Vector128 v_s2 = Vector128.CreateScalar(s2).AsInt32(); + Vector128 v_s1 = Vector128.Zero; + + do + { + // Load 32 input bytes. + Vector128 bytes1 = Sse3.LoadDquVector128(localBufferPtr); + Vector128 bytes2 = Sse3.LoadDquVector128(localBufferPtr + 16); + + // Add previous block byte sum to v_ps. + v_ps = Sse2.Add(v_ps, v_s1); + + // Horizontally add the bytes for s1, multiply-adds the + // bytes by [ 32, 31, 30, ... ] for s2. + v_s1 = Sse2.Add(v_s1, Sse2.SumAbsoluteDifferences(bytes1, zero).AsInt32()); + Vector128 mad1 = Ssse3.MultiplyAddAdjacent(bytes1, tap1); + v_s2 = Sse2.Add(v_s2, Sse2.MultiplyAddAdjacent(mad1, ones)); + + v_s1 = Sse2.Add(v_s1, Sse2.SumAbsoluteDifferences(bytes2, zero).AsInt32()); + Vector128 mad2 = Ssse3.MultiplyAddAdjacent(bytes2, tap2); + v_s2 = Sse2.Add(v_s2, Sse2.MultiplyAddAdjacent(mad2, ones)); + + localBufferPtr += BLOCK_SIZE; + } + while (--n > 0); + + v_s2 = Sse2.Add(v_s2, Sse2.ShiftLeftLogical(v_ps, 5)); + + // Sum epi32 ints v_s1(s2) and accumulate in s1(s2). + const byte S2301 = 0b1011_0001; // A B C D -> B A D C + const byte S1032 = 0b0100_1110; // A B C D -> C D A B + + v_s1 = Sse2.Add(v_s1, Sse2.Shuffle(v_s1, S2301)); + v_s1 = Sse2.Add(v_s1, Sse2.Shuffle(v_s1, S1032)); + + s1 += (uint)v_s1.ToScalar(); + + v_s2 = Sse2.Add(v_s2, Sse2.Shuffle(v_s2, S2301)); + v_s2 = Sse2.Add(v_s2, Sse2.Shuffle(v_s2, S1032)); + + s2 = (uint)v_s2.ToScalar(); + + // Reduce. + s1 %= BASE; + s2 %= BASE; + } + } + + ref byte bufferRef = ref MemoryMarshal.GetReference(buffer); + + if (length > 0) + { + if (length >= 16) + { + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + length -= 16; + } + + while (length-- > 0) + { + s2 += s1 += Unsafe.Add(ref bufferRef, index++); + } + + if (s1 >= BASE) + { + s1 -= BASE; + } + + s2 %= BASE; + } + + return s1 | (s2 << 16); } +#endif - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Update(ReadOnlySpan data) + [MethodImpl(InliningOptions.HotPath | InliningOptions.ShortMethod)] + private static uint CalculateScalar(uint adler, ReadOnlySpan buffer) { - ref byte dataRef = ref MemoryMarshal.GetReference(data); - uint s1 = this.checksum & 0xFFFF; - uint s2 = this.checksum >> 16; + uint s1 = adler & 0xFFFF; + uint s2 = (adler >> 16) & 0xFFFF; + uint k; - int count = data.Length; - int offset = 0; + ref byte bufferRef = ref MemoryMarshal.GetReference(buffer); + uint length = (uint)buffer.Length; + int index = 0; - while (count > 0) + while (length > 0) { - // We can defer the modulo operation: - // s1 maximally grows from 65521 to 65521 + 255 * 3800 - // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31 - int n = 3800; - if (n > count) + k = length < NMAX ? length : NMAX; + length -= k; + + while (k >= 16) { - n = count; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + k -= 16; } - count -= n; - while (--n >= 0) + if (k != 0) { - s1 += Unsafe.Add(ref dataRef, offset++); - s2 += s1; + do + { + s1 += Unsafe.Add(ref bufferRef, index++); + s2 += s1; + } + while (--k != 0); } - s1 %= Base; - s2 %= Base; + s1 %= BASE; + s2 %= BASE; } - this.checksum = (s2 << 16) | s1; + return (s2 << 16) | s1; } } } diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs new file mode 100644 index 000000000..77fb9f825 --- /dev/null +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs @@ -0,0 +1,70 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +namespace SixLabors.ImageSharp.Formats.Png.Zlib +{ + /// + /// Contains precalulated tables for scalar calculations. + /// + internal static partial class Crc32 + { + /// + /// The table of all possible eight bit values for fast scalar lookup. + /// + private static readonly uint[] CrcTable = + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, + 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, + 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, + 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, + 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, + 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, + 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, + 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, + 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, + 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, + 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, + 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, + 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, + 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, + 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, + 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, + 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, + 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, + 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, + 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, + 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, + 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, + 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, + 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, + 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, + 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, + 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, + 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, + 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, + 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, + 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, + 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, + 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, + 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, + 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, + 0x2D02EF8D + }; + } +} diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs index bc3811b5d..633b3b86d 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs @@ -4,151 +4,201 @@ using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +#if SUPPORTS_RUNTIME_INTRINSICS +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +#endif namespace SixLabors.ImageSharp.Formats.Png.Zlib { /// - /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: - /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + /// Calculates the 32 bit Cyclic Redundancy Check (CRC) checksum of a given buffer according to the + /// IEEE 802.3 specification. /// - /// - /// - /// Polynomials over GF(2) are represented in binary, one bit per coefficient, - /// with the lowest powers in the most significant bit. Then adding polynomials - /// is just exclusive-or, and multiplying a polynomial by x is a right shift by - /// one. If we call the above polynomial p, and represent a byte as the - /// polynomial q, also with the lowest power in the most significant bit (so the - /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, - /// where a mod b means the remainder after dividing a by b. - /// - /// - /// This calculation is done using the shift-register method of multiplying and - /// taking the remainder. The register is initialized to zero, and for each - /// incoming bit, x^32 is added mod p to the register if the bit is a one (where - /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - /// x (which is shifting right by one and adding x^32 mod p if the bit shifted - /// out is a one). We start with the highest power (least significant bit) of - /// q and repeat for all eight bits of q. - /// - /// - /// The table is simply the CRC of all possible eight bit values. This is all - /// the information needed to generate CRC's on data a byte at a time for all - /// combinations of CRC register values and incoming bytes. - /// - /// - internal sealed class Crc32 : IChecksum + internal static partial class Crc32 { - /// - /// The cycle redundancy check seed - /// - private const uint CrcSeed = 0xFFFFFFFF; +#if SUPPORTS_RUNTIME_INTRINSICS + private const int MinBufferSize = 64; + private const int ChunksizeMask = 15; + + // Definitions of the bit-reflected domain constants k1, k2, k3, etc and + // the CRC32+Barrett polynomials given at the end of the paper. + private static ulong[] k1k2 = { 0x0154442bd4, 0x01c6e41596 }; + private static ulong[] k3k4 = { 0x01751997d0, 0x00ccaa009e }; + private static ulong[] k5k0 = { 0x0163cd6124, 0x0000000000 }; + private static ulong[] poly = { 0x01db710641, 0x01f7011641 }; +#endif /// - /// The table of all possible eight bit values for fast lookup. + /// Calculates the CRC checksum with the bytes taken from the span. /// - private static readonly uint[] CrcTable = - { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, - 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, - 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, - 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, - 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, - 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, - 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, - 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, - 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, - 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, - 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, - 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, - 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, - 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, - 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, - 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, - 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, - 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, - 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, - 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, - 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, - 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, - 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, - 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, - 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, - 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, - 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, - 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, - 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, - 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, - 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, - 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, - 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, - 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, - 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, - 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, - 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, - 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, - 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, - 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, - 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, - 0x2D02EF8D - }; + /// The readonly span of bytes. + /// The . + [MethodImpl(InliningOptions.ShortMethod)] + public static uint Calculate(ReadOnlySpan buffer) + => Calculate(0U, buffer); /// - /// The data checksum so far. + /// Calculates the CRC checksum with the bytes taken from the span and seed. /// - private uint crc; - - /// - public long Value + /// The input CRC value. + /// The readonly span of bytes. + /// The . + [MethodImpl(InliningOptions.ShortMethod)] + public static uint Calculate(uint crc, ReadOnlySpan buffer) { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => this.crc; + if (buffer.IsEmpty) + { + return 0U; + } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - set => this.crc = (uint)value; +#if SUPPORTS_RUNTIME_INTRINSICS + if (Sse41.IsSupported && Pclmulqdq.IsSupported && buffer.Length >= MinBufferSize) + { + return ~CalculateSse(~crc, buffer); + } + else + { + return ~CalculateScalar(~crc, buffer); + } +#else + return ~CalculateScalar(~crc, buffer); +#endif } - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Reset() +#if SUPPORTS_RUNTIME_INTRINSICS + // Based on https://github.com/chromium/chromium/blob/master/third_party/zlib/crc32_simd.c + [MethodImpl(InliningOptions.HotPath | InliningOptions.ShortMethod)] + private static unsafe uint CalculateSse(uint crc, ReadOnlySpan buffer) { - this.crc = 0; - } + int chunksize = buffer.Length & ~ChunksizeMask; + int length = chunksize; - /// - /// Updates the checksum with the given value. - /// - /// The byte is taken as the lower 8 bits of value. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Update(int value) - { - this.crc ^= CrcSeed; - this.crc = CrcTable[(this.crc ^ value) & 0xFF] ^ (this.crc >> 8); - this.crc ^= CrcSeed; + fixed (byte* bufferPtr = &buffer[0]) + fixed (ulong* k1k2Ptr = &k1k2[0]) + fixed (ulong* k3k4Ptr = &k3k4[0]) + fixed (ulong* k5k0Ptr = &k5k0[0]) + fixed (ulong* polyPtr = &poly[0]) + { + byte* localBufferPtr = bufferPtr; + + // There's at least one block of 64. + Vector128 x1 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x00)); + Vector128 x2 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x10)); + Vector128 x3 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x20)); + Vector128 x4 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x30)); + Vector128 x5; + + x1 = Sse2.Xor(x1, Sse2.ConvertScalarToVector128UInt32(crc).AsUInt64()); + Vector128 x0 = Sse2.LoadVector128(k1k2Ptr); + + localBufferPtr += 64; + length -= 64; + + // Parallel fold blocks of 64, if any. + while (length >= 64) + { + x5 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); + Vector128 x6 = Pclmulqdq.CarrylessMultiply(x2, x0, 0x00); + Vector128 x7 = Pclmulqdq.CarrylessMultiply(x3, x0, 0x00); + Vector128 x8 = Pclmulqdq.CarrylessMultiply(x4, x0, 0x00); + + x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x11); + x2 = Pclmulqdq.CarrylessMultiply(x2, x0, 0x11); + x3 = Pclmulqdq.CarrylessMultiply(x3, x0, 0x11); + x4 = Pclmulqdq.CarrylessMultiply(x4, x0, 0x11); + + Vector128 y5 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x00)); + Vector128 y6 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x10)); + Vector128 y7 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x20)); + Vector128 y8 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x30)); + + x1 = Sse2.Xor(x1, x5); + x2 = Sse2.Xor(x2, x6); + x3 = Sse2.Xor(x3, x7); + x4 = Sse2.Xor(x4, x8); + + x1 = Sse2.Xor(x1, y5); + x2 = Sse2.Xor(x2, y6); + x3 = Sse2.Xor(x3, y7); + x4 = Sse2.Xor(x4, y8); + + localBufferPtr += 64; + length -= 64; + } + + // Fold into 128-bits. + x0 = Sse2.LoadVector128(k3k4Ptr); + + x5 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); + x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x11); + x1 = Sse2.Xor(x1, x2); + x1 = Sse2.Xor(x1, x5); + + x5 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); + x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x11); + x1 = Sse2.Xor(x1, x3); + x1 = Sse2.Xor(x1, x5); + + x5 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); + x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x11); + x1 = Sse2.Xor(x1, x4); + x1 = Sse2.Xor(x1, x5); + + // Single fold blocks of 16, if any. + while (length >= 16) + { + x2 = Sse2.LoadVector128((ulong*)localBufferPtr); + + x5 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); + x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x11); + x1 = Sse2.Xor(x1, x2); + x1 = Sse2.Xor(x1, x5); + + localBufferPtr += 16; + length -= 16; + } + + // Fold 128 - bits to 64 - bits. + x2 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x10); + x3 = Vector128.Create(~0, 0, ~0, 0).AsUInt64(); // _mm_setr_epi32 on x86 + x1 = Sse2.ShiftRightLogical128BitLane(x1, 8); + x1 = Sse2.Xor(x1, x2); + + x0 = Sse2.LoadScalarVector128(k5k0Ptr); + + x2 = Sse2.ShiftRightLogical128BitLane(x1, 4); + x1 = Sse2.And(x1, x3); + x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); + x1 = Sse2.Xor(x1, x2); + + // Barret reduce to 32-bits. + x0 = Sse2.LoadVector128(polyPtr); + + x2 = Sse2.And(x1, x3); + x2 = Pclmulqdq.CarrylessMultiply(x2, x0, 0x10); + x2 = Sse2.And(x2, x3); + x2 = Pclmulqdq.CarrylessMultiply(x2, x0, 0x00); + x1 = Sse2.Xor(x1, x2); + + crc = (uint)Sse41.Extract(x1.AsInt32(), 1); + return buffer.Length - chunksize == 0 ? crc : CalculateScalar(crc, buffer.Slice(chunksize)); + } } +#endif - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Update(ReadOnlySpan data) + [MethodImpl(InliningOptions.HotPath | InliningOptions.ShortMethod)] + private static uint CalculateScalar(uint crc, ReadOnlySpan buffer) { - this.crc ^= CrcSeed; - ref uint crcTableRef = ref MemoryMarshal.GetReference(CrcTable.AsSpan()); - for (int i = 0; i < data.Length; i++) + ref byte bufferRef = ref MemoryMarshal.GetReference(buffer); + + for (int i = 0; i < buffer.Length; i++) { - this.crc = Unsafe.Add(ref crcTableRef, (int)((this.crc ^ data[i]) & 0xFF)) ^ (this.crc >> 8); + crc = Unsafe.Add(ref crcTableRef, (int)((crc ^ Unsafe.Add(ref bufferRef, i)) & 0xFF)) ^ (crc >> 8); } - this.crc ^= CrcSeed; + return crc; } } } diff --git a/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs b/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs deleted file mode 100644 index 018508295..000000000 --- a/src/ImageSharp/Formats/Png/Zlib/IChecksum.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. - -using System; - -namespace SixLabors.ImageSharp.Formats.Png.Zlib -{ - /// - /// Interface to compute a data checksum used by checked input/output streams. - /// A data checksum can be updated by one byte or with a byte array. After each - /// update the value of the current checksum can be returned by calling - /// Value. The complete checksum object can also be reset - /// so it can be used again with new data. - /// - internal interface IChecksum - { - /// - /// Gets the data checksum computed so far. - /// - long Value { get; } - - /// - /// Resets the data checksum as if no update was ever called. - /// - void Reset(); - - /// - /// Adds one byte to the data checksum. - /// - /// - /// The data value to add. The high byte of the integer is ignored. - /// - void Update(int value); - - /// - /// Updates the data checksum with the bytes taken from the span. - /// - /// - /// buffer an array of bytes - /// - void Update(ReadOnlySpan data); - } -} diff --git a/src/ImageSharp/Formats/Png/Zlib/README.md b/src/ImageSharp/Formats/Png/Zlib/README.md index 59f75d05f..3875f9884 100644 --- a/src/ImageSharp/Formats/Png/Zlib/README.md +++ b/src/ImageSharp/Formats/Png/Zlib/README.md @@ -1,5 +1,11 @@ -Deflatestream implementation adapted from +DeflateStream implementation adapted from https://github.com/icsharpcode/SharpZipLib -LIcensed under MIT +Licensed under MIT + +Crc32 and Adler32 SIMD implementation adapted from + +https://github.com/chromium/chromium + +Licensed under BSD 3-Clause "New" or "Revised" License diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs index 4f757e4c9..02f5c54e7 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using System.Runtime.CompilerServices; using SixLabors.ImageSharp.Memory; namespace SixLabors.ImageSharp.Formats.Png.Zlib @@ -20,7 +21,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// /// Computes the checksum for the data stream. /// - private readonly Adler32 adler32 = new Adler32(); + private uint adler = 1U; /// /// A value indicating whether this instance of the given entity has been disposed. @@ -133,10 +134,11 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib public override void SetLength(long value) => throw new NotSupportedException(); /// + [MethodImpl(InliningOptions.ShortMethod)] public override void Write(byte[] buffer, int offset, int count) { this.deflateStream.Write(buffer, offset, count); - this.adler32.Update(buffer.AsSpan(offset, count)); + this.adler = Adler32.Calculate(this.adler, buffer.AsSpan(offset, count)); } /// @@ -153,7 +155,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.deflateStream.Dispose(); // Add the crc - uint crc = (uint)this.adler32.Value; + uint crc = this.adler; this.rawStream.WriteByte((byte)((crc >> 24) & 0xFF)); this.rawStream.WriteByte((byte)((crc >> 16) & 0xFF)); this.rawStream.WriteByte((byte)((crc >> 8) & 0xFF)); diff --git a/src/ImageSharp/Formats/Png/Zlib/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf b/src/ImageSharp/Formats/Png/Zlib/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0eca86b33851a18132d39983b2118e8da3ee7aa GIT binary patch literal 384202 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

{LABC35aZ+t^w!fb%kfniC0^^)fHUEz8(f& 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 Cetk@ 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

  • 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 z + diff --git a/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs b/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs new file mode 100644 index 000000000..5a4a51325 --- /dev/null +++ b/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs @@ -0,0 +1,72 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using BenchmarkDotNet.Attributes; +using SixLabors.ImageSharp.Formats.Png.Zlib; +using SharpAdler32 = ICSharpCode.SharpZipLib.Checksum.Adler32; + +namespace SixLabors.ImageSharp.Benchmarks.General +{ + [Config(typeof(Config.ShortClr))] + public class Adler32Benchmark + { + private byte[] data; + private readonly SharpAdler32 adler = new SharpAdler32(); + + [Params(1024, 2048, 4096)] + public int Count { get; set; } + + [GlobalSetup] + public void SetUp() + { + this.data = new byte[this.Count]; + new Random(1).NextBytes(this.data); + } + + [Benchmark(Baseline = true)] + public long SharpZipLibCalculate() + { + this.adler.Reset(); + this.adler.Update(this.data); + return this.adler.Value; + } + + [Benchmark] + public uint SixLaborsCalculate() + { + return Adler32.Calculate(this.data); + } + } + + // ########## 17/05/2020 ########## + // + // | Method | Runtime | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | + // |--------------------- |-------------- |------ |------------:|-------------:|-----------:|------:|--------:|------:|------:|------:|----------:| + // | SharpZipLibCalculate | .NET 4.7.2 | 1024 | 847.94 ns | 180.284 ns | 9.882 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 1024 | 458.80 ns | 146.235 ns | 8.016 ns | 0.54 | 0.02 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 1024 | 817.11 ns | 31.211 ns | 1.711 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 1024 | 421.48 ns | 86.149 ns | 4.722 ns | 0.52 | 0.01 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 1024 | 879.38 ns | 37.804 ns | 2.072 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 1024 | 57.27 ns | 2.008 ns | 0.110 ns | 0.07 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 2048 | 1,660.62 ns | 46.912 ns | 2.571 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 2048 | 938.41 ns | 3,137.008 ns | 171.950 ns | 0.57 | 0.10 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 2048 | 1,616.69 ns | 172.974 ns | 9.481 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 2048 | 871.52 ns | 485.678 ns | 26.622 ns | 0.54 | 0.02 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 2048 | 1,746.34 ns | 110.539 ns | 6.059 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 2048 | 96.31 ns | 24.491 ns | 1.342 ns | 0.06 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 4096 | 3,102.18 ns | 484.204 ns | 26.541 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 4096 | 1,729.49 ns | 104.446 ns | 5.725 ns | 0.56 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 4096 | 3,251.55 ns | 607.086 ns | 33.276 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 4096 | 1,669.22 ns | 25.194 ns | 1.381 ns | 0.51 | 0.01 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 4096 | 3,514.15 ns | 719.548 ns | 39.441 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 4096 | 180.12 ns | 55.425 ns | 3.038 ns | 0.05 | 0.00 | - | - | - | - | +} diff --git a/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs b/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs new file mode 100644 index 000000000..4bd273b30 --- /dev/null +++ b/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs @@ -0,0 +1,72 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using BenchmarkDotNet.Attributes; +using SixLabors.ImageSharp.Formats.Png.Zlib; +using SharpCrc32 = ICSharpCode.SharpZipLib.Checksum.Crc32; + +namespace SixLabors.ImageSharp.Benchmarks.General +{ + [Config(typeof(Config.ShortClr))] + public class Crc32Benchmark + { + private byte[] data; + private readonly SharpCrc32 crc = new SharpCrc32(); + + [Params(1024, 2048, 4096)] + public int Count { get; set; } + + [GlobalSetup] + public void SetUp() + { + this.data = new byte[this.Count]; + new Random(1).NextBytes(this.data); + } + + [Benchmark(Baseline = true)] + public long SharpZipLibCalculate() + { + this.crc.Reset(); + this.crc.Update(this.data); + return this.crc.Value; + } + + [Benchmark] + public long SixLaborsCalculate() + { + return Crc32.Calculate(this.data); + } + } + + // ########## 17/05/2020 ########## + // + // | Method | Runtime | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | + // |--------------------- |-------------- |------ |-------------:|-------------:|-------------:|------:|--------:|------:|------:|------:|----------:| + // | SharpZipLibCalculate | .NET 4.7.2 | 1024 | 3,067.24 ns | 769.25 ns | 42.165 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 1024 | 2,546.86 ns | 1,106.36 ns | 60.643 ns | 0.83 | 0.02 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 1024 | 3,377.15 ns | 3,903.41 ns | 213.959 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 1024 | 2,524.25 ns | 2,220.97 ns | 121.739 ns | 0.75 | 0.04 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 1024 | 3,980.60 ns | 8,497.37 ns | 465.769 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 1024 | 78.68 ns | 69.82 ns | 3.827 ns | 0.02 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 2048 | 7,934.29 ns | 42,550.13 ns | 2,332.316 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 2048 | 5,437.81 ns | 12,760.51 ns | 699.447 ns | 0.71 | 0.10 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 2048 | 6,008.05 ns | 621.37 ns | 34.059 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 2048 | 4,791.50 ns | 3,894.94 ns | 213.495 ns | 0.80 | 0.04 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 2048 | 5,900.06 ns | 1,344.70 ns | 73.707 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 2048 | 103.12 ns | 15.66 ns | 0.859 ns | 0.02 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 4096 | 12,422.59 ns | 1,308.01 ns | 71.696 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 4096 | 10,524.63 ns | 6,267.56 ns | 343.546 ns | 0.85 | 0.03 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 4096 | 11,888.00 ns | 1,059.25 ns | 58.061 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 4096 | 9,806.24 ns | 241.91 ns | 13.260 ns | 0.82 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 4096 | 12,181.28 ns | 1,974.68 ns | 108.239 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 4096 | 192.39 ns | 10.27 ns | 0.563 ns | 0.02 | 0.00 | - | - | - | - | +} diff --git a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj index f380d0a6a..8c848fd04 100644 --- a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj +++ b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj @@ -25,6 +25,7 @@ + diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs index afc6e05a6..1a9dedc54 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. +using System; using System.Buffers.Binary; using System.IO; using System.Text; @@ -16,6 +17,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { public partial class PngDecoderTests { + // Represents ASCII string of "123456789" + private readonly byte[] check = { 49, 50, 51, 52, 53, 54, 55, 56, 57 }; + // Contains the png marker, IHDR and pHYs chunks of a 1x1 pixel 32bit png 1 a single black pixel. private static readonly byte[] Raw1X1PngIhdrAndpHYs = { @@ -80,17 +84,54 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } [Fact] - public void CalculateCrc_Works() + public void CalculateCrc_Works_LongerRun() { - // arrange - var data = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; - var crc = new Crc32(); - - // act - crc.Update(data); + // Longer run, enough to require moving the point in SIMD implementation with + // offset for dropping back to scalar. + var data = new byte[] + { + 0, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215 + }; // assert - Assert.Equal(0x88AA689F, crc.Value); + uint crc = Crc32.Calculate(data); + Assert.Equal(0xC1125402, crc); + } + + [Fact] + public void CalculateCrc_Works() + { + // Short run, less than 64. + var data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }; + uint crc = Crc32.Calculate(data); + + Assert.Equal(0x88AA689F, crc); } private static string GetChunkTypeName(uint value) From 2599275c79c2cd015b6469f87e77433f784860f6 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:19:14 +0100 Subject: [PATCH 064/130] Update src/ImageSharp/Formats/Jpeg/JpegDecoder.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Formats/Jpeg/JpegDecoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs index 09bf77022..810308744 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs @@ -27,7 +27,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg using var decoder = new JpegDecoderCore(configuration, this); try { - return await decoder.DecodeAsync(stream); + return await decoder.DecodeAsync(stream).ConfigureAwait(false); } catch (InvalidMemoryOperationException ex) { From ef3b71fae374d9b44c29175c5a9b34eea7d01aa3 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:19:27 +0100 Subject: [PATCH 065/130] Update src/ImageSharp/Formats/Png/PngEncoder.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Formats/Png/PngEncoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 4209bef61..2c85f1407 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.Formats.Png { using (var encoder = new PngEncoderCore(image.GetMemoryAllocator(), image.GetConfiguration(), new PngEncoderOptions(this))) { - await encoder.EncodeAsync(image, stream); + await encoder.EncodeAsync(image, stream).ConfigureAwait(false); } } } From e6435532aa7d9e6390613e3651c61e95dcf1788f Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:19:43 +0100 Subject: [PATCH 066/130] Update src/ImageSharp/Image.Decode.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.Decode.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index c1cf5cc14..7afd1ab53 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -141,7 +141,7 @@ namespace SixLabors.ImageSharp return (null, null); } - Image img = await decoder.DecodeAsync(config, stream); + Image img = await decoder.DecodeAsync(config, stream).ConfigureAwait(false); return new FormattedImage(img, format); } From a27eb49a8d30b3288a5d2e01880f8ebcee69a126 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:19:56 +0100 Subject: [PATCH 067/130] Update src/ImageSharp/Image.Decode.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.Decode.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index 7afd1ab53..1adcc4a79 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -165,7 +165,7 @@ namespace SixLabors.ImageSharp return (null, null); } - Image img = await decoder.DecodeAsync(config, stream); + Image img = await decoder.DecodeAsync(config, stream).ConfigureAwait(false); return new FormattedImage(img, format); } From f7beaa1804f8617299f2ae0487400b55124c161e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:20:14 +0100 Subject: [PATCH 068/130] Update src/ImageSharp/Image.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.cs b/src/ImageSharp/Image.cs index 8a691a4b3..fd2fb1f87 100644 --- a/src/ImageSharp/Image.cs +++ b/src/ImageSharp/Image.cs @@ -185,7 +185,7 @@ namespace SixLabors.ImageSharp public Task VisitAsync(Image image) where TPixel : unmanaged, IPixel { - return this.encoder.EncodeAsync(image, this.stream); + return this.encoder.EncodeAsync(image, this.stream).ConfigureAwait(false); } } } From 2fc305897a18cf9dbc12956067f81d41fc5fc8f9 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:20:26 +0100 Subject: [PATCH 069/130] Update src/ImageSharp/Image.FromStream.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.FromStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 713270525..5be263bf6 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -330,7 +330,7 @@ namespace SixLabors.ImageSharp /// A new .> public static async Task LoadAsync(Configuration configuration, Stream stream) { - var fmt = await LoadWithFormatAsync(configuration, stream); + var fmt = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); return fmt.Image; } From 740d1332a4b93d1095dd293f5deb128a6f8923b1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:20:39 +0100 Subject: [PATCH 070/130] Update src/ImageSharp/Image.FromStream.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.FromStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 5be263bf6..bb6b5b1e8 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -129,7 +129,7 @@ namespace SixLabors.ImageSharp /// public static async Task IdentifyAsync(Configuration configuration, Stream stream) { - FormattedImageInfo res = await IdentifyWithFormatAsync(configuration, stream); + FormattedImageInfo res = await IdentifyWithFormatAsync(configuration, stream).ConfigureAwait(false); return res.ImageInfo; } From 6c18639d96c5d3949fc8fc4dcdb732ed935b27c9 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:20:51 +0100 Subject: [PATCH 071/130] Update src/ImageSharp/Image.FromStream.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.FromStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index bb6b5b1e8..f5a181da3 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -586,7 +586,7 @@ namespace SixLabors.ImageSharp public static async Task> LoadAsync(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel { - (Image img, _) = await LoadWithFormatAsync(configuration, stream); + (Image img, _) = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); return img; } From b50577103d3e15ab29ac6ebf697bf8729a8068c7 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:21:03 +0100 Subject: [PATCH 072/130] Update src/ImageSharp/Image.FromStream.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.FromStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index f5a181da3..504281011 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -675,7 +675,7 @@ namespace SixLabors.ImageSharp stream.Position = 0; } - return await action(stream); + return await action(stream).ConfigureAwait(false); } using (var memoryStream = new MemoryStream()) // should really find a nice way to use a pool for these!! From 196916594313a3d8e38bc66ea06d238bb577efb3 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:21:13 +0100 Subject: [PATCH 073/130] Update src/ImageSharp/Image.FromStream.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.FromStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 504281011..cb6ac226b 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -683,7 +683,7 @@ namespace SixLabors.ImageSharp await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; - return await action(memoryStream); + return await action(memoryStream).ConfigureAwait(false); } } } From 43b0d5e9443cee6b465528a8e16890dffbf922a0 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 11:21:31 +0100 Subject: [PATCH 074/130] Update src/ImageSharp/Image.FromStream.cs Co-authored-by: Brian Popow <38701097+brianpopow@users.noreply.github.com> --- src/ImageSharp/Image.FromStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index cb6ac226b..cdd44a4fd 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -680,7 +680,7 @@ namespace SixLabors.ImageSharp using (var memoryStream = new MemoryStream()) // should really find a nice way to use a pool for these!! { - await stream.CopyToAsync(memoryStream); + await stream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; return await action(memoryStream).ConfigureAwait(false); From 9bbf05d3ad222cd59da345b8e1f6ad75316cbe36 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 15:11:53 +0100 Subject: [PATCH 075/130] async await where required --- .../Advanced/AdvancedImageExtensions.cs | 6 +- src/ImageSharp/Formats/Bmp/BmpEncoder.cs | 4 +- src/ImageSharp/Formats/Gif/GifEncoder.cs | 4 +- src/ImageSharp/Formats/Tga/TgaDecoder.cs | 4 +- src/ImageSharp/Formats/Tga/TgaEncoder.cs | 4 +- src/ImageSharp/Image.Decode.cs | 11 ++- src/ImageSharp/Image.FromStream.cs | 67 ++++++++++++++----- src/ImageSharp/Image.cs | 15 ++--- 8 files changed, 73 insertions(+), 42 deletions(-) diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index e3a5938e2..185ac9cc4 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -4,8 +4,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; @@ -76,8 +74,8 @@ namespace SixLabors.ImageSharp.Advanced /// The source. /// The visitor. /// A representing the asynchronous operation. - public static Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) - => source.AcceptAsync(visitor); + public static async Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) + => await source.AcceptAsync(visitor).ConfigureAwait(false); /// /// Gets the configuration for the image. diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs index 52b87ef27..70023ffc1 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs @@ -42,11 +42,11 @@ namespace SixLabors.ImageSharp.Formats.Bmp } /// - public Task EncodeAsync(Image image, Stream stream) + public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { var encoder = new BmpEncoderCore(this, image.GetMemoryAllocator()); - return encoder.EncodeAsync(image, stream); + await encoder.EncodeAsync(image, stream).ConfigureAwait(false); } } } diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index 8d4c33eff..78e78a81f 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -41,11 +41,11 @@ namespace SixLabors.ImageSharp.Formats.Gif } /// - public Task EncodeAsync(Image image, Stream stream) + public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { var encoder = new GifEncoderCore(image.GetConfiguration(), this); - return encoder.EncodeAsync(image, stream); + await encoder.EncodeAsync(image, stream).ConfigureAwait(false); } } } diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index 5cd7ca7b0..f977623f4 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -74,11 +74,11 @@ namespace SixLabors.ImageSharp.Formats.Tga } /// - public Task IdentifyAsync(Configuration configuration, Stream stream) + public async Task IdentifyAsync(Configuration configuration, Stream stream) { Guard.NotNull(stream, nameof(stream)); - return new TgaDecoderCore(configuration, this).IdentifyAsync(stream); + return await new TgaDecoderCore(configuration, this).IdentifyAsync(stream).ConfigureAwait(false); } } } diff --git a/src/ImageSharp/Formats/Tga/TgaEncoder.cs b/src/ImageSharp/Formats/Tga/TgaEncoder.cs index 058dd3559..449a724bf 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoder.cs @@ -32,11 +32,11 @@ namespace SixLabors.ImageSharp.Formats.Tga } /// - public Task EncodeAsync(Image image, Stream stream) + public async Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { var encoder = new TgaEncoderCore(this, image.GetMemoryAllocator()); - return encoder.EncodeAsync(image, stream); + await encoder.EncodeAsync(image, stream).ConfigureAwait(false); } } } diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index 1adcc4a79..9623e6e43 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -79,7 +79,7 @@ namespace SixLabors.ImageSharp /// The mime type or null if none found. private static Task InternalDetectFormatAsync(Stream stream, Configuration config) { - // we are going to cheat here because we know that by this point we have been wrapped in a + // We are going to cheat here because we know that by this point we have been wrapped in a // seekable stream then we are free to use sync APIs this is potentially brittle and may // need a better fix in the future. return Task.FromResult(InternalDetectFormat(stream, config)); @@ -184,7 +184,7 @@ namespace SixLabors.ImageSharp return (null, null); } - var info = detector?.Identify(config, stream); + IImageInfo info = detector?.Identify(config, stream); return new FormattedImageInfo(info, format); } @@ -203,7 +203,12 @@ namespace SixLabors.ImageSharp return (null, null); } - var info = await detector?.IdentifyAsync(config, stream); + if (detector is null) + { + return (null, format); + } + + IImageInfo info = await detector.IdentifyAsync(config, stream).ConfigureAwait(false); return new FormattedImageInfo(info, format); } } diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index cdd44a4fd..bb36b1462 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -57,8 +57,12 @@ namespace SixLabors.ImageSharp /// The stream is null. /// The stream is not readable. /// The format type or null if none found. - public static Task DetectFormatAsync(Configuration configuration, Stream stream) - => WithSeekableStreamAsync(configuration, stream, s => InternalDetectFormatAsync(s, configuration)); + public static async Task DetectFormatAsync(Configuration configuration, Stream stream) + => await WithSeekableStreamAsync( + configuration, + stream, + async s => await InternalDetectFormatAsync(s, configuration).ConfigureAwait(false)) + .ConfigureAwait(false); /// /// Reads the raw image information from the specified stream without fully decoding it. @@ -180,8 +184,12 @@ namespace SixLabors.ImageSharp /// /// The with set to null if suitable info detector is not found. /// - public static Task IdentifyWithFormatAsync(Configuration configuration, Stream stream) - => WithSeekableStreamAsync(configuration, stream, s => InternalIdentityAsync(s, configuration ?? Configuration.Default)); + public static async Task IdentifyWithFormatAsync(Configuration configuration, Stream stream) + => await WithSeekableStreamAsync( + configuration, + stream, + async s => await InternalIdentityAsync(s, configuration ?? Configuration.Default)) + .ConfigureAwait(false); /// /// Decode a new instance of the class from the given stream. @@ -330,7 +338,7 @@ namespace SixLabors.ImageSharp /// A new .> public static async Task LoadAsync(Configuration configuration, Stream stream) { - var fmt = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); + FormattedImage fmt = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); return fmt.Image; } @@ -387,9 +395,9 @@ namespace SixLabors.ImageSharp /// Image contains invalid content. /// The pixel format. /// A representing the asynchronous operation. - public static Task> LoadWithFormatAsync(Stream stream) + public static async Task> LoadWithFormatAsync(Stream stream) where TPixel : unmanaged, IPixel - => LoadWithFormatAsync(Configuration.Default, stream); + => await LoadWithFormatAsync(Configuration.Default, stream).ConfigureAwait(false); /// /// Create a new instance of the class from the given stream. @@ -417,9 +425,13 @@ namespace SixLabors.ImageSharp /// Image contains invalid content. /// The pixel format. /// A new .> - public static Task> LoadAsync(Stream stream, IImageDecoder decoder) + public static async Task> LoadAsync(Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel - => WithSeekableStreamAsync(Configuration.Default, stream, s => decoder.DecodeAsync(Configuration.Default, s)); + => await WithSeekableStreamAsync( + Configuration.Default, + stream, + async s => await decoder.DecodeAsync(Configuration.Default, s).ConfigureAwait(false)) + .ConfigureAwait(false); /// /// Create a new instance of the class from the given stream. @@ -451,9 +463,13 @@ namespace SixLabors.ImageSharp /// Image contains invalid content. /// The pixel format. /// A new .> - public static Task> LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) + public static async Task> LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel - => WithSeekableStreamAsync(configuration, stream, s => decoder.DecodeAsync(configuration, s)); + => await WithSeekableStreamAsync( + configuration, + stream, + async s => await decoder.DecodeAsync(configuration, s).ConfigureAwait(false)) + .ConfigureAwait(false); /// /// Create a new instance of the class from the given stream. @@ -520,7 +536,11 @@ namespace SixLabors.ImageSharp /// A new . public static async Task LoadWithFormatAsync(Configuration configuration, Stream stream) { - (Image img, IImageFormat format) data = await WithSeekableStreamAsync(configuration, stream, s => DecodeAsync(s, configuration)); + (Image img, IImageFormat format) data = await WithSeekableStreamAsync( + configuration, + stream, + async s => await DecodeAsync(s, configuration).ConfigureAwait(false)) + .ConfigureAwait(false); if (data.img != null) { @@ -553,7 +573,12 @@ namespace SixLabors.ImageSharp public static async Task> LoadWithFormatAsync(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel { - (Image img, IImageFormat format) data = await WithSeekableStreamAsync(configuration, stream, s => DecodeAsync(s, configuration)); + (Image img, IImageFormat format) data = + await WithSeekableStreamAsync( + configuration, + stream, + async s => await DecodeAsync(s, configuration).ConfigureAwait(false)) + .ConfigureAwait(false); if (data.img != null) { @@ -646,6 +671,9 @@ namespace SixLabors.ImageSharp } // We want to be able to load images from things like HttpContext.Request.Body + // TODO: Should really find a nice way to use a pool for these. + // Investigate readonly version of the linked implementation. + // https://github.com/mgravell/Pipelines.Sockets.Unofficial/compare/mgravell:24482d4...mgravell:6740ea4 using (var memoryStream = new MemoryStream()) { stream.CopyTo(memoryStream); @@ -655,7 +683,10 @@ namespace SixLabors.ImageSharp } } - private static async Task WithSeekableStreamAsync(Configuration configuration, Stream stream, Func> action) + private static async Task WithSeekableStreamAsync( + Configuration configuration, + Stream stream, + Func> action) { Guard.NotNull(configuration, nameof(configuration)); Guard.NotNull(stream, nameof(stream)); @@ -665,8 +696,9 @@ namespace SixLabors.ImageSharp throw new NotSupportedException("Cannot read from the stream."); } - // to make sure we don't trigger anything with aspnetcore then we just need to make sure we are seekable and we make the copy using CopyToAsync - // if the stream is seekable then we arn't using one of the aspnetcore wrapped streams that error on sync api calls and we can use it with out + // To make sure we don't trigger anything with aspnetcore then we just need to make sure we are + // seekable and we make the copy using CopyToAsync if the stream is seekable then we arn't using + // one of the aspnetcore wrapped streams that error on sync api calls and we can use it without // having to further wrap if (stream.CanSeek) { @@ -678,7 +710,8 @@ namespace SixLabors.ImageSharp return await action(stream).ConfigureAwait(false); } - using (var memoryStream = new MemoryStream()) // should really find a nice way to use a pool for these!! + // TODO: See above comment. + using (var memoryStream = new MemoryStream()) { await stream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; diff --git a/src/ImageSharp/Image.cs b/src/ImageSharp/Image.cs index fd2fb1f87..167847360 100644 --- a/src/ImageSharp/Image.cs +++ b/src/ImageSharp/Image.cs @@ -105,13 +105,13 @@ namespace SixLabors.ImageSharp /// The encoder to save the image with. /// Thrown if the stream or encoder is null. /// A representing the asynchronous operation. - public Task SaveAsync(Stream stream, IImageEncoder encoder) + public async Task SaveAsync(Stream stream, IImageEncoder encoder) { Guard.NotNull(stream, nameof(stream)); Guard.NotNull(encoder, nameof(encoder)); this.EnsureNotDisposed(); - return this.AcceptVisitorAsync(new EncodeVisitor(encoder, stream)); + await this.AcceptVisitorAsync(new EncodeVisitor(encoder, stream)).ConfigureAwait(false); } /// @@ -177,16 +177,11 @@ namespace SixLabors.ImageSharp } public void Visit(Image image) - where TPixel : unmanaged, IPixel - { - this.encoder.Encode(image, this.stream); - } + where TPixel : unmanaged, IPixel => this.encoder.Encode(image, this.stream); - public Task VisitAsync(Image image) + public async Task VisitAsync(Image image) where TPixel : unmanaged, IPixel - { - return this.encoder.EncodeAsync(image, this.stream).ConfigureAwait(false); - } + => await this.encoder.EncodeAsync(image, this.stream).ConfigureAwait(false); } } } From 1f74e31a53b9fd1db5b16428fa7f1d9329fa5a35 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 15:12:16 +0100 Subject: [PATCH 076/130] implement IEquatable --- src/ImageSharp/FormattedImage.cs | 56 +++++++++++++++--------- src/ImageSharp/FormattedImageInfo.cs | 46 ++++++++++++------- src/ImageSharp/FormattedImage{TPixel}.cs | 54 +++++++++++++++-------- 3 files changed, 101 insertions(+), 55 deletions(-) diff --git a/src/ImageSharp/FormattedImage.cs b/src/ImageSharp/FormattedImage.cs index 5617be351..9b604eced 100644 --- a/src/ImageSharp/FormattedImage.cs +++ b/src/ImageSharp/FormattedImage.cs @@ -8,14 +8,14 @@ using SixLabors.ImageSharp.Formats; namespace SixLabors.ImageSharp { /// - /// Struct to curry and for return from async overloads. + /// Struct to curry and for return from async overloads. /// - public readonly struct FormattedImage + public readonly struct FormattedImage : IEquatable { /// /// Initializes a new instance of the struct. /// - /// The . + /// The . /// The . public FormattedImage(Image image, IImageFormat format) { @@ -34,41 +34,57 @@ namespace SixLabors.ImageSharp public readonly IImageFormat Format { get; } /// - /// Converts to + /// Converts to . /// /// The to convert. public static implicit operator (Image image, IImageFormat format)(FormattedImage value) - { - return (value.Image, value.Format); - } + => (value.Image, value.Format); /// /// Converts to /// /// The to convert. public static implicit operator FormattedImage((Image image, IImageFormat format) value) - { - return new FormattedImage(value.image, value.format); - } + => new FormattedImage(value.image, value.format); + + /// + /// Compares two objects for equality. + /// + /// The on the left side of the operand. + /// The on the right side of the operand. + /// + /// True if the parameter is equal to the parameter; otherwise, false. + /// + public static bool operator ==(FormattedImage left, FormattedImage right) + => left.Equals(right); + + /// + /// Compares two objects for inequality. + /// + /// The on the left side of the operand. + /// The on the right side of the operand. + /// + /// True if the parameter is not equal to the parameter; otherwise, false. + /// + public static bool operator !=(FormattedImage left, FormattedImage right) + => !(left == right); /// public override bool Equals(object obj) - { - return obj is FormattedImage other && - EqualityComparer.Default.Equals(this.Image, other.Image) && - EqualityComparer.Default.Equals(this.Format, other.Format); - } + => obj is FormattedImage image && this.Equals(image); /// - public override int GetHashCode() - { - return HashCode.Combine(this.Image, this.Format); - } + public bool Equals(FormattedImage other) + => EqualityComparer.Default.Equals(this.Image, other.Image) + && EqualityComparer.Default.Equals(this.Format, other.Format); + + /// + public override int GetHashCode() => HashCode.Combine(this.Image, this.Format); /// /// Deconstructs into component parts. /// - /// The . + /// The . /// The . public void Deconstruct(out Image image, out IImageFormat format) { diff --git a/src/ImageSharp/FormattedImageInfo.cs b/src/ImageSharp/FormattedImageInfo.cs index b3f854fc4..72368be34 100644 --- a/src/ImageSharp/FormattedImageInfo.cs +++ b/src/ImageSharp/FormattedImageInfo.cs @@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp /// /// Struct to curry and for return from async overloads. /// - public readonly struct FormattedImageInfo + public readonly struct FormattedImageInfo : IEquatable { /// /// Initializes a new instance of the struct. @@ -38,32 +38,46 @@ namespace SixLabors.ImageSharp /// /// The to convert. public static implicit operator (IImageInfo imageInfo, IImageFormat format)(FormattedImageInfo value) - { - return (value.ImageInfo, value.Format); - } + => (value.ImageInfo, value.Format); /// /// Converts to /// /// The to convert. public static implicit operator FormattedImageInfo((IImageInfo imageInfo, IImageFormat format) value) - { - return new FormattedImageInfo(value.imageInfo, value.format); - } + => new FormattedImageInfo(value.imageInfo, value.format); + + /// + /// Compares two objects for equality. + /// + /// The on the left side of the operand. + /// The on the right side of the operand. + /// + /// True if the parameter is equal to the parameter; otherwise, false. + /// + public static bool operator ==(FormattedImageInfo left, FormattedImageInfo right) => left.Equals(right); + + /// + /// Compares two objects for inequality. + /// + /// The on the left side of the operand. + /// The on the right side of the operand. + /// + /// True if the parameter is not equal to the parameter; otherwise, false. + /// + public static bool operator !=(FormattedImageInfo left, FormattedImageInfo right) => !(left == right); /// public override bool Equals(object obj) - { - return obj is FormattedImageInfo other && - EqualityComparer.Default.Equals(this.ImageInfo, other.ImageInfo) && - EqualityComparer.Default.Equals(this.Format, other.Format); - } + => obj is FormattedImageInfo info && this.Equals(info); /// - public override int GetHashCode() - { - return HashCode.Combine(this.ImageInfo, this.Format); - } + public bool Equals(FormattedImageInfo other) + => EqualityComparer.Default.Equals(this.ImageInfo, other.ImageInfo) + && EqualityComparer.Default.Equals(this.Format, other.Format); + + /// + public override int GetHashCode() => HashCode.Combine(this.ImageInfo, this.Format); /// /// Deconstructs into component parts. diff --git a/src/ImageSharp/FormattedImage{TPixel}.cs b/src/ImageSharp/FormattedImage{TPixel}.cs index dc4609b7e..bb3eeabe7 100644 --- a/src/ImageSharp/FormattedImage{TPixel}.cs +++ b/src/ImageSharp/FormattedImage{TPixel}.cs @@ -9,16 +9,16 @@ using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp { /// - /// Struct to curry and for return from async overloads. + /// Struct to curry and for return from async overloads. /// /// The pixel format. - public readonly struct FormattedImage + public readonly struct FormattedImage : IEquatable> where TPixel : unmanaged, IPixel { /// /// Initializes a new instance of the struct. /// - /// The . + /// The . /// The . public FormattedImage(Image image, IImageFormat format) { @@ -41,37 +41,53 @@ namespace SixLabors.ImageSharp /// /// The to convert. public static implicit operator (Image image, IImageFormat format)(FormattedImage value) - { - return (value.Image, value.Format); - } + => (value.Image, value.Format); /// /// Converts to /// /// The to convert. public static implicit operator FormattedImage((Image image, IImageFormat format) value) - { - return new FormattedImage(value.image, value.format); - } + => new FormattedImage(value.image, value.format); + + /// + /// Compares two objects for equality. + /// + /// The on the left side of the operand. + /// The on the right side of the operand. + /// + /// True if the parameter is equal to the parameter; otherwise, false. + /// + public static bool operator ==(FormattedImage left, FormattedImage right) + => left.Equals(right); + + /// + /// Compares two objects for inequality. + /// + /// The on the left side of the operand. + /// The on the right side of the operand. + /// + /// True if the parameter is not equal to the parameter; otherwise, false. + /// + public static bool operator !=(FormattedImage left, FormattedImage right) + => !(left == right); /// public override bool Equals(object obj) - { - return obj is FormattedImage other && - EqualityComparer>.Default.Equals(this.Image, other.Image) && - EqualityComparer.Default.Equals(this.Format, other.Format); - } + => obj is FormattedImage image && this.Equals(image); /// - public override int GetHashCode() - { - return HashCode.Combine(this.Image, this.Format); - } + public bool Equals(FormattedImage other) + => EqualityComparer>.Default.Equals(this.Image, other.Image) + && EqualityComparer.Default.Equals(this.Format, other.Format); + + /// + public override int GetHashCode() => HashCode.Combine(this.Image, this.Format); /// /// Deconstructs into component parts. /// - /// The . + /// The . /// The . public void Deconstruct(out Image image, out IImageFormat format) { From 6361a22718be409b21bdbbe88e9195f033bde642 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 15:38:52 +0100 Subject: [PATCH 077/130] Rename extension --- .../Advanced/AdvancedImageExtensions.cs | 20 +++++++++---------- src/ImageSharp/ImageExtensions.cs | 4 ++-- .../Image/ImageTests.SaveAsync.cs | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index 185ac9cc4..61dfc8944 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -18,16 +18,16 @@ namespace SixLabors.ImageSharp.Advanced public static class AdvancedImageExtensions { /// - /// For a given path find the best encoder to use + /// For a given file path find the best encoder to use via its extension. /// - /// The source. - /// The Path + /// The source image. + /// The target file path to save the image to. /// The matching encoder. - public static IImageEncoder FindEncoded(this Image source, string path) + public static IImageEncoder DetectEncoder(this Image source, string filePath) { - Guard.NotNull(path, nameof(path)); + Guard.NotNull(filePath, nameof(filePath)); - string ext = Path.GetExtension(path); + string ext = Path.GetExtension(filePath); IImageFormat format = source.GetConfiguration().ImageFormatsManager.FindFormatByFileExtension(ext); if (format is null) { @@ -62,8 +62,8 @@ namespace SixLabors.ImageSharp.Advanced /// Accepts a to implement a double-dispatch pattern in order to /// apply pixel-specific operations on non-generic instances /// - /// The source. - /// The visitor. + /// The source image. + /// The image visitor. public static void AcceptVisitor(this Image source, IImageVisitor visitor) => source.Accept(visitor); @@ -71,8 +71,8 @@ namespace SixLabors.ImageSharp.Advanced /// Accepts a to implement a double-dispatch pattern in order to /// apply pixel-specific operations on non-generic instances /// - /// The source. - /// The visitor. + /// The source image. + /// The image visitor. /// A representing the asynchronous operation. public static async Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) => await source.AcceptAsync(visitor).ConfigureAwait(false); diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs index df2c12106..a04688e5a 100644 --- a/src/ImageSharp/ImageExtensions.cs +++ b/src/ImageSharp/ImageExtensions.cs @@ -23,7 +23,7 @@ namespace SixLabors.ImageSharp /// The file path to save the image to. /// The path is null. public static void Save(this Image source, string path) - => source.Save(path, source.FindEncoded(path)); + => source.Save(path, source.DetectEncoder(path)); /// /// Writes the image to the given stream using the currently loaded image format. @@ -33,7 +33,7 @@ namespace SixLabors.ImageSharp /// The path is null. /// A representing the asynchronous operation. public static Task SaveAsync(this Image source, string path) - => source.SaveAsync(path, source.FindEncoded(path)); + => source.SaveAsync(path, source.DetectEncoder(path)); /// /// Writes the image to the given stream using the currently loaded image format. diff --git a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs index a327861ca..0aba932ce 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs @@ -95,7 +95,7 @@ namespace SixLabors.ImageSharp.Tests { using (var image = new Image(5, 5)) { - IImageEncoder encoder = image.FindEncoded(filename); + IImageEncoder encoder = image.DetectEncoder(filename); using (var stream = new MemoryStream()) { var asyncStream = new AsyncStreamWrapper(stream, () => false); From c910a81d7e563c39b46c59282eeefbb168d0005c Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 16:29:05 +0100 Subject: [PATCH 078/130] Add default seed values --- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 9 +++++++-- src/ImageSharp/Formats/Png/Zlib/Crc32.cs | 9 +++++++-- src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index b8cbc8f92..bd354a508 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -17,6 +17,11 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// internal static class Adler32 { + /// + /// The default initial seed value of a Adler32 checksum calculation. + /// + public const uint SeedValue = 1U; + #if SUPPORTS_RUNTIME_INTRINSICS private const int MinBufferSize = 64; #endif @@ -34,7 +39,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// The . [MethodImpl(InliningOptions.ShortMethod)] public static uint Calculate(ReadOnlySpan buffer) - => Calculate(1U, buffer); + => Calculate(SeedValue, buffer); /// /// Calculates the Adler32 checksum with the bytes taken from the span and seed. @@ -47,7 +52,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib { if (buffer.IsEmpty) { - return 1U; + return SeedValue; } #if SUPPORTS_RUNTIME_INTRINSICS diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs index 633b3b86d..ad047a41d 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs @@ -17,6 +17,11 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// internal static partial class Crc32 { + /// + /// The default initial seed value of a Crc32 checksum calculation. + /// + public const uint SeedValue = 0U; + #if SUPPORTS_RUNTIME_INTRINSICS private const int MinBufferSize = 64; private const int ChunksizeMask = 15; @@ -36,7 +41,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// The . [MethodImpl(InliningOptions.ShortMethod)] public static uint Calculate(ReadOnlySpan buffer) - => Calculate(0U, buffer); + => Calculate(SeedValue, buffer); /// /// Calculates the CRC checksum with the bytes taken from the span and seed. @@ -49,7 +54,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib { if (buffer.IsEmpty) { - return 0U; + return SeedValue; } #if SUPPORTS_RUNTIME_INTRINSICS diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs index 02f5c54e7..3257fa884 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs @@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// /// Computes the checksum for the data stream. /// - private uint adler = 1U; + private uint adler = Adler32.SeedValue; /// /// A value indicating whether this instance of the given entity has been disposed. From 5a8f78a586459323f7f672f5dffaab3274ab99d9 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 18:06:40 +0100 Subject: [PATCH 079/130] Revert unrequired async/await additions --- .../Advanced/AdvancedImageExtensions.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpEncoder.cs | 4 +- src/ImageSharp/Formats/Gif/GifEncoder.cs | 4 +- src/ImageSharp/Formats/Tga/TgaDecoder.cs | 4 +- src/ImageSharp/Formats/Tga/TgaEncoder.cs | 4 +- src/ImageSharp/Image.FromStream.cs | 37 +++++++++---------- 6 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index 61dfc8944..fea0feb53 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -74,8 +74,8 @@ namespace SixLabors.ImageSharp.Advanced /// The source image. /// The image visitor. /// A representing the asynchronous operation. - public static async Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) - => await source.AcceptAsync(visitor).ConfigureAwait(false); + public static Task AcceptVisitorAsync(this Image source, IImageVisitorAsync visitor) + => source.AcceptAsync(visitor); /// /// Gets the configuration for the image. diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs index 70023ffc1..52b87ef27 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs @@ -42,11 +42,11 @@ namespace SixLabors.ImageSharp.Formats.Bmp } /// - public async Task EncodeAsync(Image image, Stream stream) + public Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { var encoder = new BmpEncoderCore(this, image.GetMemoryAllocator()); - await encoder.EncodeAsync(image, stream).ConfigureAwait(false); + return encoder.EncodeAsync(image, stream); } } } diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index 78e78a81f..8d4c33eff 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -41,11 +41,11 @@ namespace SixLabors.ImageSharp.Formats.Gif } /// - public async Task EncodeAsync(Image image, Stream stream) + public Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { var encoder = new GifEncoderCore(image.GetConfiguration(), this); - await encoder.EncodeAsync(image, stream).ConfigureAwait(false); + return encoder.EncodeAsync(image, stream); } } } diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index f977623f4..5cd7ca7b0 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -74,11 +74,11 @@ namespace SixLabors.ImageSharp.Formats.Tga } /// - public async Task IdentifyAsync(Configuration configuration, Stream stream) + public Task IdentifyAsync(Configuration configuration, Stream stream) { Guard.NotNull(stream, nameof(stream)); - return await new TgaDecoderCore(configuration, this).IdentifyAsync(stream).ConfigureAwait(false); + return new TgaDecoderCore(configuration, this).IdentifyAsync(stream); } } } diff --git a/src/ImageSharp/Formats/Tga/TgaEncoder.cs b/src/ImageSharp/Formats/Tga/TgaEncoder.cs index 449a724bf..058dd3559 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoder.cs @@ -32,11 +32,11 @@ namespace SixLabors.ImageSharp.Formats.Tga } /// - public async Task EncodeAsync(Image image, Stream stream) + public Task EncodeAsync(Image image, Stream stream) where TPixel : unmanaged, IPixel { var encoder = new TgaEncoderCore(this, image.GetMemoryAllocator()); - await encoder.EncodeAsync(image, stream).ConfigureAwait(false); + return encoder.EncodeAsync(image, stream); } } } diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index bb36b1462..afd0f0e59 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -57,12 +57,11 @@ namespace SixLabors.ImageSharp /// The stream is null. /// The stream is not readable. /// The format type or null if none found. - public static async Task DetectFormatAsync(Configuration configuration, Stream stream) - => await WithSeekableStreamAsync( + public static Task DetectFormatAsync(Configuration configuration, Stream stream) + => WithSeekableStreamAsync( configuration, stream, - async s => await InternalDetectFormatAsync(s, configuration).ConfigureAwait(false)) - .ConfigureAwait(false); + s => InternalDetectFormatAsync(s, configuration)); /// /// Reads the raw image information from the specified stream without fully decoding it. @@ -184,12 +183,11 @@ namespace SixLabors.ImageSharp /// /// The with set to null if suitable info detector is not found. /// - public static async Task IdentifyWithFormatAsync(Configuration configuration, Stream stream) - => await WithSeekableStreamAsync( + public static Task IdentifyWithFormatAsync(Configuration configuration, Stream stream) + => WithSeekableStreamAsync( configuration, stream, - async s => await InternalIdentityAsync(s, configuration ?? Configuration.Default)) - .ConfigureAwait(false); + s => InternalIdentityAsync(s, configuration ?? Configuration.Default)); /// /// Decode a new instance of the class from the given stream. @@ -309,7 +307,10 @@ namespace SixLabors.ImageSharp public static Task LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) { Guard.NotNull(decoder, nameof(decoder)); - return WithSeekableStreamAsync(configuration, stream, s => decoder.DecodeAsync(configuration, s)); + return WithSeekableStreamAsync( + configuration, + stream, + s => decoder.DecodeAsync(configuration, s)); } /// @@ -425,13 +426,12 @@ namespace SixLabors.ImageSharp /// Image contains invalid content. /// The pixel format. /// A new .> - public static async Task> LoadAsync(Stream stream, IImageDecoder decoder) + public static Task> LoadAsync(Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel - => await WithSeekableStreamAsync( + => WithSeekableStreamAsync( Configuration.Default, stream, - async s => await decoder.DecodeAsync(Configuration.Default, s).ConfigureAwait(false)) - .ConfigureAwait(false); + s => decoder.DecodeAsync(Configuration.Default, s)); /// /// Create a new instance of the class from the given stream. @@ -463,13 +463,12 @@ namespace SixLabors.ImageSharp /// Image contains invalid content. /// The pixel format. /// A new .> - public static async Task> LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) + public static Task> LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel - => await WithSeekableStreamAsync( + => WithSeekableStreamAsync( configuration, stream, - async s => await decoder.DecodeAsync(configuration, s).ConfigureAwait(false)) - .ConfigureAwait(false); + s => decoder.DecodeAsync(configuration, s)); /// /// Create a new instance of the class from the given stream. @@ -577,8 +576,8 @@ namespace SixLabors.ImageSharp await WithSeekableStreamAsync( configuration, stream, - async s => await DecodeAsync(s, configuration).ConfigureAwait(false)) - .ConfigureAwait(false); + async s => await DecodeAsync(s, configuration) + .ConfigureAwait(false)); if (data.img != null) { From b8232e4c0386514aba89eb293794f26545233b4e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 17 May 2020 23:49:13 +0100 Subject: [PATCH 080/130] Update Image.FromStream.cs --- src/ImageSharp/Image.FromStream.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index afd0f0e59..3676823dc 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -576,8 +576,8 @@ namespace SixLabors.ImageSharp await WithSeekableStreamAsync( configuration, stream, - async s => await DecodeAsync(s, configuration) - .ConfigureAwait(false)); + s => DecodeAsync(s, configuration)) + .ConfigureAwait(false); if (data.img != null) { From f8809f5d4d4d6ce8b91478398f838424f132b7a1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 18 May 2020 16:20:43 +0100 Subject: [PATCH 081/130] Update Adler32.cs --- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 217 +++++++++------------ 1 file changed, 95 insertions(+), 122 deletions(-) diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index bd354a508..dc8b7ad0d 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -3,12 +3,12 @@ using System; using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; #if SUPPORTS_RUNTIME_INTRINSICS using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; #endif +#pragma warning disable IDE0007 // Use implicit type namespace SixLabors.ImageSharp.Formats.Png.Zlib { /// @@ -22,16 +22,22 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// public const uint SeedValue = 1U; -#if SUPPORTS_RUNTIME_INTRINSICS - private const int MinBufferSize = 64; -#endif - // Largest prime smaller than 65536 private const uint BASE = 65521; // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 private const uint NMAX = 5552; +#if SUPPORTS_RUNTIME_INTRINSICS + private const int MinBufferSize = 64; + + private static ReadOnlySpan Tap1Tap2 => new byte[] + { + 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, // tap1 + 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 // tap2 + }; +#endif + /// /// Calculates the Adler32 checksum with the bytes taken from the span. /// @@ -83,14 +89,15 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib length -= blocks * BLOCK_SIZE; int index = 0; - fixed (byte* bufferPtr = &buffer[0]) + fixed (byte* bufferPtr = buffer) + fixed (byte* tapPtr = Tap1Tap2) { index += (int)blocks * BLOCK_SIZE; var localBufferPtr = bufferPtr; // _mm_setr_epi8 on x86 - var tap1 = Vector128.Create(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17); - var tap2 = Vector128.Create(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1); + Vector128 tap1 = Sse2.LoadVector128((sbyte*)tapPtr); + Vector128 tap2 = Sse2.LoadVector128((sbyte*)(tapPtr + 0x10)); Vector128 zero = Vector128.Zero; var ones = Vector128.Create((short)1); @@ -106,28 +113,28 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib // Process n blocks of data. At most NMAX data bytes can be // processed before s2 must be reduced modulo BASE. - Vector128 v_ps = Vector128.CreateScalar(s1 * n).AsInt32(); - Vector128 v_s2 = Vector128.CreateScalar(s2).AsInt32(); - Vector128 v_s1 = Vector128.Zero; + Vector128 v_ps = Vector128.CreateScalar(s1 * n); + Vector128 v_s2 = Vector128.CreateScalar(s2); + Vector128 v_s1 = Vector128.Zero; do { // Load 32 input bytes. Vector128 bytes1 = Sse3.LoadDquVector128(localBufferPtr); - Vector128 bytes2 = Sse3.LoadDquVector128(localBufferPtr + 16); + Vector128 bytes2 = Sse3.LoadDquVector128(localBufferPtr + 0x10); // Add previous block byte sum to v_ps. v_ps = Sse2.Add(v_ps, v_s1); // Horizontally add the bytes for s1, multiply-adds the // bytes by [ 32, 31, 30, ... ] for s2. - v_s1 = Sse2.Add(v_s1, Sse2.SumAbsoluteDifferences(bytes1, zero).AsInt32()); + v_s1 = Sse2.Add(v_s1, Sse2.SumAbsoluteDifferences(bytes1, zero).AsUInt32()); Vector128 mad1 = Ssse3.MultiplyAddAdjacent(bytes1, tap1); - v_s2 = Sse2.Add(v_s2, Sse2.MultiplyAddAdjacent(mad1, ones)); + v_s2 = Sse2.Add(v_s2, Sse2.MultiplyAddAdjacent(mad1, ones).AsUInt32()); - v_s1 = Sse2.Add(v_s1, Sse2.SumAbsoluteDifferences(bytes2, zero).AsInt32()); + v_s1 = Sse2.Add(v_s1, Sse2.SumAbsoluteDifferences(bytes2, zero).AsUInt32()); Vector128 mad2 = Ssse3.MultiplyAddAdjacent(bytes2, tap2); - v_s2 = Sse2.Add(v_s2, Sse2.MultiplyAddAdjacent(mad2, ones)); + v_s2 = Sse2.Add(v_s2, Sse2.MultiplyAddAdjacent(mad2, ones).AsUInt32()); localBufferPtr += BLOCK_SIZE; } @@ -139,148 +146,114 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib const byte S2301 = 0b1011_0001; // A B C D -> B A D C const byte S1032 = 0b0100_1110; // A B C D -> C D A B - v_s1 = Sse2.Add(v_s1, Sse2.Shuffle(v_s1, S2301)); v_s1 = Sse2.Add(v_s1, Sse2.Shuffle(v_s1, S1032)); - s1 += (uint)v_s1.ToScalar(); + s1 += v_s1.ToScalar(); v_s2 = Sse2.Add(v_s2, Sse2.Shuffle(v_s2, S2301)); v_s2 = Sse2.Add(v_s2, Sse2.Shuffle(v_s2, S1032)); - s2 = (uint)v_s2.ToScalar(); + s2 = v_s2.ToScalar(); // Reduce. s1 %= BASE; s2 %= BASE; } - } - - ref byte bufferRef = ref MemoryMarshal.GetReference(buffer); - if (length > 0) - { - if (length >= 16) + if (length > 0) { - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - length -= 16; - } + if (length >= 16) + { + s2 += s1 += localBufferPtr[0]; + s2 += s1 += localBufferPtr[1]; + s2 += s1 += localBufferPtr[2]; + s2 += s1 += localBufferPtr[3]; + s2 += s1 += localBufferPtr[4]; + s2 += s1 += localBufferPtr[5]; + s2 += s1 += localBufferPtr[6]; + s2 += s1 += localBufferPtr[7]; + s2 += s1 += localBufferPtr[8]; + s2 += s1 += localBufferPtr[9]; + s2 += s1 += localBufferPtr[10]; + s2 += s1 += localBufferPtr[11]; + s2 += s1 += localBufferPtr[12]; + s2 += s1 += localBufferPtr[13]; + s2 += s1 += localBufferPtr[14]; + s2 += s1 += localBufferPtr[15]; + + localBufferPtr += 16; + length -= 16; + } - while (length-- > 0) - { - s2 += s1 += Unsafe.Add(ref bufferRef, index++); - } + while (length-- > 0) + { + s2 += s1 += *localBufferPtr++; + } - if (s1 >= BASE) - { - s1 -= BASE; + if (s1 >= BASE) + { + s1 -= BASE; + } + + s2 %= BASE; } - s2 %= BASE; + return s1 | (s2 << 16); } - - return s1 | (s2 << 16); } #endif [MethodImpl(InliningOptions.HotPath | InliningOptions.ShortMethod)] - private static uint CalculateScalar(uint adler, ReadOnlySpan buffer) + private static unsafe uint CalculateScalar(uint adler, ReadOnlySpan buffer) { uint s1 = adler & 0xFFFF; uint s2 = (adler >> 16) & 0xFFFF; uint k; - ref byte bufferRef = ref MemoryMarshal.GetReference(buffer); - uint length = (uint)buffer.Length; - int index = 0; - - while (length > 0) + fixed (byte* bufferPtr = buffer) { - k = length < NMAX ? length : NMAX; - length -= k; + var localBufferPtr = bufferPtr; + uint length = (uint)buffer.Length; - while (k >= 16) + while (length > 0) { - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; - k -= 16; - } + k = length < NMAX ? length : NMAX; + length -= k; - if (k != 0) - { - do + while (k >= 16) + { + s2 += s1 += localBufferPtr[0]; + s2 += s1 += localBufferPtr[1]; + s2 += s1 += localBufferPtr[2]; + s2 += s1 += localBufferPtr[3]; + s2 += s1 += localBufferPtr[4]; + s2 += s1 += localBufferPtr[5]; + s2 += s1 += localBufferPtr[6]; + s2 += s1 += localBufferPtr[7]; + s2 += s1 += localBufferPtr[8]; + s2 += s1 += localBufferPtr[9]; + s2 += s1 += localBufferPtr[10]; + s2 += s1 += localBufferPtr[11]; + s2 += s1 += localBufferPtr[12]; + s2 += s1 += localBufferPtr[13]; + s2 += s1 += localBufferPtr[14]; + s2 += s1 += localBufferPtr[15]; + + localBufferPtr += 16; + k -= 16; + } + + while (k-- > 0) { - s1 += Unsafe.Add(ref bufferRef, index++); - s2 += s1; + s2 += s1 += *localBufferPtr++; } - while (--k != 0); + + s1 %= BASE; + s2 %= BASE; } - s1 %= BASE; - s2 %= BASE; + return (s2 << 16) | s1; } - - return (s2 << 16) | s1; } } } From 179dc94186e879ffc9c9d3fd1da3ae7fd442496d Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 18 May 2020 16:51:09 +0100 Subject: [PATCH 082/130] Update Crc32 based on feedback --- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 1 + src/ImageSharp/Formats/Png/Zlib/Crc32.cs | 36 +++++++----- .../General/Adler32Benchmark.cs | 56 +++++++++---------- .../General/Crc32Benchmark.cs | 56 +++++++++---------- 4 files changed, 78 insertions(+), 71 deletions(-) diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index dc8b7ad0d..3d41c6b82 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -31,6 +31,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib #if SUPPORTS_RUNTIME_INTRINSICS private const int MinBufferSize = 64; + // The C# compiler emits this as a compile-time constant embedded in the PE file. private static ReadOnlySpan Tap1Tap2 => new byte[] { 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, // tap1 diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs index ad047a41d..b25c042e1 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs @@ -12,8 +12,8 @@ using System.Runtime.Intrinsics.X86; namespace SixLabors.ImageSharp.Formats.Png.Zlib { /// - /// Calculates the 32 bit Cyclic Redundancy Check (CRC) checksum of a given buffer according to the - /// IEEE 802.3 specification. + /// Calculates the 32 bit Cyclic Redundancy Check (CRC) checksum of a given buffer + /// according to the IEEE 802.3 specification. /// internal static partial class Crc32 { @@ -28,10 +28,13 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib // Definitions of the bit-reflected domain constants k1, k2, k3, etc and // the CRC32+Barrett polynomials given at the end of the paper. - private static ulong[] k1k2 = { 0x0154442bd4, 0x01c6e41596 }; - private static ulong[] k3k4 = { 0x01751997d0, 0x00ccaa009e }; - private static ulong[] k5k0 = { 0x0163cd6124, 0x0000000000 }; - private static ulong[] poly = { 0x01db710641, 0x01f7011641 }; + private static readonly ulong[] K05Poly = + { + 0x0154442bd4, 0x01c6e41596, // k1, k2 + 0x01751997d0, 0x00ccaa009e, // k3, k4 + 0x0163cd6124, 0x0000000000, // k5, k0 + 0x01db710641, 0x01f7011641 // polynomial + }; #endif /// @@ -79,13 +82,11 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib int chunksize = buffer.Length & ~ChunksizeMask; int length = chunksize; - fixed (byte* bufferPtr = &buffer[0]) - fixed (ulong* k1k2Ptr = &k1k2[0]) - fixed (ulong* k3k4Ptr = &k3k4[0]) - fixed (ulong* k5k0Ptr = &k5k0[0]) - fixed (ulong* polyPtr = &poly[0]) + fixed (byte* bufferPtr = buffer) + fixed (ulong* k05PolyPtr = K05Poly) { byte* localBufferPtr = bufferPtr; + ulong* localK05PolyPtr = k05PolyPtr; // There's at least one block of 64. Vector128 x1 = Sse2.LoadVector128((ulong*)(localBufferPtr + 0x00)); @@ -95,7 +96,9 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib Vector128 x5; x1 = Sse2.Xor(x1, Sse2.ConvertScalarToVector128UInt32(crc).AsUInt64()); - Vector128 x0 = Sse2.LoadVector128(k1k2Ptr); + + // k1, k2 + Vector128 x0 = Sse2.LoadVector128(localK05PolyPtr + 0x0); localBufferPtr += 64; length -= 64; @@ -133,7 +136,8 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib } // Fold into 128-bits. - x0 = Sse2.LoadVector128(k3k4Ptr); + // k3, k4 + x0 = Sse2.LoadVector128(k05PolyPtr + 0x2); x5 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x00); x1 = Pclmulqdq.CarrylessMultiply(x1, x0, 0x11); @@ -170,7 +174,8 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib x1 = Sse2.ShiftRightLogical128BitLane(x1, 8); x1 = Sse2.Xor(x1, x2); - x0 = Sse2.LoadScalarVector128(k5k0Ptr); + // k5, k0 + x0 = Sse2.LoadScalarVector128(localK05PolyPtr + 0x4); x2 = Sse2.ShiftRightLogical128BitLane(x1, 4); x1 = Sse2.And(x1, x3); @@ -178,7 +183,8 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib x1 = Sse2.Xor(x1, x2); // Barret reduce to 32-bits. - x0 = Sse2.LoadVector128(polyPtr); + // polynomial + x0 = Sse2.LoadVector128(localK05PolyPtr + 0x6); x2 = Sse2.And(x1, x3); x2 = Pclmulqdq.CarrylessMultiply(x2, x0, 0x10); diff --git a/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs b/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs index 5a4a51325..37144bd94 100644 --- a/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs +++ b/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs @@ -41,32 +41,32 @@ namespace SixLabors.ImageSharp.Benchmarks.General // ########## 17/05/2020 ########## // - // | Method | Runtime | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | - // |--------------------- |-------------- |------ |------------:|-------------:|-----------:|------:|--------:|------:|------:|------:|----------:| - // | SharpZipLibCalculate | .NET 4.7.2 | 1024 | 847.94 ns | 180.284 ns | 9.882 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET 4.7.2 | 1024 | 458.80 ns | 146.235 ns | 8.016 ns | 0.54 | 0.02 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 2.1 | 1024 | 817.11 ns | 31.211 ns | 1.711 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 2.1 | 1024 | 421.48 ns | 86.149 ns | 4.722 ns | 0.52 | 0.01 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 3.1 | 1024 | 879.38 ns | 37.804 ns | 2.072 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 3.1 | 1024 | 57.27 ns | 2.008 ns | 0.110 ns | 0.07 | 0.00 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET 4.7.2 | 2048 | 1,660.62 ns | 46.912 ns | 2.571 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET 4.7.2 | 2048 | 938.41 ns | 3,137.008 ns | 171.950 ns | 0.57 | 0.10 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 2.1 | 2048 | 1,616.69 ns | 172.974 ns | 9.481 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 2.1 | 2048 | 871.52 ns | 485.678 ns | 26.622 ns | 0.54 | 0.02 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 3.1 | 2048 | 1,746.34 ns | 110.539 ns | 6.059 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 3.1 | 2048 | 96.31 ns | 24.491 ns | 1.342 ns | 0.06 | 0.00 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET 4.7.2 | 4096 | 3,102.18 ns | 484.204 ns | 26.541 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET 4.7.2 | 4096 | 1,729.49 ns | 104.446 ns | 5.725 ns | 0.56 | 0.00 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 2.1 | 4096 | 3,251.55 ns | 607.086 ns | 33.276 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 2.1 | 4096 | 1,669.22 ns | 25.194 ns | 1.381 ns | 0.51 | 0.01 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 3.1 | 4096 | 3,514.15 ns | 719.548 ns | 39.441 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 3.1 | 4096 | 180.12 ns | 55.425 ns | 3.038 ns | 0.05 | 0.00 | - | - | - | - | + // | Method | Runtime | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | + // |--------------------- |-------------- |------ |------------:|------------:|----------:|------:|--------:|------:|------:|------:|----------:| + // | SharpZipLibCalculate | .NET 4.7.2 | 1024 | 793.18 ns | 775.66 ns | 42.516 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 1024 | 384.86 ns | 15.64 ns | 0.857 ns | 0.49 | 0.03 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 1024 | 790.31 ns | 353.34 ns | 19.368 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 1024 | 465.28 ns | 652.41 ns | 35.761 ns | 0.59 | 0.03 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 1024 | 877.25 ns | 97.89 ns | 5.365 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 1024 | 45.60 ns | 13.28 ns | 0.728 ns | 0.05 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 2048 | 1,537.04 ns | 428.44 ns | 23.484 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 2048 | 849.76 ns | 1,066.34 ns | 58.450 ns | 0.55 | 0.04 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 2048 | 1,616.97 ns | 276.70 ns | 15.167 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 2048 | 790.77 ns | 691.71 ns | 37.915 ns | 0.49 | 0.03 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 2048 | 1,735.11 ns | 1,374.22 ns | 75.325 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 2048 | 87.80 ns | 56.84 ns | 3.116 ns | 0.05 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 4096 | 3,054.53 ns | 796.41 ns | 43.654 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 4096 | 1,538.90 ns | 487.02 ns | 26.695 ns | 0.50 | 0.01 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 4096 | 3,223.48 ns | 32.32 ns | 1.771 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 4096 | 1,547.60 ns | 309.72 ns | 16.977 ns | 0.48 | 0.01 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 4096 | 3,672.33 ns | 1,095.81 ns | 60.065 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 4096 | 159.44 ns | 36.31 ns | 1.990 ns | 0.04 | 0.00 | - | - | - | - | } diff --git a/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs b/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs index 4bd273b30..7f85d5aad 100644 --- a/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs +++ b/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs @@ -41,32 +41,32 @@ namespace SixLabors.ImageSharp.Benchmarks.General // ########## 17/05/2020 ########## // - // | Method | Runtime | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | - // |--------------------- |-------------- |------ |-------------:|-------------:|-------------:|------:|--------:|------:|------:|------:|----------:| - // | SharpZipLibCalculate | .NET 4.7.2 | 1024 | 3,067.24 ns | 769.25 ns | 42.165 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET 4.7.2 | 1024 | 2,546.86 ns | 1,106.36 ns | 60.643 ns | 0.83 | 0.02 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 2.1 | 1024 | 3,377.15 ns | 3,903.41 ns | 213.959 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 2.1 | 1024 | 2,524.25 ns | 2,220.97 ns | 121.739 ns | 0.75 | 0.04 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 3.1 | 1024 | 3,980.60 ns | 8,497.37 ns | 465.769 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 3.1 | 1024 | 78.68 ns | 69.82 ns | 3.827 ns | 0.02 | 0.00 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET 4.7.2 | 2048 | 7,934.29 ns | 42,550.13 ns | 2,332.316 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET 4.7.2 | 2048 | 5,437.81 ns | 12,760.51 ns | 699.447 ns | 0.71 | 0.10 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 2.1 | 2048 | 6,008.05 ns | 621.37 ns | 34.059 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 2.1 | 2048 | 4,791.50 ns | 3,894.94 ns | 213.495 ns | 0.80 | 0.04 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 3.1 | 2048 | 5,900.06 ns | 1,344.70 ns | 73.707 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 3.1 | 2048 | 103.12 ns | 15.66 ns | 0.859 ns | 0.02 | 0.00 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET 4.7.2 | 4096 | 12,422.59 ns | 1,308.01 ns | 71.696 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET 4.7.2 | 4096 | 10,524.63 ns | 6,267.56 ns | 343.546 ns | 0.85 | 0.03 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 2.1 | 4096 | 11,888.00 ns | 1,059.25 ns | 58.061 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 2.1 | 4096 | 9,806.24 ns | 241.91 ns | 13.260 ns | 0.82 | 0.00 | - | - | - | - | - // | | | | | | | | | | | | | - // | SharpZipLibCalculate | .NET Core 3.1 | 4096 | 12,181.28 ns | 1,974.68 ns | 108.239 ns | 1.00 | 0.00 | - | - | - | - | - // | SixLaborsCalculate | .NET Core 3.1 | 4096 | 192.39 ns | 10.27 ns | 0.563 ns | 0.02 | 0.00 | - | - | - | - | + // | Method | Runtime | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | + // |--------------------- |-------------- |------ |-------------:|-------------:|-----------:|------:|--------:|------:|------:|------:|----------:| + // | SharpZipLibCalculate | .NET 4.7.2 | 1024 | 2,797.77 ns | 278.697 ns | 15.276 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 1024 | 2,275.56 ns | 216.100 ns | 11.845 ns | 0.81 | 0.01 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 1024 | 2,923.43 ns | 2,656.882 ns | 145.633 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 1024 | 2,257.79 ns | 75.081 ns | 4.115 ns | 0.77 | 0.04 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 1024 | 2,764.14 ns | 86.281 ns | 4.729 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 1024 | 49.32 ns | 1.813 ns | 0.099 ns | 0.02 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 2048 | 5,603.71 ns | 427.240 ns | 23.418 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 2048 | 4,525.02 ns | 33.931 ns | 1.860 ns | 0.81 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 2048 | 5,563.32 ns | 49.337 ns | 2.704 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 2048 | 4,519.61 ns | 29.837 ns | 1.635 ns | 0.81 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 2048 | 5,543.37 ns | 518.551 ns | 28.424 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 2048 | 89.07 ns | 3.312 ns | 0.182 ns | 0.02 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET 4.7.2 | 4096 | 11,396.95 ns | 373.450 ns | 20.470 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET 4.7.2 | 4096 | 9,070.35 ns | 271.083 ns | 14.859 ns | 0.80 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 2.1 | 4096 | 11,127.81 ns | 239.177 ns | 13.110 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 2.1 | 4096 | 9,050.46 ns | 230.916 ns | 12.657 ns | 0.81 | 0.00 | - | - | - | - | + // | | | | | | | | | | | | | + // | SharpZipLibCalculate | .NET Core 3.1 | 4096 | 11,098.62 ns | 687.978 ns | 37.710 ns | 1.00 | 0.00 | - | - | - | - | + // | SixLaborsCalculate | .NET Core 3.1 | 4096 | 168.11 ns | 3.633 ns | 0.199 ns | 0.02 | 0.00 | - | - | - | - | } From f6f6b51550f5fc8695e19fee39f96d0789314b06 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 18 May 2020 17:25:17 +0100 Subject: [PATCH 083/130] Better checksum tests --- .../Formats/Png/Adler32Tests.cs | 41 +++++++++++++++ .../Formats/Png/Crc32Tests.cs | 41 +++++++++++++++ .../Formats/Png/PngDecoderTests.Chunks.cs | 51 ------------------- .../ImageSharp.Tests/ImageSharp.Tests.csproj | 1 + 4 files changed, 83 insertions(+), 51 deletions(-) create mode 100644 tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs create mode 100644 tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs diff --git a/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs b/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs new file mode 100644 index 000000000..a0d4030c3 --- /dev/null +++ b/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs @@ -0,0 +1,41 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using SixLabors.ImageSharp.Formats.Png.Zlib; +using Xunit; +using SharpAdler32 = ICSharpCode.SharpZipLib.Checksum.Adler32; + +namespace SixLabors.ImageSharp.Tests.Formats.Png +{ + public class Adler32Tests + { + [Theory] + [InlineData(0)] + [InlineData(8)] + [InlineData(215)] + [InlineData(1024)] + [InlineData(1024 + 15)] + [InlineData(2034)] + [InlineData(4096)] + public void MatchesReference(int length) + { + var data = GetBuffer(length); + var adler = new SharpAdler32(); + adler.Update(data); + + long expected = adler.Value; + long actual = Adler32.Calculate(data); + + Assert.Equal(expected, actual); + } + + private static byte[] GetBuffer(int length) + { + var data = new byte[length]; + new Random(1).NextBytes(data); + + return data; + } + } +} diff --git a/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs b/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs new file mode 100644 index 000000000..b40e210e3 --- /dev/null +++ b/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs @@ -0,0 +1,41 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the GNU Affero General Public License, Version 3. + +using System; +using SixLabors.ImageSharp.Formats.Png.Zlib; +using Xunit; +using SharpCrc32 = ICSharpCode.SharpZipLib.Checksum.Crc32; + +namespace SixLabors.ImageSharp.Tests.Formats.Png +{ + public class Crc32Tests + { + [Theory] + [InlineData(0)] + [InlineData(8)] + [InlineData(215)] + [InlineData(1024)] + [InlineData(1024 + 15)] + [InlineData(2034)] + [InlineData(4096)] + public void MatchesReference(int length) + { + var data = GetBuffer(length); + var crc = new SharpCrc32(); + crc.Update(data); + + long expected = crc.Value; + long actual = Crc32.Calculate(data); + + Assert.Equal(expected, actual); + } + + private static byte[] GetBuffer(int length) + { + var data = new byte[length]; + new Random(1).NextBytes(data); + + return data; + } + } +} diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs index 1a9dedc54..52393a7f1 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs @@ -83,57 +83,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png } } - [Fact] - public void CalculateCrc_Works_LongerRun() - { - // Longer run, enough to require moving the point in SIMD implementation with - // offset for dropping back to scalar. - var data = new byte[] - { - 0, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215 - }; - - // assert - uint crc = Crc32.Calculate(data); - Assert.Equal(0xC1125402, crc); - } - - [Fact] - public void CalculateCrc_Works() - { - // Short run, less than 64. - var data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }; - uint crc = Crc32.Calculate(data); - - Assert.Equal(0x88AA689F, crc); - } - private static string GetChunkTypeName(uint value) { var data = new byte[4]; diff --git a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj index fdb280ca9..98f8e9574 100644 --- a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj +++ b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj @@ -21,6 +21,7 @@ + From 8a5072b3175ba00082886dff11311f45a56b426c Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 19 May 2020 00:48:08 +0100 Subject: [PATCH 084/130] Return input value on empty --- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 2 +- src/ImageSharp/Formats/Png/Zlib/Crc32.cs | 2 +- tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs | 9 +++++++++ tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs | 9 +++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index 3d41c6b82..d348e7df1 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -59,7 +59,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib { if (buffer.IsEmpty) { - return SeedValue; + return adler; } #if SUPPORTS_RUNTIME_INTRINSICS diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs index b25c042e1..5b29e3590 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs @@ -57,7 +57,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib { if (buffer.IsEmpty) { - return SeedValue; + return crc; } #if SUPPORTS_RUNTIME_INTRINSICS diff --git a/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs b/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs index a0d4030c3..9c5f0f6a9 100644 --- a/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs @@ -10,6 +10,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { public class Adler32Tests { + [Theory] + [InlineData(0)] + [InlineData(1)] + [InlineData(2)] + public void ReturnsCorrectWhenEmpty(uint input) + { + Assert.Equal(input, Adler32.Calculate(input, default)); + } + [Theory] [InlineData(0)] [InlineData(8)] diff --git a/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs b/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs index b40e210e3..56743c3ae 100644 --- a/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs @@ -10,6 +10,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { public class Crc32Tests { + [Theory] + [InlineData(0)] + [InlineData(1)] + [InlineData(2)] + public void ReturnsCorrectWhenEmpty(uint input) + { + Assert.Equal(input, Crc32.Calculate(input, default)); + } + [Theory] [InlineData(0)] [InlineData(8)] From 1213b8b00a799f2ab27a6069522f16d5ea84de67 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 27 May 2020 14:21:58 +0200 Subject: [PATCH 085/130] DetectFormat for tga now additionally checks: - If all color map spec bytes are zero when color map type is zero - Width and height are not zero --- .../Formats/Tga/TgaImageFormatDetector.cs | 31 +++++++++++-- .../Formats/Tga/TgaFileHeaderTests.cs | 44 ++++++++++++++----- 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs b/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs index 300172f6c..9074b3756 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs @@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.Formats.Tga public sealed class TgaImageFormatDetector : IImageFormatDetector { /// - public int HeaderSize => TgaConstants.FileHeaderLength; + public int HeaderSize => 16; /// public IImageFormat DetectFormat(ReadOnlySpan header) @@ -23,15 +23,38 @@ namespace SixLabors.ImageSharp.Formats.Tga { if (header.Length >= this.HeaderSize) { - // There are no magic bytes in a tga file, so at least the image type - // and the colormap type in the header will be checked for a valid value. + // There are no magic bytes in the first few bytes of a tga file, + // so we try to figure out if its a valid tga by checking for valid tga header bytes. + + // The color map type should be either 0 or 1, other values are not valid. if (header[1] != 0 && header[1] != 1) { return false; } + // The third byte is the image type. var imageType = (TgaImageType)header[2]; - return imageType.IsValid(); + if (!imageType.IsValid()) + { + return false; + } + + // If the color map typ is zero, all bytes of the color map specification should also be zeros. + if (header[1] == 0) + { + if (header[3] != 0 || header[4] != 0 || header[5] != 0 || header[6] != 0 || header[7] != 0) + { + return false; + } + } + + // The height or the width of the image should not be zero. + if ((header[12] == 0 && header[13] == 0) || (header[14] == 0 && header[15] == 0)) + { + return false; + } + + return true; } return false; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs index 2b0b088a1..a305e58b7 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs @@ -1,34 +1,54 @@ // Copyright (c) Six Labors and contributors. // Licensed under the GNU Affero General Public License, Version 3. +using System.Collections.Generic; using System.IO; using SixLabors.ImageSharp.Formats; - +using SixLabors.ImageSharp.Formats.Tga; using Xunit; namespace SixLabors.ImageSharp.Tests.Formats.Tga { public class TgaFileHeaderTests { - private static readonly byte[] Data = + [Theory] + [InlineData(new byte[] { 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // invalid tga image type. + [InlineData(new byte[] { 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // invalid colormap type. + [InlineData(new byte[] { 0, 0, 1, 5, 5, 5, 5, 5, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // valid colormap type (0), but colomap spec bytes should all be zero. + [InlineData(new byte[] { 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // valid colormap type (0), but colomap spec bytes should all be zero. + [InlineData(new byte[] { 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // valid colormap type (0), but colomap spec bytes should all be zero. + [InlineData(new byte[] { 0, 0, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // valid colormap type (0), but colomap spec bytes should all be zero. + [InlineData(new byte[] { 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 })] // valid colormap type (0), but colomap spec bytes should all be zero. + [InlineData(new byte[] { 0, 0, 0, 12, 106, 80, 32, 32, 13, 10, 135, 10, 0, 0, 0, 20, 102, 116 })] // jp2 image header + [InlineData(new byte[] { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 32, 8 })] // invalid width + [InlineData(new byte[] { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 32, 8 })] // invalid height + public void ImageLoad_WithNoValidTgaHeaderBytes_Throws_UnknownImageFormatException(byte[] data) { - 0, - 0, - 15 // invalid tga image type - }; - - private MemoryStream Stream { get; } = new MemoryStream(Data); + using var stream = new MemoryStream(data); - [Fact] - public void ImageLoad_WithInvalidImageType_Throws_UnknownImageFormatException() - { Assert.Throws(() => { - using (Image.Load(Configuration.Default, this.Stream, out IImageFormat _)) + using (Image.Load(Configuration.Default, stream, out IImageFormat _)) { } }); } + + [Theory] + [InlineData(new byte[] { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 195, 0, 32, 8 }, 250, 195, TgaBitsPerPixel.Pixel32)] + [InlineData(new byte[] { 26, 1, 9, 0, 0, 0, 1, 16, 0, 0, 0, 0, 128, 0, 128, 0, 8, 0 }, 128, 128, TgaBitsPerPixel.Pixel8)] + [InlineData(new byte[] { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 16, 0 }, 220, 220, TgaBitsPerPixel.Pixel16)] + [InlineData(new byte[] { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 124, 0, 24, 32 }, 124, 124, TgaBitsPerPixel.Pixel24)] + public void Identify_WithValidData_Works(byte[] data, int width, int height, TgaBitsPerPixel bitsPerPixel) + { + using var stream = new MemoryStream(data); + + IImageInfo info = Image.Identify(stream); + TgaMetadata tgaData = info.Metadata.GetTgaMetadata(); + Assert.Equal(bitsPerPixel, tgaData.BitsPerPixel); + Assert.Equal(width, info.Width); + Assert.Equal(height, info.Height); + } } } From 8580772161386a10e0bf84fdfb52b7f137d7fc10 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 5 Jun 2020 17:16:48 +0100 Subject: [PATCH 086/130] Swap buffers. Fix #1211 --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 4 ++ .../Formats/Png/PngEncoderTests.cs | 47 +++++++++++-------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index a25f51fe1..5f7dd212f 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -1081,6 +1081,10 @@ namespace SixLabors.ImageSharp.Formats.Png // encode data IManagedByteBuffer r = this.EncodeAdam7IndexedPixelRow(destSpan); deflateStream.Write(r.Array, 0, resultLength); + + IManagedByteBuffer temp = this.currentScanline; + this.currentScanline = this.previousScanline; + this.previousScanline = temp; } } } diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 4f2490f9a..04f2ba7e0 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -199,17 +199,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png return; } - foreach (PngInterlaceMode interlaceMode in InterlaceMode) + foreach (var filterMethod in PngFilterMethods) { - TestPngEncoderCore( - provider, - pngColorType, - PngFilterMethod.Adaptive, - pngBitDepth, - interlaceMode, - appendPngColorType: true, - appendPixelType: true, - appendPngBitDepth: true); + foreach (PngInterlaceMode interlaceMode in InterlaceMode) + { + TestPngEncoderCore( + provider, + pngColorType, + (PngFilterMethod)filterMethod[0], + pngBitDepth, + interlaceMode, + appendPngColorType: true, + appendPixelType: true, + appendPngBitDepth: true); + } } } @@ -232,18 +235,22 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png public void WorksWithAllBitDepthsAndExcludeAllFilter(TestImageProvider provider, PngColorType pngColorType, PngBitDepth pngBitDepth) where TPixel : unmanaged, IPixel { - foreach (PngInterlaceMode interlaceMode in InterlaceMode) + foreach (var filterMethod in PngFilterMethods) { - TestPngEncoderCore( - provider, pngColorType, - PngFilterMethod.Adaptive, - pngBitDepth, - interlaceMode, - appendPngColorType: true, - appendPixelType: true, - appendPngBitDepth: true, - optimizeMethod: PngChunkFilter.ExcludeAll); + foreach (PngInterlaceMode interlaceMode in InterlaceMode) + { + TestPngEncoderCore( + provider, + pngColorType, + (PngFilterMethod)filterMethod[0], + pngBitDepth, + interlaceMode, + appendPngColorType: true, + appendPixelType: true, + appendPngBitDepth: true, + optimizeMethod: PngChunkFilter.ExcludeAll); + } } } From 8b69138b0d6ea5096fb9b9a348600be3d96dda54 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 5 Jun 2020 17:17:29 +0100 Subject: [PATCH 087/130] Update PngEncoderTests.cs --- tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 04f2ba7e0..93ea73eb4 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -237,7 +237,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png { foreach (var filterMethod in PngFilterMethods) { - pngColorType, foreach (PngInterlaceMode interlaceMode in InterlaceMode) { TestPngEncoderCore( From 44192c3a3108e5b525fd13b16cf62642260207f2 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 6 Jun 2020 13:31:38 +0100 Subject: [PATCH 088/130] Use Discussions --- .github/ISSUE_TEMPLATE/ask-question.md | 13 ------------- .github/ISSUE_TEMPLATE/bug-report.md | 4 ++-- .github/ISSUE_TEMPLATE/config.yml | 9 +++++++++ .github/ISSUE_TEMPLATE/feature-request.md | 13 ------------- README.md | 3 +-- 5 files changed, 12 insertions(+), 30 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/ask-question.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature-request.md diff --git a/.github/ISSUE_TEMPLATE/ask-question.md b/.github/ISSUE_TEMPLATE/ask-question.md deleted file mode 100644 index c8313fba9..000000000 --- a/.github/ISSUE_TEMPLATE/ask-question.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Ask question -about: Ask a question about this project. - ---- - -You should not create an issue but use Gitter instead: https://gitter.im/ImageSharp/General - -You should not create an issue but use Gitter instead: https://gitter.im/ImageSharp/General - -You should not create an issue but use Gitter instead: https://gitter.im/ImageSharp/General - -You should not create an issue but use Gitter instead: https://gitter.im/ImageSharp/General \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 58a31246a..8ee2e0e60 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,6 +1,6 @@ --- -name: Bug report -about: Create a report to help us improve +name: Bug Report +about: Create a report to help us improve the project. --- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..f27bd9d13 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,9 @@ +blank_issues_enabled: false +contact_links: + - name: Ask a Question + url: https://github.com/SixLabors/ImageSharp/discussions/new?category_id=6331980 + about: Ask a question about this project. +contact_links: + - name: Feature Request + url: https://github.com/SixLabors/ImageSharp/discussions/new?category_id=6331981 + about: Share ideas for new features for this project. diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md deleted file mode 100644 index be1e593be..000000000 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project - ---- - -You should first discuss the feature on Gitter: https://gitter.im/ImageSharp/General - -You should first discuss the feature on Gitter: https://gitter.im/ImageSharp/General - -You should first discuss the feature on Gitter: https://gitter.im/ImageSharp/General - -You should first discuss the feature on Gitter: https://gitter.im/ImageSharp/General \ No newline at end of file diff --git a/README.md b/README.md index 185d2e362..dcd2f86d7 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ SixLabors.ImageSharp [![Build Status](https://img.shields.io/github/workflow/status/SixLabors/ImageSharp/Build/master)](https://github.com/SixLabors/ImageSharp/actions) [![Code coverage](https://codecov.io/gh/SixLabors/ImageSharp/branch/master/graph/badge.svg)](https://codecov.io/gh/SixLabors/ImageSharp) [![License: AGPL v3](https://img.shields.io/badge/license-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ImageSharp/General?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=flat&logo=twitter)](https://twitter.com/intent/tweet?hashtags=imagesharp,dotnet,oss&text=ImageSharp.+A+new+cross-platform+2D+graphics+API+in+C%23&url=https%3a%2f%2fgithub.com%2fSixLabors%2fImageSharp&via=sixlabors) @@ -39,7 +38,7 @@ Please visit https://sixlabors.com/pricing for details. ## Questions -- Do you have questions? We are happy to help! Please [join our Gitter channel](https://gitter.im/ImageSharp/General), or ask them on [Stack Overflow](https://stackoverflow.com) using the `ImageSharp` tag. Please do not open issues for questions. +- Do you have questions? We are happy to help! Please [join our Discussions Forum](https://github.com/SixLabors/ImageSharp/discussions/category_choices), or ask them on [Stack Overflow](https://stackoverflow.com) using the `ImageSharp` tag. Please do not open issues for questions. - Please read our [Contribution Guide](https://github.com/SixLabors/ImageSharp/blob/master/.github/CONTRIBUTING.md) before opening issues or pull requests! ## Code of Conduct From 51a8c03d382fb217fd3681d88fc7fe38dc8fbf2e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 6 Jun 2020 13:33:19 +0100 Subject: [PATCH 089/130] Update config.yml --- .github/ISSUE_TEMPLATE/config.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index f27bd9d13..5a9d1dde0 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,9 +1,8 @@ blank_issues_enabled: false contact_links: - - name: Ask a Question - url: https://github.com/SixLabors/ImageSharp/discussions/new?category_id=6331980 - about: Ask a question about this project. -contact_links: - - name: Feature Request - url: https://github.com/SixLabors/ImageSharp/discussions/new?category_id=6331981 - about: Share ideas for new features for this project. + - name: Ask a Question + url: https://github.com/SixLabors/ImageSharp/discussions/new?category_id=6331980 + about: Ask a question about this project. + - name: Feature Request + url: https://github.com/SixLabors/ImageSharp/discussions/new?category_id=6331981 + about: Share ideas for new features for this project. From 7bed6c9017368f888c938274a455aef03fffc4e1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 6 Jun 2020 20:15:58 +0100 Subject: [PATCH 090/130] Use official Codecov action --- .github/workflows/build-and-test.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index d76d68c1a..7b45155dc 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -85,14 +85,10 @@ jobs: CI: True XUNIT_PATH: .\tests\ImageSharp.Tests # Required for xunit - # Avoid "Please provide the repository token to upload reports via `-t :repository-token`" - # https://community.codecov.io/t/whitelist-github-action-servers-to-upload-without-a-token/491/10 - # https://github.community/t5/GitHub-Actions/Make-secrets-available-to-builds-of-forks/m-p/42814/highlight/true#M5129 - name: Update Codecov - uses: iansu/codecov-action-node@v1.0.0 + uses: codecov/codecov-action@v1.0.7 if: matrix.options.codecov == true && startsWith(github.repository, 'SixLabors') with: - token: 0ef021c7-2679-4012-b42f-4bed33d99450 flags: unittests Publish: From ffe2d6995b6f128b197ba467719be315a837c866 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 7 Jun 2020 23:09:22 +0100 Subject: [PATCH 091/130] Update license --- Directory.Build.props | 3 +- LICENSE | 862 ++++-------------- README.md | 7 +- shared-infrastructure | 2 +- .../Advanced/AdvancedImageExtensions.cs | 4 +- src/ImageSharp/Advanced/AotCompilerTools.cs | 4 +- .../Advanced/IConfigurationProvider.cs | 4 +- src/ImageSharp/Advanced/IImageVisitor.cs | 4 +- src/ImageSharp/Advanced/IPixelSource.cs | 4 +- .../Advanced/IRowIntervalOperation.cs | 4 +- .../IRowIntervalOperation{TBuffer}.cs | 4 +- src/ImageSharp/Advanced/IRowOperation.cs | 4 +- .../Advanced/IRowOperation{TBuffer}.cs | 4 +- .../Advanced/ParallelExecutionSettings.cs | 4 +- .../Advanced/ParallelRowIterator.Wrappers.cs | 4 +- .../Advanced/ParallelRowIterator.cs | 4 +- src/ImageSharp/Color/Color.Conversions.cs | 4 +- src/ImageSharp/Color/Color.NamedColors.cs | 4 +- src/ImageSharp/Color/Color.WebSafePalette.cs | 4 +- src/ImageSharp/Color/Color.WernerPalette.cs | 4 +- src/ImageSharp/Color/Color.cs | 4 +- src/ImageSharp/ColorSpaces/CieLab.cs | 4 +- src/ImageSharp/ColorSpaces/CieLch.cs | 4 +- src/ImageSharp/ColorSpaces/CieLchuv.cs | 4 +- src/ImageSharp/ColorSpaces/CieLuv.cs | 4 +- src/ImageSharp/ColorSpaces/CieXyy.cs | 4 +- src/ImageSharp/ColorSpaces/CieXyz.cs | 4 +- src/ImageSharp/ColorSpaces/Cmyk.cs | 4 +- .../ColorSpaces/Companding/GammaCompanding.cs | 4 +- .../ColorSpaces/Companding/LCompanding.cs | 4 +- .../Companding/Rec2020Companding.cs | 4 +- .../Companding/Rec709Companding.cs | 4 +- .../ColorSpaces/Companding/SRgbCompanding.cs | 4 +- .../ColorSpaces/Conversion/CieConstants.cs | 4 +- .../Conversion/ColorSpaceConverter.Adapt.cs | 4 +- .../Conversion/ColorSpaceConverter.CieLab.cs | 4 +- .../Conversion/ColorSpaceConverter.CieLch.cs | 4 +- .../ColorSpaceConverter.CieLchuv.cs | 4 +- .../Conversion/ColorSpaceConverter.CieLuv.cs | 4 +- .../Conversion/ColorSpaceConverter.CieXyy.cs | 4 +- .../Conversion/ColorSpaceConverter.CieXyz.cs | 4 +- .../Conversion/ColorSpaceConverter.Cmyk.cs | 4 +- .../Conversion/ColorSpaceConverter.Hsl.cs | 4 +- .../Conversion/ColorSpaceConverter.Hsv.cs | 4 +- .../ColorSpaceConverter.HunterLab.cs | 4 +- .../ColorSpaceConverter.LinearRgb.cs | 4 +- .../Conversion/ColorSpaceConverter.Lms.cs | 4 +- .../Conversion/ColorSpaceConverter.Rgb.cs | 4 +- .../Conversion/ColorSpaceConverter.YCbCr.cs | 4 +- .../Conversion/ColorSpaceConverter.cs | 4 +- .../Conversion/ColorSpaceConverterOptions.cs | 4 +- .../CieXyChromaticityCoordinates.cs | 4 +- .../Converters/CIeLchToCieLabConverter.cs | 4 +- .../Converters/CieLabToCieLchConverter.cs | 4 +- .../Converters/CieLabToCieXyzConverter.cs | 4 +- .../Converters/CieLchuvToCieLuvConverter.cs | 4 +- .../Converters/CieLuvToCieLchuvConverter.cs | 4 +- .../Converters/CieLuvToCieXyzConverter.cs | 4 +- .../Converters/CieXyzAndCieXyyConverter.cs | 4 +- .../CieXyzAndHunterLabConverterBase.cs | 4 +- .../Converters/CieXyzAndLmsConverter.cs | 4 +- .../Converters/CieXyzToCieLabConverter.cs | 4 +- .../Converters/CieXyzToCieLuvConverter.cs | 4 +- .../Converters/CieXyzToHunterLabConverter.cs | 4 +- .../Converters/CieXyzToLinearRgbConverter.cs | 4 +- .../Converters/CmykAndRgbConverter.cs | 4 +- .../Converters/HslAndRgbConverter.cs | 4 +- .../Converters/HsvAndRgbConverter.cs | 4 +- .../Converters/HunterLabToCieXyzConverter.cs | 4 +- .../LinearRgbAndCieXyzConverterBase.cs | 4 +- .../Converters/LinearRgbToCieXyzConverter.cs | 4 +- .../Converters/LinearRgbToRgbConverter.cs | 4 +- .../Converters/RgbToLinearRgbConverter.cs | 4 +- .../Converters/YCbCrAndRgbConverter.cs | 4 +- .../Implementation/IChromaticAdaptation.cs | 4 +- .../Implementation/LmsAdaptationMatrix.cs | 4 +- .../RGBPrimariesChromaticityCoordinates.cs | 4 +- .../VonKriesChromaticAdaptation.cs | 4 +- .../WorkingSpaces/GammaWorkingSpace.cs | 4 +- .../WorkingSpaces/LWorkingSpace.cs | 4 +- .../WorkingSpaces/Rec2020WorkingSpace.cs | 4 +- .../WorkingSpaces/Rec709WorkingSpace.cs | 4 +- .../WorkingSpaces/RgbWorkingSpace.cs | 4 +- .../WorkingSpaces/SRgbWorkingSpace.cs | 4 +- src/ImageSharp/ColorSpaces/Hsl.cs | 4 +- src/ImageSharp/ColorSpaces/Hsv.cs | 4 +- src/ImageSharp/ColorSpaces/HunterLab.cs | 4 +- src/ImageSharp/ColorSpaces/Illuminants.cs | 4 +- src/ImageSharp/ColorSpaces/LinearRgb.cs | 4 +- src/ImageSharp/ColorSpaces/Lms.cs | 4 +- src/ImageSharp/ColorSpaces/Rgb.cs | 4 +- .../ColorSpaces/RgbWorkingSpaces.cs | 4 +- src/ImageSharp/ColorSpaces/YCbCr.cs | 4 +- src/ImageSharp/Common/Constants.cs | 4 +- .../Common/Exceptions/ImageFormatException.cs | 4 +- .../Exceptions/ImageProcessingException.cs | 4 +- .../InvalidImageContentException.cs | 4 +- .../Exceptions/UnknownImageFormatException.cs | 4 +- .../Common/Extensions/ComparableExtensions.cs | 4 +- .../Extensions/ConfigurationExtensions.cs | 4 +- .../Common/Extensions/EncoderExtensions.cs | 4 +- .../Common/Extensions/EnumerableExtensions.cs | 4 +- .../Common/Extensions/StreamExtensions.cs | 4 +- .../Common/Helpers/Buffer2DUtils.cs | 4 +- src/ImageSharp/Common/Helpers/DebugGuard.cs | 4 +- .../Common/Helpers/DenseMatrixUtils.cs | 4 +- src/ImageSharp/Common/Helpers/EnumUtils.cs | 4 +- src/ImageSharp/Common/Helpers/Guard.cs | 4 +- src/ImageSharp/Common/Helpers/ImageMaths.cs | 4 +- .../Common/Helpers/InliningOptions.cs | 4 +- .../Helpers/SimdUtils.Avx2Intrinsics.cs | 4 +- .../Helpers/SimdUtils.BasicIntrinsics256.cs | 4 +- .../Helpers/SimdUtils.ExtendedIntrinsics.cs | 4 +- .../SimdUtils.FallbackIntrinsics128.cs | 4 +- src/ImageSharp/Common/Helpers/SimdUtils.cs | 4 +- src/ImageSharp/Common/Helpers/TestHelpers.cs | 4 +- src/ImageSharp/Common/Helpers/TolerantMath.cs | 4 +- .../Common/Helpers/UnitConverter.cs | 4 +- .../Common/Helpers/Vector4Utilities.cs | 4 +- src/ImageSharp/Common/Tuples/Octet{T}.cs | 4 +- src/ImageSharp/Common/Tuples/Vector4Pair.cs | 4 +- src/ImageSharp/Configuration.cs | 4 +- .../Formats/Bmp/BmpArrayFileHeader.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpCompression.cs | 4 +- .../Formats/Bmp/BmpConfigurationModule.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpConstants.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpDecoder.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpEncoder.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpFileHeader.cs | 4 +- .../Formats/Bmp/BmpFileMarkerType.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpFormat.cs | 4 +- .../Formats/Bmp/BmpImageFormatDetector.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs | 4 +- .../Formats/Bmp/BmpInfoHeaderType.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpMetadata.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs | 4 +- .../Formats/Bmp/IBmpDecoderOptions.cs | 4 +- .../Formats/Bmp/IBmpEncoderOptions.cs | 4 +- src/ImageSharp/Formats/Bmp/ImageExtensions.cs | 4 +- .../Formats/Bmp/MetadataExtensions.cs | 4 +- .../Formats/Bmp/RleSkippedPixelHandling.cs | 4 +- .../Formats/Gif/GifColorTableMode.cs | 4 +- .../Formats/Gif/GifConfigurationModule.cs | 4 +- src/ImageSharp/Formats/Gif/GifConstants.cs | 4 +- src/ImageSharp/Formats/Gif/GifDecoder.cs | 4 +- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 4 +- .../Formats/Gif/GifDisposalMethod.cs | 4 +- src/ImageSharp/Formats/Gif/GifEncoder.cs | 4 +- src/ImageSharp/Formats/Gif/GifEncoderCore.cs | 4 +- src/ImageSharp/Formats/Gif/GifFormat.cs | 4 +- .../Formats/Gif/GifFrameMetadata.cs | 4 +- .../Formats/Gif/GifImageFormatDetector.cs | 4 +- src/ImageSharp/Formats/Gif/GifMetadata.cs | 4 +- src/ImageSharp/Formats/Gif/GifThrowHelper.cs | 4 +- .../Formats/Gif/IGifDecoderOptions.cs | 4 +- .../Formats/Gif/IGifEncoderOptions.cs | 4 +- src/ImageSharp/Formats/Gif/ImageExtensions.cs | 4 +- src/ImageSharp/Formats/Gif/LzwDecoder.cs | 4 +- src/ImageSharp/Formats/Gif/LzwEncoder.cs | 4 +- .../Formats/Gif/MetadataExtensions.cs | 4 +- .../Sections/GifGraphicControlExtension.cs | 4 +- .../Gif/Sections/GifImageDescriptor.cs | 4 +- .../Sections/GifLogicalScreenDescriptor.cs | 4 +- .../GifNetscapeLoopingApplicationExtension.cs | 4 +- .../Formats/Gif/Sections/IGifExtension.cs | 4 +- src/ImageSharp/Formats/IImageDecoder.cs | 4 +- src/ImageSharp/Formats/IImageEncoder.cs | 4 +- src/ImageSharp/Formats/IImageFormat.cs | 4 +- .../Formats/IImageFormatDetector.cs | 4 +- src/ImageSharp/Formats/IImageInfoDetector.cs | 4 +- src/ImageSharp/Formats/ImageFormatManager.cs | 4 +- .../Formats/Jpeg/Components/Block8x8.cs | 4 +- .../Jpeg/Components/Block8x8F.Generated.cs | 4 +- .../Jpeg/Components/Block8x8F.Generated.tt | 8 +- .../Jpeg/Components/Block8x8F.ScaledCopyTo.cs | 4 +- .../Formats/Jpeg/Components/Block8x8F.cs | 4 +- .../Jpeg/Components/Decoder/AdobeMarker.cs | 4 +- .../JpegColorConverter.FromCmyk.cs | 4 +- .../JpegColorConverter.FromGrayScale.cs | 4 +- .../JpegColorConverter.FromRgb.cs | 4 +- .../JpegColorConverter.FromYCbCrBasic.cs | 4 +- .../JpegColorConverter.FromYCbCrSimd.cs | 4 +- .../JpegColorConverter.FromYCbCrSimdAvx2.cs | 4 +- .../JpegColorConverter.FromYccK.cs | 4 +- .../ColorConverters/JpegColorConverter.cs | 4 +- .../Components/Decoder/HuffmanScanBuffer.cs | 4 +- .../Components/Decoder/HuffmanScanDecoder.cs | 4 +- .../Jpeg/Components/Decoder/HuffmanTable.cs | 4 +- .../Jpeg/Components/Decoder/IJpegComponent.cs | 4 +- .../Jpeg/Components/Decoder/IRawJpegData.cs | 4 +- .../Jpeg/Components/Decoder/JFifMarker.cs | 4 +- .../Decoder/JpegBlockPostProcessor.cs | 4 +- .../Jpeg/Components/Decoder/JpegColorSpace.cs | 4 +- .../Jpeg/Components/Decoder/JpegComponent.cs | 4 +- .../Decoder/JpegComponentPostProcessor.cs | 4 +- .../Jpeg/Components/Decoder/JpegFileMarker.cs | 4 +- .../Jpeg/Components/Decoder/JpegFrame.cs | 4 +- .../Decoder/JpegImagePostProcessor.cs | 4 +- .../Components/Decoder/ProfileResolver.cs | 4 +- .../Components/Decoder/QualityEvaluator.cs | 4 +- .../Jpeg/Components/Encoder/BlockQuad.cs | 4 +- .../Jpeg/Components/Encoder/HuffIndex.cs | 4 +- .../Jpeg/Components/Encoder/HuffmanLut.cs | 4 +- .../Jpeg/Components/Encoder/HuffmanSpec.cs | 4 +- .../Jpeg/Components/Encoder/QuantIndex.cs | 4 +- .../Components/Encoder/RgbToYCbCrTables.cs | 4 +- .../Encoder/YCbCrForwardConverter{TPixel}.cs | 4 +- .../Jpeg/Components/FastFloatingPointDCT.cs | 4 +- .../Components/GenericBlock8x8.Generated.cs | 4 +- .../Components/GenericBlock8x8.Generated.tt | 40 - .../Jpeg/Components/GenericBlock8x8.cs | 4 +- .../Formats/Jpeg/Components/RowOctet.cs | 4 +- .../Formats/Jpeg/Components/SizeExtensions.cs | 4 +- .../Formats/Jpeg/Components/ZigZag.cs | 4 +- .../Formats/Jpeg/IJpegDecoderOptions.cs | 4 +- .../Formats/Jpeg/IJpegEncoderOptions.cs | 4 +- .../Formats/Jpeg/ImageExtensions.cs | 4 +- .../Formats/Jpeg/JpegConfigurationModule.cs | 4 +- src/ImageSharp/Formats/Jpeg/JpegConstants.cs | 4 +- src/ImageSharp/Formats/Jpeg/JpegDecoder.cs | 4 +- .../Formats/Jpeg/JpegDecoderCore.cs | 4 +- src/ImageSharp/Formats/Jpeg/JpegEncoder.cs | 4 +- .../Formats/Jpeg/JpegEncoderCore.cs | 4 +- src/ImageSharp/Formats/Jpeg/JpegFormat.cs | 4 +- .../Formats/Jpeg/JpegImageFormatDetector.cs | 4 +- src/ImageSharp/Formats/Jpeg/JpegMetadata.cs | 4 +- src/ImageSharp/Formats/Jpeg/JpegSubsample.cs | 4 +- .../Formats/Jpeg/JpegThrowHelper.cs | 4 +- .../Formats/Jpeg/MetadataExtensions.cs | 4 +- src/ImageSharp/Formats/PixelTypeInfo.cs | 4 +- src/ImageSharp/Formats/Png/Adam7.cs | 4 +- .../Formats/Png/Chunks/PhysicalChunkData.cs | 4 +- .../Formats/Png/Filters/AverageFilter.cs | 4 +- .../Formats/Png/Filters/FilterType.cs | 4 +- .../Formats/Png/Filters/NoneFilter.cs | 4 +- .../Formats/Png/Filters/PaethFilter.cs | 4 +- .../Formats/Png/Filters/SubFilter.cs | 4 +- .../Formats/Png/Filters/UpFilter.cs | 4 +- .../Formats/Png/IPngDecoderOptions.cs | 4 +- .../Formats/Png/IPngEncoderOptions.cs | 4 +- src/ImageSharp/Formats/Png/ImageExtensions.cs | 4 +- .../Formats/Png/MetadataExtensions.cs | 4 +- src/ImageSharp/Formats/Png/PngBitDepth.cs | 4 +- src/ImageSharp/Formats/Png/PngChunk.cs | 4 +- src/ImageSharp/Formats/Png/PngChunkFilter.cs | 4 +- src/ImageSharp/Formats/Png/PngChunkType.cs | 4 +- src/ImageSharp/Formats/Png/PngColorType.cs | 4 +- .../Formats/Png/PngCompressionLevel.cs | 4 +- .../Formats/Png/PngConfigurationModule.cs | 4 +- src/ImageSharp/Formats/Png/PngConstants.cs | 4 +- src/ImageSharp/Formats/Png/PngDecoder.cs | 4 +- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 4 +- src/ImageSharp/Formats/Png/PngEncoder.cs | 4 +- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 4 +- .../Formats/Png/PngEncoderHelpers.cs | 4 +- .../Formats/Png/PngEncoderOptions.cs | 4 +- .../Formats/Png/PngEncoderOptionsHelpers.cs | 4 +- src/ImageSharp/Formats/Png/PngFilterMethod.cs | 4 +- src/ImageSharp/Formats/Png/PngFormat.cs | 4 +- src/ImageSharp/Formats/Png/PngHeader.cs | 4 +- .../Formats/Png/PngImageFormatDetector.cs | 4 +- .../Formats/Png/PngInterlaceMode.cs | 4 +- src/ImageSharp/Formats/Png/PngMetadata.cs | 4 +- .../Formats/Png/PngScanlineProcessor.cs | 4 +- src/ImageSharp/Formats/Png/PngTextData.cs | 4 +- src/ImageSharp/Formats/Png/PngThrowHelper.cs | 4 +- .../Formats/Png/PngTransparentColorMode.cs | 4 +- src/ImageSharp/Formats/Png/Zlib/Adler32.cs | 4 +- src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs | 4 +- src/ImageSharp/Formats/Png/Zlib/Crc32.cs | 4 +- .../Formats/Png/Zlib/DeflateThrowHelper.cs | 4 +- src/ImageSharp/Formats/Png/Zlib/Deflater.cs | 4 +- .../Formats/Png/Zlib/DeflaterConstants.cs | 4 +- .../Formats/Png/Zlib/DeflaterEngine.cs | 4 +- .../Formats/Png/Zlib/DeflaterHuffman.cs | 4 +- .../Formats/Png/Zlib/DeflaterOutputStream.cs | 4 +- .../Formats/Png/Zlib/DeflaterPendingBuffer.cs | 4 +- .../Formats/Png/Zlib/ZlibDeflateStream.cs | 4 +- .../Formats/Png/Zlib/ZlibInflateStream.cs | 4 +- .../Formats/Tga/ITgaDecoderOptions.cs | 4 +- .../Formats/Tga/ITgaEncoderOptions.cs | 4 +- src/ImageSharp/Formats/Tga/ImageExtensions.cs | 4 +- .../Formats/Tga/MetadataExtensions.cs | 4 +- src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs | 4 +- src/ImageSharp/Formats/Tga/TgaCompression.cs | 4 +- .../Formats/Tga/TgaConfigurationModule.cs | 4 +- src/ImageSharp/Formats/Tga/TgaConstants.cs | 4 +- src/ImageSharp/Formats/Tga/TgaDecoder.cs | 4 +- src/ImageSharp/Formats/Tga/TgaDecoderCore.cs | 4 +- src/ImageSharp/Formats/Tga/TgaEncoder.cs | 4 +- src/ImageSharp/Formats/Tga/TgaEncoderCore.cs | 4 +- src/ImageSharp/Formats/Tga/TgaFileHeader.cs | 4 +- src/ImageSharp/Formats/Tga/TgaFormat.cs | 4 +- .../Formats/Tga/TgaImageFormatDetector.cs | 4 +- src/ImageSharp/Formats/Tga/TgaImageOrigin.cs | 4 +- src/ImageSharp/Formats/Tga/TgaImageType.cs | 4 +- .../Formats/Tga/TgaImageTypeExtensions.cs | 4 +- src/ImageSharp/Formats/Tga/TgaMetadata.cs | 4 +- src/ImageSharp/Formats/Tga/TgaThrowHelper.cs | 4 +- src/ImageSharp/GeometryUtilities.cs | 4 +- .../GraphicOptionsDefaultsExtensions.cs | 4 +- src/ImageSharp/GraphicsOptions.cs | 4 +- src/ImageSharp/IConfigurationModule.cs | 4 +- src/ImageSharp/IDeepCloneable.cs | 4 +- src/ImageSharp/IImage.cs | 4 +- src/ImageSharp/IImageInfo.cs | 4 +- .../IO/DoubleBufferedStreamReader.cs | 4 +- src/ImageSharp/IO/IFileSystem.cs | 4 +- src/ImageSharp/IO/LocalFileSystem.cs | 4 +- src/ImageSharp/Image.Decode.cs | 4 +- src/ImageSharp/Image.FromBytes.cs | 4 +- src/ImageSharp/Image.FromFile.cs | 4 +- src/ImageSharp/Image.FromStream.cs | 4 +- src/ImageSharp/Image.LoadPixelData.cs | 4 +- src/ImageSharp/Image.WrapMemory.cs | 4 +- src/ImageSharp/Image.cs | 4 +- src/ImageSharp/ImageExtensions.Internal.cs | 4 +- src/ImageSharp/ImageExtensions.cs | 4 +- src/ImageSharp/ImageFrame.LoadPixelData.cs | 4 +- src/ImageSharp/ImageFrame.cs | 4 +- src/ImageSharp/ImageFrameCollection.cs | 4 +- .../ImageFrameCollection{TPixel}.cs | 4 +- src/ImageSharp/ImageFrame{TPixel}.cs | 4 +- src/ImageSharp/ImageInfo.cs | 4 +- src/ImageSharp/ImageInfoExtensions.cs | 4 +- src/ImageSharp/Image{TPixel}.cs | 4 +- src/ImageSharp/IndexedImageFrame{TPixel}.cs | 4 +- .../Memory/Allocators/AllocationOptions.cs | 4 +- .../ArrayPoolMemoryAllocator.Buffer{T}.cs | 4 +- ...oolMemoryAllocator.CommonFactoryMethods.cs | 4 +- .../Allocators/ArrayPoolMemoryAllocator.cs | 4 +- .../Memory/Allocators/IManagedByteBuffer.cs | 4 +- .../Allocators/Internals/BasicArrayBuffer.cs | 4 +- .../Allocators/Internals/BasicByteBuffer.cs | 4 +- .../Allocators/Internals/ManagedBufferBase.cs | 4 +- .../Memory/Allocators/MemoryAllocator.cs | 4 +- .../Allocators/SimpleGcMemoryAllocator.cs | 4 +- src/ImageSharp/Memory/Buffer2DExtensions.cs | 4 +- src/ImageSharp/Memory/Buffer2DRegion{T}.cs | 4 +- src/ImageSharp/Memory/Buffer2D{T}.cs | 4 +- .../DiscontiguousBuffers/IMemoryGroup{T}.cs | 4 +- .../MemoryGroupEnumerator{T}.cs | 4 +- .../MemoryGroupExtensions.cs | 4 +- .../MemoryGroupView{T}.cs | 4 +- .../MemoryGroup{T}.Consumed.cs | 4 +- .../MemoryGroup{T}.Owned.cs | 4 +- .../DiscontiguousBuffers/MemoryGroup{T}.cs | 4 +- .../Memory/InvalidMemoryOperationException.cs | 4 +- .../Memory/MemoryAllocatorExtensions.cs | 4 +- .../Memory/MemoryOwnerExtensions.cs | 4 +- src/ImageSharp/Memory/RowInterval.cs | 4 +- .../Memory/TransformItemsDelegate{T}.cs | 4 +- .../Memory/TransformItemsInplaceDelegate.cs | 4 +- src/ImageSharp/Metadata/FrameDecodingMode.cs | 4 +- src/ImageSharp/Metadata/ImageFrameMetadata.cs | 4 +- src/ImageSharp/Metadata/ImageMetadata.cs | 4 +- .../Metadata/PixelResolutionUnit.cs | 4 +- .../Metadata/Profiles/Exif/ExifConstants.cs | 4 +- .../Metadata/Profiles/Exif/ExifDataType.cs | 4 +- .../Metadata/Profiles/Exif/ExifDataTypes.cs | 4 +- .../Metadata/Profiles/Exif/ExifParts.cs | 4 +- .../Metadata/Profiles/Exif/ExifProfile.cs | 4 +- .../Metadata/Profiles/Exif/ExifReader.cs | 4 +- .../Exif/ExifTagDescriptionAttribute.cs | 4 +- .../Metadata/Profiles/Exif/ExifTags.cs | 4 +- .../Metadata/Profiles/Exif/ExifWriter.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.Byte.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.ByteArray.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.DoubleArray.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.Long.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.LongArray.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.Number.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.NumberArray.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.Rational.cs | 4 +- .../Exif/Tags/ExifTag.RationalArray.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.Short.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.ShortArray.cs | 4 +- .../Exif/Tags/ExifTag.SignedRational.cs | 4 +- .../Exif/Tags/ExifTag.SignedRationalArray.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.String.cs | 4 +- .../Profiles/Exif/Tags/ExifTag.Undefined.cs | 4 +- .../Metadata/Profiles/Exif/Tags/ExifTag.cs | 4 +- .../Profiles/Exif/Tags/ExifTagValue.cs | 4 +- .../Profiles/Exif/Tags/ExifTag{TValueType}.cs | 4 +- .../Profiles/Exif/Tags/UnkownExifTag.cs | 4 +- .../Exif/Values/ExifArrayValue{TValueType}.cs | 4 +- .../Metadata/Profiles/Exif/Values/ExifByte.cs | 4 +- .../Profiles/Exif/Values/ExifByteArray.cs | 4 +- .../Profiles/Exif/Values/ExifDouble.cs | 4 +- .../Profiles/Exif/Values/ExifDoubleArray.cs | 4 +- .../Profiles/Exif/Values/ExifFloat.cs | 4 +- .../Profiles/Exif/Values/ExifFloatArray.cs | 4 +- .../Metadata/Profiles/Exif/Values/ExifLong.cs | 4 +- .../Profiles/Exif/Values/ExifLongArray.cs | 4 +- .../Profiles/Exif/Values/ExifNumber.cs | 4 +- .../Profiles/Exif/Values/ExifNumberArray.cs | 4 +- .../Profiles/Exif/Values/ExifRational.cs | 4 +- .../Profiles/Exif/Values/ExifRationalArray.cs | 4 +- .../Profiles/Exif/Values/ExifShort.cs | 4 +- .../Profiles/Exif/Values/ExifShortArray.cs | 4 +- .../Profiles/Exif/Values/ExifSignedByte.cs | 4 +- .../Exif/Values/ExifSignedByteArray.cs | 4 +- .../Profiles/Exif/Values/ExifSignedLong.cs | 4 +- .../Exif/Values/ExifSignedLongArray.cs | 4 +- .../Exif/Values/ExifSignedRational.cs | 4 +- .../Exif/Values/ExifSignedRationalArray.cs | 4 +- .../Profiles/Exif/Values/ExifSignedShort.cs | 4 +- .../Exif/Values/ExifSignedShortArray.cs | 4 +- .../Profiles/Exif/Values/ExifString.cs | 4 +- .../Profiles/Exif/Values/ExifValue.cs | 4 +- .../Profiles/Exif/Values/ExifValues.cs | 4 +- .../Exif/Values/ExifValue{TValueType}.cs | 4 +- .../Profiles/Exif/Values/IExifValue.cs | 4 +- .../Exif/Values/IExifValue{TValueType}.cs | 4 +- .../Profiles/ICC/Curves/IccCurveSegment.cs | 4 +- .../ICC/Curves/IccFormulaCurveElement.cs | 4 +- .../ICC/Curves/IccOneDimensionalCurve.cs | 4 +- .../Profiles/ICC/Curves/IccParametricCurve.cs | 4 +- .../Profiles/ICC/Curves/IccResponseCurve.cs | 4 +- .../ICC/Curves/IccSampledCurveElement.cs | 4 +- .../ICC/DataReader/IccDataReader.Curves.cs | 4 +- .../ICC/DataReader/IccDataReader.Lut.cs | 4 +- .../ICC/DataReader/IccDataReader.Matrix.cs | 4 +- .../IccDataReader.MultiProcessElement.cs | 4 +- .../DataReader/IccDataReader.NonPrimitives.cs | 4 +- .../DataReader/IccDataReader.Primitives.cs | 4 +- .../DataReader/IccDataReader.TagDataEntry.cs | 4 +- .../Profiles/ICC/DataReader/IccDataReader.cs | 4 +- .../ICC/DataWriter/IccDataWriter.Curves.cs | 4 +- .../ICC/DataWriter/IccDataWriter.Lut.cs | 4 +- .../ICC/DataWriter/IccDataWriter.Matrix.cs | 4 +- .../IccDataWriter.MultiProcessElement.cs | 4 +- .../DataWriter/IccDataWriter.NonPrimitives.cs | 4 +- .../DataWriter/IccDataWriter.Primitives.cs | 4 +- .../DataWriter/IccDataWriter.TagDataEntry.cs | 4 +- .../Profiles/ICC/DataWriter/IccDataWriter.cs | 4 +- .../Profiles/ICC/Enums/IccClutDataType.cs | 4 +- .../Profiles/ICC/Enums/IccColorSpaceType.cs | 4 +- .../Profiles/ICC/Enums/IccColorantEncoding.cs | 4 +- .../ICC/Enums/IccCurveMeasurementEncodings.cs | 4 +- .../ICC/Enums/IccCurveSegmentSignature.cs | 4 +- .../Profiles/ICC/Enums/IccDataType.cs | 4 +- .../Profiles/ICC/Enums/IccDeviceAttribute.cs | 4 +- .../Profiles/ICC/Enums/IccFormulaCurveType.cs | 4 +- .../ICC/Enums/IccMeasurementGeometry.cs | 4 +- .../Enums/IccMultiProcessElementSignature.cs | 4 +- .../ICC/Enums/IccParametricCurveType.cs | 4 +- .../ICC/Enums/IccPrimaryPlatformType.cs | 4 +- .../Profiles/ICC/Enums/IccProfileClass.cs | 4 +- .../Profiles/ICC/Enums/IccProfileFlag.cs | 4 +- .../Profiles/ICC/Enums/IccProfileTag.cs | 4 +- .../Profiles/ICC/Enums/IccRenderingIntent.cs | 4 +- .../Profiles/ICC/Enums/IccScreeningFlag.cs | 4 +- .../ICC/Enums/IccScreeningSpotType.cs | 4 +- .../Profiles/ICC/Enums/IccSignatureName.cs | 4 +- .../ICC/Enums/IccStandardIlluminant.cs | 4 +- .../Profiles/ICC/Enums/IccStandardObserver.cs | 4 +- .../Profiles/ICC/Enums/IccTypeSignature.cs | 4 +- .../Exceptions/InvalidIccProfileException.cs | 4 +- .../Metadata/Profiles/ICC/IccProfile.cs | 4 +- .../Metadata/Profiles/ICC/IccProfileHeader.cs | 4 +- .../Metadata/Profiles/ICC/IccReader.cs | 4 +- .../Metadata/Profiles/ICC/IccTagDataEntry.cs | 4 +- .../Metadata/Profiles/ICC/IccWriter.cs | 4 +- .../IccBAcsProcessElement.cs | 4 +- .../IccClutProcessElement.cs | 4 +- .../IccCurveSetProcessElement.cs | 4 +- .../IccEAcsProcessElement.cs | 4 +- .../IccMatrixProcessElement.cs | 4 +- .../IccMultiProcessElement.cs | 4 +- .../IccChromaticityTagDataEntry.cs | 4 +- .../IccColorantOrderTagDataEntry.cs | 4 +- .../IccColorantTableTagDataEntry.cs | 4 +- .../TagDataEntries/IccCrdInfoTagDataEntry.cs | 4 +- .../TagDataEntries/IccCurveTagDataEntry.cs | 4 +- .../ICC/TagDataEntries/IccDataTagDataEntry.cs | 4 +- .../TagDataEntries/IccDateTimeTagDataEntry.cs | 4 +- .../IccFix16ArrayTagDataEntry.cs | 4 +- .../TagDataEntries/IccLut16TagDataEntry.cs | 4 +- .../ICC/TagDataEntries/IccLut8TagDataEntry.cs | 4 +- .../TagDataEntries/IccLutAToBTagDataEntry.cs | 4 +- .../TagDataEntries/IccLutBToATagDataEntry.cs | 4 +- .../IccMeasurementTagDataEntry.cs | 4 +- .../IccMultiLocalizedUnicodeTagDataEntry.cs | 4 +- .../IccMultiProcessElementsTagDataEntry.cs | 4 +- .../IccNamedColor2TagDataEntry.cs | 4 +- .../IccParametricCurveTagDataEntry.cs | 4 +- .../IccProfileSequenceDescTagDataEntry.cs | 4 +- ...ccProfileSequenceIdentifierTagDataEntry.cs | 4 +- .../IccResponseCurveSet16TagDataEntry.cs | 4 +- .../IccScreeningTagDataEntry.cs | 4 +- .../IccSignatureTagDataEntry.cs | 4 +- .../IccTextDescriptionTagDataEntry.cs | 4 +- .../ICC/TagDataEntries/IccTextTagDataEntry.cs | 4 +- .../IccUFix16ArrayTagDataEntry.cs | 4 +- .../IccUInt16ArrayTagDataEntry.cs | 4 +- .../IccUInt32ArrayTagDataEntry.cs | 4 +- .../IccUInt64ArrayTagDataEntry.cs | 4 +- .../IccUInt8ArrayTagDataEntry.cs | 4 +- .../TagDataEntries/IccUcrBgTagDataEntry.cs | 4 +- .../TagDataEntries/IccUnknownTagDataEntry.cs | 4 +- .../IccViewingConditionsTagDataEntry.cs | 4 +- .../ICC/TagDataEntries/IccXyzTagDataEntry.cs | 4 +- .../Metadata/Profiles/ICC/Various/IccClut.cs | 4 +- .../ICC/Various/IccColorantTableEntry.cs | 4 +- .../ICC/Various/IccLocalizedString.cs | 4 +- .../Metadata/Profiles/ICC/Various/IccLut.cs | 4 +- .../Profiles/ICC/Various/IccNamedColor.cs | 4 +- .../Profiles/ICC/Various/IccPositionNumber.cs | 4 +- .../ICC/Various/IccProfileDescription.cs | 4 +- .../Profiles/ICC/Various/IccProfileId.cs | 4 +- .../Various/IccProfileSequenceIdentifier.cs | 4 +- .../Profiles/ICC/Various/IccResponseNumber.cs | 4 +- .../ICC/Various/IccScreeningChannel.cs | 4 +- .../Profiles/ICC/Various/IccTagTableEntry.cs | 4 +- .../Profiles/ICC/Various/IccVersion.cs | 4 +- .../Metadata/Profiles/IPTC/IptcProfile.cs | 4 +- .../Metadata/Profiles/IPTC/IptcTag.cs | 4 +- .../Profiles/IPTC/IptcTagExtensions.cs | 4 +- .../Metadata/Profiles/IPTC/IptcValue.cs | 4 +- src/ImageSharp/PixelFormats/HalfTypeHelper.cs | 4 +- .../PixelFormats/IPackedVector{TPacked}.cs | 4 +- src/ImageSharp/PixelFormats/IPixel.cs | 4 +- .../PixelFormats/PixelAlphaCompositionMode.cs | 4 +- .../DefaultPixelBlenders.Generated.cs | 4 +- .../DefaultPixelBlenders.Generated.tt | 8 +- .../PorterDuffFunctions.Generated.cs | 4 +- .../PorterDuffFunctions.Generated.tt | 8 +- .../PixelBlenders/PorterDuffFunctions.cs | 4 +- .../PixelFormats/PixelBlender{TPixel}.cs | 4 +- .../PixelFormats/PixelColorBlendingMode.cs | 4 +- .../PixelFormats/PixelConversionModifiers.cs | 4 +- .../PixelConversionModifiersExtensions.cs | 4 +- .../PixelFormats/PixelImplementations/A8.cs | 4 +- .../PixelImplementations/Argb32.cs | 4 +- .../PixelImplementations/Bgr24.cs | 4 +- .../PixelImplementations/Bgr565.cs | 4 +- .../PixelImplementations/Bgra32.cs | 4 +- .../PixelImplementations/Bgra4444.cs | 4 +- .../PixelImplementations/Bgra5551.cs | 4 +- .../PixelImplementations/Byte4.cs | 4 +- .../Argb32.PixelOperations.Generated.cs | 4 +- .../Bgr24.PixelOperations.Generated.cs | 4 +- .../Bgra32.PixelOperations.Generated.cs | 4 +- .../Bgra5551.PixelOperations.Generated.cs | 4 +- .../L16.PixelOperations.Generated.cs | 4 +- .../Generated/L8.PixelOperations.Generated.cs | 4 +- .../La16.PixelOperations.Generated.cs | 4 +- .../La32.PixelOperations.Generated.cs | 4 +- .../Rgb24.PixelOperations.Generated.cs | 4 +- .../Rgb48.PixelOperations.Generated.cs | 4 +- .../Rgba32.PixelOperations.Generated.cs | 4 +- .../Rgba64.PixelOperations.Generated.cs | 4 +- .../Generated/_Common.ttinclude | 4 +- .../PixelImplementations/HalfSingle.cs | 4 +- .../PixelImplementations/HalfVector2.cs | 4 +- .../PixelImplementations/HalfVector4.cs | 4 +- .../PixelFormats/PixelImplementations/L16.cs | 4 +- .../PixelFormats/PixelImplementations/L8.cs | 4 +- .../PixelFormats/PixelImplementations/La16.cs | 4 +- .../PixelFormats/PixelImplementations/La32.cs | 4 +- .../PixelImplementations/NormalizedByte2.cs | 4 +- .../PixelImplementations/NormalizedByte4.cs | 4 +- .../PixelImplementations/NormalizedShort2.cs | 4 +- .../PixelImplementations/NormalizedShort4.cs | 4 +- .../PixelFormats/PixelImplementations/Rg32.cs | 4 +- .../PixelImplementations/Rgb24.cs | 4 +- .../PixelImplementations/Rgb48.cs | 4 +- .../PixelImplementations/Rgba1010102.cs | 4 +- .../Rgba32.PixelOperations.cs | 4 +- .../PixelImplementations/Rgba32.cs | 4 +- .../PixelImplementations/Rgba64.cs | 4 +- .../RgbaVector.PixelOperations.cs | 4 +- .../PixelImplementations/RgbaVector.cs | 4 +- .../PixelImplementations/Short2.cs | 4 +- .../PixelImplementations/Short4.cs | 4 +- .../PixelOperations{TPixel}.Generated.cs | 4 +- .../PixelOperations{TPixel}.Generated.tt | 8 +- .../PixelOperations{TPixel}.PixelBenders.cs | 4 +- .../PixelFormats/PixelOperations{TPixel}.cs | 4 +- src/ImageSharp/PixelFormats/RgbaComponent.cs | 4 +- .../PixelFormats/Utils/PixelConverter.cs | 4 +- .../Utils/Vector4Converters.Default.cs | 4 +- .../Utils/Vector4Converters.RgbaCompatible.cs | 4 +- .../PixelFormats/Utils/Vector4Converters.cs | 4 +- src/ImageSharp/Primitives/ColorMatrix.cs | 4 +- src/ImageSharp/Primitives/Complex64.cs | 4 +- src/ImageSharp/Primitives/ComplexVector4.cs | 4 +- src/ImageSharp/Primitives/DenseMatrix{T}.cs | 4 +- src/ImageSharp/Primitives/LongRational.cs | 4 +- .../Primitives/Matrix3x2Extensions.cs | 4 +- src/ImageSharp/Primitives/Number.cs | 4 +- src/ImageSharp/Primitives/Point.cs | 4 +- src/ImageSharp/Primitives/PointF.cs | 4 +- src/ImageSharp/Primitives/Rational.cs | 4 +- src/ImageSharp/Primitives/Rectangle.cs | 4 +- src/ImageSharp/Primitives/RectangleF.cs | 4 +- src/ImageSharp/Primitives/SignedRational.cs | 4 +- src/ImageSharp/Primitives/Size.cs | 4 +- src/ImageSharp/Primitives/SizeF.cs | 4 +- src/ImageSharp/Primitives/ValueSize.cs | 4 +- .../Processing/AdaptiveThresholdExtensions.cs | 4 +- .../Processing/AffineTransformBuilder.cs | 4 +- .../Processing/AnchorPositionMode.cs | 4 +- .../Processing/ColorBlindnessMode.cs | 4 +- .../DefaultImageProcessorContext{TPixel}.cs | 4 +- .../Processing/EdgeDetectionOperators.cs | 4 +- .../Binarization/BinaryDitherExtensions.cs | 4 +- .../Binarization/BinaryThresholdExtensions.cs | 4 +- .../Convolution/BokehBlurExtensions.cs | 4 +- .../Convolution/BoxBlurExtensions.cs | 4 +- .../Convolution/DetectEdgesExtensions.cs | 4 +- .../Convolution/GaussianBlurExtensions.cs | 4 +- .../Convolution/GaussianSharpenExtensions.cs | 4 +- .../Extensions/Dithering/DitherExtensions.cs | 4 +- .../Extensions/Drawing/DrawImageExtensions.cs | 4 +- .../Extensions/Effects/OilPaintExtensions.cs | 4 +- .../Effects/PixelRowDelegateExtensions.cs | 4 +- .../Extensions/Effects/PixelateExtensions.cs | 4 +- .../Filters/BlackWhiteExtensions.cs | 4 +- .../Filters/BrightnessExtensions.cs | 4 +- .../Filters/ColorBlindnessExtensions.cs | 4 +- .../Extensions/Filters/ContrastExtensions.cs | 4 +- .../Extensions/Filters/FilterExtensions.cs | 4 +- .../Extensions/Filters/GrayscaleExtensions.cs | 4 +- .../Extensions/Filters/HueExtensions.cs | 4 +- .../Extensions/Filters/InvertExtensions.cs | 4 +- .../Filters/KodachromeExtensions.cs | 4 +- .../Extensions/Filters/LightnessExtensions.cs | 4 +- .../Extensions/Filters/LomographExtensions.cs | 4 +- .../Extensions/Filters/OpacityExtensions.cs | 4 +- .../Extensions/Filters/PolaroidExtensions.cs | 4 +- .../Extensions/Filters/SaturateExtensions.cs | 4 +- .../Extensions/Filters/SepiaExtensions.cs | 4 +- .../HistogramEqualizationExtensions.cs | 4 +- .../Overlays/BackgroundColorExtensions.cs | 4 +- .../Extensions/Overlays/GlowExtensions.cs | 4 +- .../Extensions/Overlays/VignetteExtensions.cs | 4 +- .../Extensions/ProcessingExtensions.cs | 4 +- .../Quantization/QuantizeExtensions.cs | 4 +- .../Transforms/AutoOrientExtensions.cs | 4 +- .../Extensions/Transforms/CropExtensions.cs | 4 +- .../Transforms/EntropyCropExtensions.cs | 4 +- .../Extensions/Transforms/FlipExtensions.cs | 4 +- .../Extensions/Transforms/PadExtensions.cs | 4 +- .../Extensions/Transforms/ResizeExtensions.cs | 4 +- .../Extensions/Transforms/RotateExtensions.cs | 4 +- .../Transforms/RotateFlipExtensions.cs | 4 +- .../Extensions/Transforms/SkewExtensions.cs | 4 +- .../Transforms/TransformExtensions.cs | 4 +- src/ImageSharp/Processing/FlipMode.cs | 4 +- src/ImageSharp/Processing/GrayscaleMode.cs | 4 +- .../Processing/IImageProcessingContext.cs | 4 +- .../IImageProcessingContextFactory.cs | 4 +- ...IInternalImageProcessingContext{TPixel}.cs | 4 +- src/ImageSharp/Processing/KnownDitherings.cs | 4 +- .../Processing/KnownFilterMatrices.cs | 4 +- src/ImageSharp/Processing/KnownQuantizers.cs | 4 +- src/ImageSharp/Processing/KnownResamplers.cs | 4 +- src/ImageSharp/Processing/OrientationMode.cs | 4 +- .../Processing/PixelRowOperation.cs | 4 +- .../AdaptiveThresholdProcessor.cs | 4 +- .../AdaptiveThresholdProcessor{TPixel}.cs | 4 +- .../Binarization/BinaryThresholdProcessor.cs | 4 +- .../BinaryThresholdProcessor{TPixel}.cs | 4 +- .../Processors/CloningImageProcessor.cs | 4 +- .../CloningImageProcessor{TPixel}.cs | 4 +- .../Convolution/BokehBlurProcessor.cs | 4 +- .../Convolution/BokehBlurProcessor{TPixel}.cs | 4 +- .../Convolution/BoxBlurProcessor.cs | 4 +- .../Convolution/BoxBlurProcessor{TPixel}.cs | 4 +- .../Convolution2DProcessor{TPixel}.cs | 4 +- .../Convolution2PassProcessor{TPixel}.cs | 4 +- .../ConvolutionProcessorHelpers.cs | 4 +- .../ConvolutionProcessor{TPixel}.cs | 4 +- .../EdgeDetector2DProcessor{TPixel}.cs | 4 +- .../EdgeDetectorCompassProcessor{TPixel}.cs | 4 +- .../Convolution/EdgeDetectorProcessor.cs | 4 +- .../EdgeDetectorProcessor{TPixel}.cs | 4 +- .../Convolution/GaussianBlurProcessor.cs | 4 +- .../GaussianBlurProcessor{TPixel}.cs | 4 +- .../Convolution/GaussianSharpenProcessor.cs | 4 +- .../GaussianSharpenProcessor{TPixel}.cs | 4 +- .../Convolution/KayyaliProcessor.cs | 4 +- .../Convolution/Kernels/CompassKernels.cs | 4 +- .../Convolution/Kernels/KayyaliKernels.cs | 4 +- .../Convolution/Kernels/KirschKernels.cs | 4 +- .../Kernels/LaplacianKernelFactory.cs | 4 +- .../Convolution/Kernels/LaplacianKernels.cs | 4 +- .../Convolution/Kernels/PrewittKernels.cs | 4 +- .../Kernels/RobertsCrossKernels.cs | 4 +- .../Convolution/Kernels/RobinsonKernels.cs | 4 +- .../Convolution/Kernels/ScharrKernels.cs | 4 +- .../Convolution/Kernels/SobelKernels.cs | 4 +- .../Processors/Convolution/KirschProcessor.cs | 4 +- .../Convolution/Laplacian3x3Processor.cs | 4 +- .../Convolution/Laplacian5x5Processor.cs | 4 +- .../LaplacianOfGaussianProcessor.cs | 4 +- .../Parameters/BokehBlurKernelData.cs | 4 +- .../Parameters/BokehBlurKernelDataProvider.cs | 4 +- .../Parameters/BokehBlurParameters.cs | 4 +- .../Convolution/PrewittProcessor.cs | 4 +- .../Convolution/RobertsCrossProcessor.cs | 4 +- .../Convolution/RobinsonProcessor.cs | 4 +- .../Processors/Convolution/ScharrProcessor.cs | 4 +- .../Processors/Convolution/SobelProcessor.cs | 4 +- .../Dithering/ErroDither.KnownTypes.cs | 4 +- .../Processors/Dithering/ErrorDither.cs | 4 +- .../Processors/Dithering/IDither.cs | 4 +- .../IPaletteDitherImageProcessor{TPixel}.cs | 4 +- .../Dithering/OrderedDither.KnownTypes.cs | 4 +- .../Processors/Dithering/OrderedDither.cs | 4 +- .../Dithering/OrderedDitherFactory.cs | 4 +- .../Dithering/PaletteDitherProcessor.cs | 4 +- .../PaletteDitherProcessor{TPixel}.cs | 4 +- .../Processors/Drawing/DrawImageProcessor.cs | 4 +- .../DrawImageProcessor{TPixelBg,TPixelFg}.cs | 4 +- .../Processors/Effects/IPixelRowDelegate.cs | 4 +- .../Effects/OilPaintingProcessor.cs | 4 +- .../Effects/OilPaintingProcessor{TPixel}.cs | 4 +- .../Effects/PixelRowDelegateProcessor.cs | 4 +- ...lRowDelegateProcessor{TPixel,TDelegate}.cs | 4 +- .../Processors/Effects/PixelateProcessor.cs | 4 +- .../Effects/PixelateProcessor{TPixel}.cs | 4 +- .../PositionAwarePixelRowDelegateProcessor.cs | 4 +- .../Filters/AchromatomalyProcessor.cs | 4 +- .../Filters/AchromatopsiaProcessor.cs | 4 +- .../Processors/Filters/BlackWhiteProcessor.cs | 4 +- .../Processors/Filters/BrightnessProcessor.cs | 4 +- .../Processors/Filters/ContrastProcessor.cs | 4 +- .../Filters/DeuteranomalyProcessor.cs | 4 +- .../Filters/DeuteranopiaProcessor.cs | 4 +- .../Processors/Filters/FilterProcessor.cs | 4 +- .../Filters/FilterProcessor{TPixel}.cs | 4 +- .../Filters/GrayscaleBt601Processor.cs | 4 +- .../Filters/GrayscaleBt709Processor.cs | 4 +- .../Processors/Filters/HueProcessor.cs | 4 +- .../Processors/Filters/InvertProcessor.cs | 4 +- .../Processors/Filters/KodachromeProcessor.cs | 4 +- .../Processors/Filters/LightnessProcessor.cs | 4 +- .../Processors/Filters/LomographProcessor.cs | 4 +- .../Filters/LomographProcessor{TPixel}.cs | 4 +- .../Processors/Filters/OpacityProcessor.cs | 4 +- .../Filters/OpaqueProcessor{TPixel}.cs | 4 +- .../Processors/Filters/PolaroidProcessor.cs | 4 +- .../Filters/PolaroidProcessor{TPixel}.cs | 4 +- .../Filters/ProtanomalyProcessor.cs | 4 +- .../Processors/Filters/ProtanopiaProcessor.cs | 4 +- .../Processors/Filters/SaturateProcessor.cs | 4 +- .../Processors/Filters/SepiaProcessor.cs | 4 +- .../Filters/TritanomalyProcessor.cs | 4 +- .../Processors/Filters/TritanopiaProcessor.cs | 4 +- .../Processors/ICloningImageProcessor.cs | 4 +- .../ICloningImageProcessor{TPixel}.cs | 4 +- .../Processing/Processors/IImageProcessor.cs | 4 +- .../Processors/IImageProcessor{TPixel}.cs | 4 +- .../Processors/ImageProcessorExtensions.cs | 4 +- .../Processors/ImageProcessor{TPixel}.cs | 4 +- .../AdaptiveHistogramEqualizationProcessor.cs | 4 +- ...eHistogramEqualizationProcessor{TPixel}.cs | 4 +- ...ogramEqualizationSlidingWindowProcessor.cs | 4 +- ...alizationSlidingWindowProcessor{TPixel}.cs | 4 +- .../GlobalHistogramEqualizationProcessor.cs | 4 +- ...lHistogramEqualizationProcessor{TPixel}.cs | 4 +- .../HistogramEqualizationMethod.cs | 4 +- .../HistogramEqualizationOptions.cs | 4 +- .../HistogramEqualizationProcessor.cs | 4 +- .../HistogramEqualizationProcessor{TPixel}.cs | 4 +- .../Overlays/BackgroundColorProcessor.cs | 4 +- .../BackgroundColorProcessor{TPixel}.cs | 4 +- .../Processors/Overlays/GlowProcessor.cs | 4 +- .../Overlays/GlowProcessor{TPixel}.cs | 4 +- .../Processors/Overlays/VignetteProcessor.cs | 4 +- .../Overlays/VignetteProcessor{TPixel}.cs | 4 +- .../DefaultPixelSamplingStrategy.cs | 4 +- .../Quantization/EuclideanPixelMap{TPixel}.cs | 4 +- .../ExtensivePixelSamplingStrategy.cs | 4 +- .../Quantization/IPixelSamplingStrategy.cs | 4 +- .../Processors/Quantization/IQuantizer.cs | 4 +- .../Quantization/IQuantizer{TPixel}.cs | 4 +- .../Quantization/OctreeQuantizer.cs | 4 +- .../Quantization/OctreeQuantizer{TPixel}.cs | 4 +- .../Quantization/PaletteQuantizer.cs | 4 +- .../Quantization/PaletteQuantizer{TPixel}.cs | 4 +- .../Quantization/QuantizeProcessor.cs | 4 +- .../Quantization/QuantizeProcessor{TPixel}.cs | 4 +- .../Quantization/QuantizerConstants.cs | 4 +- .../Quantization/QuantizerOptions.cs | 4 +- .../Quantization/QuantizerUtilities.cs | 4 +- .../Quantization/WebSafePaletteQuantizer.cs | 4 +- .../Quantization/WernerPaletteQuantizer.cs | 4 +- .../Processors/Quantization/WuQuantizer.cs | 4 +- .../Quantization/WuQuantizer{TPixel}.cs | 4 +- .../Processors/Transforms/CropProcessor.cs | 4 +- .../Transforms/CropProcessor{TPixel}.cs | 4 +- .../DegenerateTransformException.cs | 4 +- .../Transforms/EntropyCropProcessor.cs | 4 +- .../EntropyCropProcessor{TPixel}.cs | 4 +- .../Processors/Transforms/IResampler.cs | 4 +- ...samplingTransformImageProcessor{TPixel}.cs | 4 +- .../Linear/AffineTransformProcessor.cs | 4 +- .../AffineTransformProcessor{TPixel}.cs | 4 +- .../Transforms/Linear/AutoOrientProcessor.cs | 4 +- .../Linear/AutoOrientProcessor{TPixel}.cs | 4 +- .../Transforms/Linear/FlipProcessor.cs | 4 +- .../Linear/FlipProcessor{TPixel}.cs | 4 +- .../Linear/LinearTransformUtilities.cs | 4 +- .../Linear/ProjectiveTransformProcessor.cs | 4 +- .../ProjectiveTransformProcessor{TPixel}.cs | 4 +- .../Transforms/Linear/RotateProcessor.cs | 4 +- .../Linear/RotateProcessor{TPixel}.cs | 4 +- .../Transforms/Linear/SkewProcessor.cs | 4 +- .../Transforms/Resamplers/BicubicResampler.cs | 4 +- .../Transforms/Resamplers/BoxResampler.cs | 4 +- .../Transforms/Resamplers/CubicResampler.cs | 4 +- .../Transforms/Resamplers/LanczosResampler.cs | 4 +- .../Resamplers/NearestNeighborResampler.cs | 4 +- .../Resamplers/TriangleResampler.cs | 4 +- .../Transforms/Resamplers/WelchResampler.cs | 4 +- .../Transforms/Resize/ResizeHelper.cs | 4 +- .../Transforms/Resize/ResizeKernel.cs | 4 +- .../ResizeKernelMap.PeriodicKernelMap.cs | 4 +- .../Transforms/Resize/ResizeKernelMap.cs | 4 +- .../Transforms/Resize/ResizeProcessor.cs | 4 +- .../Resize/ResizeProcessor{TPixel}.cs | 4 +- .../Transforms/Resize/ResizeWorker.cs | 4 +- .../Transforms/TransformProcessor.cs | 4 +- .../Transforms/TransformProcessorHelpers.cs | 4 +- .../Transforms/TransformUtilities.cs | 4 +- .../Processing/ProjectiveTransformBuilder.cs | 4 +- src/ImageSharp/Processing/ResizeMode.cs | 4 +- src/ImageSharp/Processing/ResizeOptions.cs | 4 +- src/ImageSharp/Processing/RotateMode.cs | 4 +- src/ImageSharp/Processing/TaperCorner.cs | 4 +- src/ImageSharp/Processing/TaperSide.cs | 4 +- src/ImageSharp/Properties/AssemblyInfo.cs | 4 +- src/ImageSharp/ReadOrigin.cs | 4 +- tests/ImageSharp.Benchmarks/BenchmarkBase.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/DecodeBmp.cs | 4 +- .../Codecs/DecodeFilteredPng.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/DecodeGif.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/DecodePng.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/DecodeTga.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/EncodeBmp.cs | 4 +- .../Codecs/EncodeBmpMultiple.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/EncodeGif.cs | 4 +- .../Codecs/EncodeGifMultiple.cs | 4 +- .../Codecs/EncodeIndexedPng.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/EncodePng.cs | 4 +- .../ImageSharp.Benchmarks/Codecs/EncodeTga.cs | 4 +- .../Codecs/GetSetPixel.cs | 4 +- .../Codecs/ImageBenchmarkTests.cs | 4 +- .../BlockOperations/Block8x8F_CopyTo1x1.cs | 4 +- .../BlockOperations/Block8x8F_CopyTo2x2.cs | 4 +- .../BlockOperations/Block8x8F_DivideRound.cs | 4 +- .../Block8x8F_LoadFromInt16.cs | 4 +- .../Jpeg/BlockOperations/Block8x8F_Round.cs | 4 +- .../Codecs/Jpeg/DecodeJpegParseStreamOnly.cs | 4 +- .../Codecs/Jpeg/DecodeJpeg_Aggregate.cs | 4 +- .../Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs | 4 +- .../Codecs/Jpeg/DoubleBufferedStreams.cs | 4 +- .../Codecs/Jpeg/EncodeJpeg.cs | 4 +- .../Codecs/Jpeg/EncodeJpegMultiple.cs | 4 +- .../Codecs/Jpeg/IdentifyJpeg.cs | 4 +- .../Codecs/Jpeg/LoadResizeSave_Aggregate.cs | 4 +- .../Jpeg/LoadResizeSave_ImageSpecific.cs | 4 +- .../Codecs/Jpeg/YCbCrColorConversion.cs | 4 +- .../Codecs/MultiImageBenchmarkBase.cs | 4 +- .../Color/Bulk/FromRgba32Bytes.cs | 4 +- .../Color/Bulk/FromVector4.cs | 4 +- .../Color/Bulk/Rgb24Bytes.cs | 4 +- .../Color/Bulk/ToRgba32Bytes.cs | 4 +- .../Color/Bulk/ToVector4.cs | 4 +- .../Color/Bulk/ToVector4_Bgra32.cs | 4 +- .../Color/Bulk/ToVector4_Rgba32.cs | 4 +- .../Color/ColorEquality.cs | 4 +- .../Color/ColorspaceCieXyzToCieLabConvert.cs | 4 +- .../ColorspaceCieXyzToHunterLabConvert.cs | 4 +- .../Color/ColorspaceCieXyzToLmsConvert.cs | 4 +- .../Color/ColorspaceCieXyzToRgbConvert.cs | 4 +- .../Color/RgbToYCbCr.LookupTables.cs | 4 +- .../ImageSharp.Benchmarks/Color/RgbToYCbCr.cs | 4 +- .../Color/RgbWorkingSpaceAdapt.cs | 4 +- .../ImageSharp.Benchmarks/Color/YcbCrToRgb.cs | 4 +- tests/ImageSharp.Benchmarks/Config.cs | 4 +- .../General/Adler32Benchmark.cs | 4 +- .../ImageSharp.Benchmarks/General/Array2D.cs | 4 +- .../General/ArrayReverse.cs | 4 +- .../General/BasicMath/Abs.cs | 4 +- .../General/BasicMath/ClampFloat.cs | 4 +- .../General/BasicMath/ClampInt32IntoByte.cs | 4 +- .../General/BasicMath/ClampVector4.cs | 4 +- .../BasicMath/ModuloPowerOfTwoConstant.cs | 4 +- .../BasicMath/ModuloPowerOfTwoVariable.cs | 4 +- .../General/BasicMath/Pow.cs | 4 +- .../General/BasicMath/Round.cs | 4 +- .../General/CopyBuffers.cs | 4 +- .../General/Crc32Benchmark.cs | 4 +- .../General/PixelConversion/ITestPixel.cs | 4 +- .../PixelConversion_ConvertFromRgba32.cs | 4 +- .../PixelConversion_ConvertFromVector4.cs | 4 +- .../PixelConversion_ConvertToRgba32.cs | 4 +- ...vertToRgba32_AsPartOfCompositeOperation.cs | 4 +- .../PixelConversion_ConvertToVector4.cs | 4 +- ...ertToVector4_AsPartOfCompositeOperation.cs | 4 +- .../PixelConversion_Rgba32_To_Argb32.cs | 4 +- .../PixelConversion_Rgba32_To_Bgra32.cs | 4 +- .../General/PixelConversion/TestArgb.cs | 4 +- .../General/PixelConversion/TestRgba.cs | 4 +- .../General/StructCasting.cs | 4 +- .../General/Vector4Constants.cs | 4 +- .../General/Vectorization/BitwiseOrUint32.cs | 4 +- .../General/Vectorization/DivFloat.cs | 4 +- .../General/Vectorization/DivUInt32.cs | 4 +- .../General/Vectorization/Divide.cs | 4 +- .../General/Vectorization/MulFloat.cs | 4 +- .../General/Vectorization/MulUInt32.cs | 4 +- .../General/Vectorization/Multiply.cs | 4 +- .../General/Vectorization/Premultiply.cs | 4 +- .../Vectorization/ReinterpretUInt32AsFloat.cs | 4 +- .../Vectorization/SIMDBenchmarkBase.cs | 4 +- .../General/Vectorization/UInt32ToSingle.cs | 4 +- .../General/Vectorization/VectorFetching.cs | 4 +- .../Vectorization/WidenBytesToUInt32.cs | 4 +- .../PixelBlenders/PorterDuffBulkVsPixel.cs | 4 +- tests/ImageSharp.Benchmarks/Program.cs | 4 +- tests/ImageSharp.Benchmarks/Samplers/Crop.cs | 4 +- .../Samplers/DetectEdges.cs | 4 +- .../ImageSharp.Benchmarks/Samplers/Diffuse.cs | 4 +- .../Samplers/GaussianBlur.cs | 4 +- .../ImageSharp.Benchmarks/Samplers/Resize.cs | 4 +- .../ImageSharp.Benchmarks/Samplers/Rotate.cs | 4 +- tests/ImageSharp.Benchmarks/Samplers/Skew.cs | 4 +- .../Program.cs | 4 +- .../Advanced/AdvancedImageExtensionsTests.cs | 4 +- .../Color/ColorTests.CastFrom.cs | 4 +- .../Color/ColorTests.CastTo.cs | 4 +- .../Color/ColorTests.ConstructFrom.cs | 4 +- tests/ImageSharp.Tests/Color/ColorTests.cs | 4 +- .../Color/ReferencePalette.cs | 4 +- .../Colorspaces/CieLabTests.cs | 4 +- .../Colorspaces/CieLchTests.cs | 4 +- .../Colorspaces/CieLchuvTests.cs | 4 +- .../Colorspaces/CieLuvTests.cs | 4 +- .../CieXyChromaticityCoordinatesTests.cs | 4 +- .../Colorspaces/CieXyyTests.cs | 4 +- .../Colorspaces/CieXyzTests.cs | 4 +- .../ImageSharp.Tests/Colorspaces/CmykTests.cs | 4 +- .../Colorspaces/Companding/CompandingTests.cs | 4 +- .../ApproximateColorspaceComparer.cs | 4 +- .../CieLabAndCieLchConversionTests.cs | 4 +- .../CieLabAndCieLchuvConversionTests.cs | 4 +- .../CieLabAndCieLuvConversionTests.cs | 4 +- .../CieLabAndCieXyyConversionTests.cs | 4 +- .../CieLabAndCmykConversionTests.cs | 4 +- .../Conversion/CieLabAndHslConversionTests.cs | 4 +- .../Conversion/CieLabAndHsvConversionTests.cs | 4 +- .../CieLabAndHunterLabConversionTests.cs | 4 +- .../CieLabAndLinearRgbConversionTests.cs | 4 +- .../Conversion/CieLabAndLmsConversionTests.cs | 4 +- .../Conversion/CieLabAndRgbConversionTests.cs | 4 +- .../CieLabAndYCbCrConversionTests.cs | 4 +- .../CieLchAndCieLuvConversionTests.cs | 4 +- .../CieLchAndCieXyyConversionTests.cs | 4 +- .../Conversion/CieLchAndHslConversionTests.cs | 4 +- .../Conversion/CieLchAndHsvConversionTests.cs | 4 +- .../CieLchAndHunterLabConversionTests.cs | 4 +- .../CieLchAndLinearRgbConversionTests.cs | 4 +- .../Conversion/CieLchAndLmsConversionTests.cs | 4 +- .../Conversion/CieLchAndRgbConversionTests.cs | 4 +- .../CieLchAndYCbCrConversionTests.cs | 4 +- .../CieLchuvAndCieLchConversionTests.cs | 4 +- .../CieLchuvAndCieLuvConversionTests.cs | 4 +- .../CieLchuvAndCmykConversionTests.cs | 4 +- .../CieLuvAndCieXyyConversionTests.cs | 4 +- .../Conversion/CieLuvAndHslConversionTests.cs | 4 +- .../Conversion/CieLuvAndHsvConversionTests.cs | 4 +- .../CieLuvAndHunterLabConversionTests.cs | 4 +- .../CieLuvAndLinearRgbConversionTests.cs | 4 +- .../Conversion/CieLuvAndLmsConversionTests.cs | 4 +- .../Conversion/CieLuvAndRgbConversionTests.cs | 4 +- .../CieLuvAndYCbCrConversionTests.cs | 4 +- .../Conversion/CieXyyAndHslConversionTests.cs | 4 +- .../Conversion/CieXyyAndHsvConversionTests.cs | 4 +- .../CieXyyAndHunterLabConversionTests.cs | 4 +- .../CieXyyAndLinearRgbConversionTests.cs | 4 +- .../Conversion/CieXyyAndLmsConversionTests.cs | 4 +- .../Conversion/CieXyyAndRgbConversionTests.cs | 4 +- .../CieXyyAndYCbCrConversionTests.cs | 4 +- .../CieXyzAndCieLabConversionTest.cs | 4 +- .../CieXyzAndCieLchConversionTests.cs | 4 +- .../CieXyzAndCieLchuvConversionTests.cs | 4 +- .../CieXyzAndCieLuvConversionTest.cs | 4 +- .../CieXyzAndCieXyyConversionTest.cs | 4 +- .../Conversion/CieXyzAndHslConversionTests.cs | 4 +- .../Conversion/CieXyzAndHsvConversionTests.cs | 4 +- .../CieXyzAndHunterLabConversionTest.cs | 4 +- .../Conversion/CieXyzAndLmsConversionTest.cs | 4 +- .../CieXyzAndYCbCrConversionTests.cs | 4 +- .../CmykAndCieLchConversionTests.cs | 4 +- .../CmykAndCieLuvConversionTests.cs | 4 +- .../CmykAndCieXyyConversionTests.cs | 4 +- .../CmykAndCieXyzConversionTests.cs | 4 +- .../Conversion/CmykAndHslConversionTests.cs | 4 +- .../Conversion/CmykAndHsvConversionTests.cs | 4 +- .../CmykAndHunterLabConversionTests.cs | 4 +- .../Conversion/CmykAndYCbCrConversionTests.cs | 4 +- .../Conversion/ColorConverterAdaptTest.cs | 4 +- .../Conversion/RgbAndCieXyzConversionTest.cs | 4 +- .../Conversion/RgbAndCmykConversionTest.cs | 4 +- .../Conversion/RgbAndHslConversionTest.cs | 4 +- .../Conversion/RgbAndHsvConversionTest.cs | 4 +- .../Conversion/RgbAndYCbCrConversionTest.cs | 4 +- .../VonKriesChromaticAdaptationTests.cs | 4 +- .../ImageSharp.Tests/Colorspaces/HslTests.cs | 4 +- .../ImageSharp.Tests/Colorspaces/HsvTests.cs | 4 +- .../Colorspaces/HunterLabTests.cs | 4 +- .../Colorspaces/LinearRgbTests.cs | 4 +- .../ImageSharp.Tests/Colorspaces/LmsTests.cs | 4 +- .../ImageSharp.Tests/Colorspaces/RgbTests.cs | 4 +- .../Colorspaces/StringRepresentationTests.cs | 4 +- .../Colorspaces/YCbCrTests.cs | 4 +- .../ImageSharp.Tests/Common/ConstantsTests.cs | 4 +- .../Common/EncoderExtensionsTests.cs | 4 +- .../ImageSharp.Tests/Common/SimdUtilsTests.cs | 4 +- .../Common/StreamExtensionsTests.cs | 4 +- tests/ImageSharp.Tests/Common/Tuple8.cs | 4 +- tests/ImageSharp.Tests/ConfigurationTests.cs | 4 +- .../Drawing/DrawImageExtensionsTests.cs | 4 +- .../Drawing/DrawImageTests.cs | 4 +- tests/ImageSharp.Tests/FileTestBase.cs | 4 +- .../Formats/Bmp/BmpDecoderTests.cs | 4 +- .../Formats/Bmp/BmpEncoderTests.cs | 4 +- .../Formats/Bmp/BmpFileHeaderTests.cs | 4 +- .../Formats/Bmp/BmpMetadataTests.cs | 4 +- .../Formats/GeneralFormatTests.cs | 4 +- .../Formats/Gif/GifDecoderTests.cs | 4 +- .../Formats/Gif/GifEncoderTests.cs | 4 +- .../Formats/Gif/GifFrameMetadataTests.cs | 4 +- .../Formats/Gif/GifMetadataTests.cs | 4 +- .../GifGraphicControlExtensionTests.cs | 4 +- .../Gif/Sections/GifImageDescriptorTests.cs | 4 +- .../GifLogicalScreenDescriptorTests.cs | 4 +- .../Formats/ImageFormatManagerTests.cs | 4 +- .../Formats/Jpg/AdobeMarkerTests.cs | 4 +- .../Jpg/Block8x8FTests.CopyToBufferArea.cs | 4 +- .../Formats/Jpg/Block8x8FTests.cs | 4 +- .../Formats/Jpg/Block8x8Tests.cs | 4 +- .../ImageSharp.Tests/Formats/Jpg/DCTTests.cs | 4 +- .../Formats/Jpg/GenericBlock8x8Tests.cs | 4 +- .../Formats/Jpg/JFifMarkerTests.cs | 4 +- .../Formats/Jpg/JpegColorConverterTests.cs | 4 +- .../Formats/Jpg/JpegDecoderTests.Baseline.cs | 4 +- .../Formats/Jpg/JpegDecoderTests.Images.cs | 4 +- .../Formats/Jpg/JpegDecoderTests.Metadata.cs | 4 +- .../Jpg/JpegDecoderTests.Progressive.cs | 4 +- .../Formats/Jpg/JpegDecoderTests.cs | 4 +- .../Formats/Jpg/JpegEncoderTests.cs | 4 +- .../Formats/Jpg/JpegFileMarkerTests.cs | 4 +- .../Jpg/JpegImagePostProcessorTests.cs | 4 +- .../Formats/Jpg/JpegMetadataTests.cs | 4 +- .../Formats/Jpg/LibJpegToolsTests.cs | 4 +- .../Formats/Jpg/ParseStreamTests.cs | 4 +- .../Formats/Jpg/ProfileResolverTests.cs | 4 +- ...ferenceImplementationsTests.AccurateDCT.cs | 4 +- ...plementationsTests.FastFloatingPointDCT.cs | 4 +- ...ImplementationsTests.StandardIntegerDCT.cs | 4 +- .../Jpg/ReferenceImplementationsTests.cs | 4 +- .../Formats/Jpg/SpectralJpegTests.cs | 4 +- .../Formats/Jpg/Utils/JpegFixture.cs | 4 +- .../Jpg/Utils/LibJpegTools.ComponentData.cs | 4 +- .../Jpg/Utils/LibJpegTools.SpectralData.cs | 4 +- .../Formats/Jpg/Utils/LibJpegTools.cs | 4 +- .../ReferenceImplementations.AccurateDCT.cs | 4 +- ...nceImplementations.GT_FloatingPoint_DCT.cs | 4 +- ...ceImplementations.LLM_FloatingPoint_DCT.cs | 4 +- ...renceImplementations.StandardIntegerDCT.cs | 4 +- .../Jpg/Utils/ReferenceImplementations.cs | 4 +- .../Formats/Jpg/Utils/SpanExtensions.cs | 4 +- .../Formats/Jpg/Utils/VerifyJpeg.cs | 4 +- .../Formats/Jpg/ZigZagTests.cs | 4 +- .../Formats/Png/Adler32Tests.cs | 4 +- .../Formats/Png/Crc32Tests.cs | 4 +- .../Formats/Png/PngChunkTypeTests.cs | 4 +- .../Formats/Png/PngDecoderTests.Chunks.cs | 4 +- .../Formats/Png/PngDecoderTests.cs | 4 +- .../Formats/Png/PngEncoderTests.Chunks.cs | 4 +- .../Formats/Png/PngEncoderTests.cs | 4 +- .../Formats/Png/PngMetadataTests.cs | 4 +- .../Formats/Png/PngSmokeTests.cs | 4 +- .../Formats/Png/PngTextDataTests.cs | 4 +- .../Formats/Tga/TgaDecoderTests.cs | 4 +- .../Formats/Tga/TgaEncoderTests.cs | 4 +- .../Formats/Tga/TgaFileHeaderTests.cs | 4 +- .../Formats/Tga/TgaTestUtils.cs | 4 +- tests/ImageSharp.Tests/GlobalSuppressions.cs | 4 +- .../GraphicOptionsDefaultsExtensionsTests.cs | 4 +- .../ImageSharp.Tests/GraphicsOptionsTests.cs | 4 +- .../Helpers/ImageMathsTests.cs | 4 +- .../Helpers/ParallelExecutionSettingsTests.cs | 4 +- .../Helpers/ParallelRowIteratorTests.cs | 4 +- .../Helpers/RowIntervalTests.cs | 4 +- .../Helpers/TolerantMathTests.cs | 4 +- .../Helpers/UnitConverterHelperTests.cs | 4 +- .../Helpers/Vector4UtilsTests.cs | 4 +- .../IO/DoubleBufferedStreamReaderTests.cs | 4 +- .../IO/LocalFileSystemTests.cs | 4 +- .../ImageSharp.Tests/Image/ImageCloneTests.cs | 4 +- .../ImageFrameCollectionTests.Generic.cs | 4 +- .../ImageFrameCollectionTests.NonGeneric.cs | 4 +- .../Image/ImageFrameCollectionTests.cs | 4 +- .../ImageSharp.Tests/Image/ImageFrameTests.cs | 4 +- .../Image/ImageRotationTests.cs | 4 +- .../ImageSharp.Tests/Image/ImageSaveTests.cs | 4 +- .../Image/ImageTests.DetectFormat.cs | 4 +- .../Image/ImageTests.Identify.cs | 4 +- .../Image/ImageTests.ImageLoadTestBase.cs | 4 +- .../Image/ImageTests.LoadPixelData.cs | 4 +- ...d_FileSystemPath_PassLocalConfiguration.cs | 4 +- ..._FileSystemPath_UseDefaultConfiguration.cs | 4 +- ...s.Load_FromBytes_PassLocalConfiguration.cs | 4 +- ...s.Load_FromBytes_UseGlobalConfiguration.cs | 4 +- ....Load_FromStream_PassLocalConfiguration.cs | 4 +- ...ts.Load_FromStream_ThrowsRightException.cs | 4 +- ...Load_FromStream_UseDefaultConfiguration.cs | 4 +- .../ImageSharp.Tests/Image/ImageTests.Save.cs | 4 +- .../Image/ImageTests.WrapMemory.cs | 4 +- tests/ImageSharp.Tests/Image/ImageTests.cs | 4 +- .../Image/LargeImageIntegrationTests.cs | 4 +- .../Image/MockImageFormatDetector.cs | 4 +- .../Image/NoneSeekableStream.cs | 4 +- tests/ImageSharp.Tests/ImageInfoTests.cs | 4 +- tests/ImageSharp.Tests/Issues/Issue594.cs | 4 +- .../ArrayPoolMemoryAllocatorTests.cs | 4 +- .../Memory/Allocators/BufferExtensions.cs | 4 +- .../Memory/Allocators/BufferTestSuite.cs | 4 +- .../SimpleGcMemoryAllocatorTests.cs | 4 +- .../ImageSharp.Tests/Memory/Buffer2DTests.cs | 4 +- .../Memory/BufferAreaTests.cs | 4 +- .../DiscontiguousBuffers/MemoryGroupIndex.cs | 4 +- .../MemoryGroupIndexTests.cs | 4 +- .../MemoryGroupTests.Allocate.cs | 4 +- .../MemoryGroupTests.CopyTo.cs | 4 +- .../MemoryGroupTests.SwapOrCopyContent.cs | 4 +- .../MemoryGroupTests.View.cs | 4 +- .../DiscontiguousBuffers/MemoryGroupTests.cs | 4 +- .../MemoryGroupTestsBase.cs | 4 +- tests/ImageSharp.Tests/Memory/TestStructs.cs | 4 +- .../Metadata/ImageFrameMetadataTests.cs | 4 +- .../Metadata/ImageMetadataTests.cs | 4 +- .../Profiles/Exif/ExifProfileTests.cs | 4 +- .../Metadata/Profiles/Exif/ExifReaderTests.cs | 4 +- .../Exif/ExifTagDescriptionAttributeTests.cs | 4 +- .../Metadata/Profiles/Exif/ExifValueTests.cs | 4 +- .../Profiles/Exif/Values/ExifValuesTests.cs | 4 +- .../DataReader/IccDataReaderCurvesTests.cs | 4 +- .../ICC/DataReader/IccDataReaderLutTests.cs | 4 +- .../DataReader/IccDataReaderMatrixTests.cs | 4 +- .../IccDataReaderMultiProcessElementTests.cs | 4 +- .../IccDataReaderNonPrimitivesTests.cs | 4 +- .../IccDataReaderPrimitivesTests.cs | 4 +- .../IccDataReaderTagDataEntryTests.cs | 4 +- .../ICC/DataReader/IccDataReaderTests.cs | 4 +- .../DataWriter/IccDataWriterCurvesTests.cs | 4 +- .../ICC/DataWriter/IccDataWriterLutTests.cs | 4 +- .../ICC/DataWriter/IccDataWriterLutTests1.cs | 4 +- .../ICC/DataWriter/IccDataWriterLutTests2.cs | 4 +- .../DataWriter/IccDataWriterMatrixTests.cs | 4 +- .../IccDataWriterMultiProcessElementTests.cs | 4 +- .../IccDataWriterNonPrimitivesTests.cs | 4 +- .../IccDataWriterPrimitivesTests.cs | 4 +- .../IccDataWriterTagDataEntryTests.cs | 4 +- .../ICC/DataWriter/IccDataWriterTests.cs | 4 +- .../Metadata/Profiles/ICC/IccProfileTests.cs | 4 +- .../Metadata/Profiles/ICC/IccReaderTests.cs | 4 +- .../Metadata/Profiles/ICC/IccWriterTests.cs | 4 +- .../Profiles/ICC/Various/IccProfileIdTests.cs | 4 +- .../Profiles/IPTC/IptcProfileTests.cs | 4 +- .../Numerics/RationalTests.cs | 4 +- .../Numerics/SignedRationalTests.cs | 4 +- .../ImageSharp.Tests/PixelFormats/A8Tests.cs | 4 +- .../PixelFormats/Argb32Tests.cs | 4 +- .../PixelFormats/Bgr24Tests.cs | 4 +- .../PixelFormats/Bgr565Tests.cs | 4 +- .../PixelFormats/Bgra32Tests.cs | 4 +- .../PixelFormats/Bgra4444Tests.cs | 4 +- .../PixelFormats/Bgra5551Tests.cs | 4 +- .../PixelFormats/Byte4Tests.cs | 4 +- .../PixelFormats/HalfSingleTests.cs | 4 +- .../PixelFormats/HalfVector2Tests.cs | 4 +- .../PixelFormats/HalfVector4Tests.cs | 4 +- .../ImageSharp.Tests/PixelFormats/L16Tests.cs | 4 +- .../ImageSharp.Tests/PixelFormats/L8Tests.cs | 4 +- .../PixelFormats/La16Tests.cs | 4 +- .../PixelFormats/La32Tests.cs | 4 +- .../PixelFormats/NormalizedByte2Tests.cs | 4 +- .../PixelFormats/NormalizedByte4Tests.cs | 4 +- .../PixelFormats/NormalizedShort2Tests.cs | 4 +- .../PixelFormats/NormalizedShort4Tests.cs | 4 +- .../PixelFormats/PixelBlenderTests.cs | 4 +- .../PorterDuffCompositorTests.cs | 4 +- .../PixelBlenders/PorterDuffFunctionsTests.cs | 4 +- .../PorterDuffFunctionsTestsTPixel.cs | 4 +- ...ConverterTests.ReferenceImplementations.cs | 4 +- .../PixelFormats/PixelConverterTests.cs | 4 +- ...PixelConversionModifiersExtensionsTests.cs | 4 +- ...elOperationsTests.Argb32OperationsTests.cs | 4 +- ...xelOperationsTests.Bgr24OperationsTests.cs | 4 +- ...elOperationsTests.Bgra32OperationsTests.cs | 4 +- ...OperationsTests.Bgra5551OperationsTests.cs | 4 +- ...PixelOperationsTests.L16OperationsTests.cs | 4 +- .../PixelOperationsTests.L8OperationsTests.cs | 4 +- ...ixelOperationsTests.La16OperationsTests.cs | 4 +- ...ixelOperationsTests.La32OperationsTests.cs | 4 +- ...xelOperationsTests.Rgb24OperationsTests.cs | 4 +- ...xelOperationsTests.Rgb48OperationsTests.cs | 4 +- ...elOperationsTests.Rgba32OperationsTests.cs | 4 +- ...elOperationsTests.Rgba64OperationsTests.cs | 4 +- ...erationsTests.RgbaVectorOperationsTests.cs | 4 +- .../PixelOperations/PixelOperationsTests.cs | 4 +- .../PixelFormats/Rg32Tests.cs | 4 +- .../PixelFormats/Rgb24Tests.cs | 4 +- .../PixelFormats/Rgb48Tests.cs | 4 +- .../PixelFormats/Rgba1010102Tests.cs | 4 +- .../PixelFormats/Rgba32Tests.cs | 4 +- .../PixelFormats/Rgba64Tests.cs | 4 +- .../PixelFormats/RgbaVectorTests.cs | 4 +- .../PixelFormats/Short2Tests.cs | 4 +- .../PixelFormats/Short4Tests.cs | 4 +- .../PixelFormats/UnPackedPixelTests.cs | 4 +- .../Primitives/ColorMatrixTests.cs | 4 +- .../Primitives/DenseMatrixTests.cs | 4 +- .../Primitives/PointFTests.cs | 4 +- .../ImageSharp.Tests/Primitives/PointTests.cs | 4 +- .../Primitives/RectangleFTests.cs | 4 +- .../Primitives/RectangleTests.cs | 4 +- .../ImageSharp.Tests/Primitives/SizeFTests.cs | 4 +- .../ImageSharp.Tests/Primitives/SizeTests.cs | 4 +- .../BaseImageOperationsExtensionTest.cs | 4 +- .../Binarization/AdaptiveThresholdTests.cs | 4 +- .../Binarization/BinaryThresholdTest.cs | 4 +- .../Binarization/OrderedDitherFactoryTests.cs | 4 +- .../Processing/Convolution/BoxBlurTest.cs | 4 +- .../Processing/Convolution/DetectEdgesTest.cs | 4 +- .../Convolution/GaussianBlurTest.cs | 4 +- .../Convolution/GaussianSharpenTest.cs | 4 +- .../Processors/LaplacianKernelFactoryTests.cs | 4 +- .../Processing/Dithering/DitherTest.cs | 4 +- .../Processing/Effects/BackgroundColorTest.cs | 4 +- .../Processing/Effects/OilPaintTest.cs | 4 +- .../Processing/Effects/PixelateTest.cs | 4 +- .../Processing/FakeImageOperationsProvider.cs | 4 +- .../Processing/Filters/BlackWhiteTest.cs | 4 +- .../Processing/Filters/BrightnessTest.cs | 4 +- .../Processing/Filters/ColorBlindnessTest.cs | 4 +- .../Processing/Filters/ContrastTest.cs | 4 +- .../Processing/Filters/FilterTest.cs | 4 +- .../Processing/Filters/GrayscaleTest.cs | 4 +- .../Processing/Filters/HueTest.cs | 4 +- .../Processing/Filters/InvertTest.cs | 4 +- .../Processing/Filters/KodachromeTest.cs | 4 +- .../Processing/Filters/LightnessTest.cs | 4 +- .../Processing/Filters/LomographTest.cs | 4 +- .../Processing/Filters/OpacityTest.cs | 4 +- .../Processing/Filters/PolaroidTest.cs | 4 +- .../Processing/Filters/SaturateTest.cs | 4 +- .../Processing/Filters/SepiaTest.cs | 4 +- .../Processing/ImageOperationTests.cs | 4 +- .../Processing/ImageProcessingContextTests.cs | 4 +- .../HistogramEqualizationTests.cs | 4 +- .../Processing/Overlays/GlowTest.cs | 4 +- .../Processing/Overlays/VignetteTest.cs | 4 +- .../Binarization/BinaryDitherTests.cs | 4 +- .../Binarization/BinaryThresholdTest.cs | 4 +- .../Basic1ParameterConvolutionTests.cs | 4 +- .../Processors/Convolution/BokehBlurTest.cs | 4 +- .../Processors/Convolution/BoxBlurTest.cs | 4 +- .../Processors/Convolution/DetectEdgesTest.cs | 4 +- .../Convolution/GaussianBlurTest.cs | 4 +- .../Convolution/GaussianSharpenTest.cs | 4 +- .../Processors/Dithering/DitherTests.cs | 4 +- .../Processors/Effects/BackgroundColorTest.cs | 4 +- .../Processors/Effects/OilPaintTest.cs | 4 +- .../Processors/Effects/PixelShaderTest.cs | 4 +- .../Processors/Effects/PixelateTest.cs | 4 +- .../Processors/Filters/BlackWhiteTest.cs | 4 +- .../Processors/Filters/BrightnessTest.cs | 4 +- .../Processors/Filters/ColorBlindnessTest.cs | 4 +- .../Processors/Filters/ContrastTest.cs | 4 +- .../Processors/Filters/FilterTest.cs | 4 +- .../Processors/Filters/GrayscaleTest.cs | 4 +- .../Processing/Processors/Filters/HueTest.cs | 4 +- .../Processors/Filters/InvertTest.cs | 4 +- .../Processors/Filters/KodachromeTest.cs | 4 +- .../Processors/Filters/LightnessTest.cs | 4 +- .../Processors/Filters/LomographTest.cs | 4 +- .../Processors/Filters/OpacityTest.cs | 4 +- .../Processors/Filters/PolaroidTest.cs | 4 +- .../Processors/Filters/SaturateTest.cs | 4 +- .../Processors/Filters/SepiaTest.cs | 4 +- .../Processors/Overlays/GlowTest.cs | 4 +- .../Processors/Overlays/OverlayTestBase.cs | 4 +- .../Processors/Overlays/VignetteTest.cs | 4 +- .../Quantization/OctreeQuantizerTests.cs | 4 +- .../Quantization/PaletteQuantizerTests.cs | 4 +- .../Processors/Quantization/QuantizerTests.cs | 4 +- .../Quantization/WuQuantizerTests.cs | 4 +- .../Transforms/AffineTransformTests.cs | 4 +- .../Processors/Transforms/AutoOrientTests.cs | 4 +- .../Processors/Transforms/CropTest.cs | 4 +- .../Processors/Transforms/EntropyCropTest.cs | 4 +- .../Processors/Transforms/FlipTests.cs | 4 +- .../Processors/Transforms/PadTest.cs | 4 +- .../Processors/Transforms/ResamplerTests.cs | 4 +- .../Transforms/ResizeHelperTests.cs | 4 +- ...ResizeKernelMapTests.ReferenceKernelMap.cs | 4 +- .../Transforms/ResizeKernelMapTests.cs | 4 +- .../Processors/Transforms/ResizeTests.cs | 4 +- .../Processors/Transforms/RotateFlipTests.cs | 4 +- .../Processors/Transforms/RotateTests.cs | 4 +- .../Processors/Transforms/SkewTests.cs | 4 +- .../Transforms/AffineTransformBuilderTests.cs | 4 +- .../Processing/Transforms/AutoOrientTests.cs | 4 +- .../Processing/Transforms/CropTest.cs | 4 +- .../Processing/Transforms/EntropyCropTest.cs | 4 +- .../Processing/Transforms/FlipTests.cs | 4 +- .../Processing/Transforms/PadTest.cs | 4 +- .../ProjectiveTransformBuilderTests.cs | 4 +- .../Transforms/ProjectiveTransformTests.cs | 4 +- .../Processing/Transforms/ResizeTests.cs | 4 +- .../Processing/Transforms/RotateFlipTests.cs | 4 +- .../Processing/Transforms/RotateTests.cs | 4 +- .../Processing/Transforms/SkewTest.cs | 4 +- .../Transforms/TransformBuilderTestBase.cs | 4 +- .../Transforms/TransformsHelpersTest.cs | 4 +- .../JpegProfilingBenchmarks.cs | 4 +- .../LoadResizeSaveProfilingBenchmarks.cs | 4 +- .../ProfilingBenchmarks/ProfilingSetup.cs | 4 +- .../ResizeProfilingBenchmarks.cs | 4 +- .../PixelSamplingStrategyTests.cs | 4 +- .../Quantization/QuantizedImageTests.cs | 4 +- .../Quantization/WuQuantizerTests.cs | 4 +- .../TestDataIcc/IccTestDataArray.cs | 4 +- .../TestDataIcc/IccTestDataCurves.cs | 4 +- .../TestDataIcc/IccTestDataLut.cs | 4 +- .../TestDataIcc/IccTestDataMatrix.cs | 4 +- .../IccTestDataMultiProcessElements.cs | 4 +- .../TestDataIcc/IccTestDataNonPrimitives.cs | 4 +- .../TestDataIcc/IccTestDataPrimitives.cs | 4 +- .../TestDataIcc/IccTestDataProfiles.cs | 4 +- .../TestDataIcc/IccTestDataTagDataEntry.cs | 4 +- tests/ImageSharp.Tests/TestFile.cs | 4 +- tests/ImageSharp.Tests/TestFileSystem.cs | 4 +- tests/ImageSharp.Tests/TestFontUtilities.cs | 4 +- tests/ImageSharp.Tests/TestFormat.cs | 4 +- tests/ImageSharp.Tests/TestImages.cs | 4 +- .../TestUtilities/ApproximateFloatComparer.cs | 4 +- .../TestUtilities/ArrayHelper.cs | 4 +- .../Attributes/GroupOutputAttribute.cs | 4 +- .../Attributes/ImageDataAttributeBase.cs | 4 +- .../WithBasicTestPatternImagesAttribute.cs | 4 +- .../Attributes/WithBlankImagesAttribute.cs | 4 +- .../Attributes/WithFileAttribute.cs | 4 +- .../Attributes/WithFileCollectionAttribute.cs | 4 +- .../Attributes/WithMemberFactoryAttribute.cs | 4 +- .../WithSolidFilledImagesAttribute.cs | 4 +- .../WithTestPatternImagesAttribute.cs | 4 +- .../TestUtilities/BasicSerializer.cs | 4 +- .../TestUtilities/GraphicsOptionsComparer.cs | 4 +- .../ImageComparison/ExactImageComparer.cs | 4 +- ...ImageDifferenceIsOverThresholdException.cs | 4 +- .../ImageDimensionsMismatchException.cs | 4 +- .../Exceptions/ImagesSimilarityException.cs | 4 +- .../ImageComparison/ImageComparer.cs | 4 +- .../ImageComparison/ImageSimilarityReport.cs | 4 +- .../ImageComparison/PixelDifference.cs | 4 +- .../ImageComparison/TolerantImageComparer.cs | 4 +- .../BasicTestPatternProvider.cs | 4 +- .../ImageProviders/BlankProvider.cs | 4 +- .../ImageProviders/FileProvider.cs | 4 +- .../ImageProviders/ITestImageProvider.cs | 4 +- .../ImageProviders/MemberMethodProvider.cs | 4 +- .../ImageProviders/SolidProvider.cs | 4 +- .../ImageProviders/TestImageProvider.cs | 4 +- .../ImageProviders/TestPatternProvider.cs | 4 +- .../TestUtilities/ImagingTestCaseUtility.cs | 4 +- .../TestUtilities/MeasureFixture.cs | 4 +- .../TestUtilities/PixelTypes.cs | 4 +- .../ReferenceCodecs/MagickReferenceDecoder.cs | 4 +- .../ReferenceCodecs/SystemDrawingBridge.cs | 4 +- .../SystemDrawingReferenceDecoder.cs | 4 +- .../SystemDrawingReferenceEncoder.cs | 4 +- .../TestUtilities/TestDataGenerator.cs | 4 +- .../TestUtilities/TestEnvironment.Formats.cs | 4 +- .../TestUtilities/TestEnvironment.cs | 4 +- .../TestUtilities/TestImageExtensions.cs | 4 +- .../TestUtilities/TestMemoryAllocator.cs | 4 +- .../TestUtilities/TestMemoryManager.cs | 4 +- .../TestUtilities/TestPixel.cs | 4 +- .../TestUtilities/TestType.cs | 4 +- .../TestUtilities/TestUtils.cs | 4 +- .../TestUtilities/TestVector4.cs | 4 +- .../Tests/BasicSerializerTests.cs | 4 +- .../TestUtilities/Tests/GroupOutputTests.cs | 4 +- .../TestUtilities/Tests/ImageComparerTests.cs | 4 +- .../Tests/MagickReferenceCodecTests.cs | 4 +- .../Tests/ReferenceDecoderBenchmarks.cs | 4 +- .../Tests/SystemDrawingReferenceCodecTests.cs | 4 +- .../Tests/TestEnvironmentTests.cs | 4 +- .../Tests/TestImageExtensionsTests.cs | 4 +- .../Tests/TestImageProviderTests.cs | 4 +- .../Tests/TestUtilityExtensionsTests.cs | 4 +- tests/ImageSharp.Tests/VectorAssert.cs | 4 +- 1416 files changed, 3036 insertions(+), 3538 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 4e79fa187..2afb2eaa1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -102,7 +102,7 @@ en true sixlabors.imagesharp.128.png - LICENSE.md + Apache-2.0 $(RepositoryUrl) true git @@ -126,7 +126,6 @@ - diff --git a/LICENSE b/LICENSE index 0ad25db4b..8d5852d37 100644 --- a/LICENSE +++ b/LICENSE @@ -1,661 +1,201 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) Six Labors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index dcd2f86d7..98607c981 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ SixLabors.ImageSharp [![Build Status](https://img.shields.io/github/workflow/status/SixLabors/ImageSharp/Build/master)](https://github.com/SixLabors/ImageSharp/actions) [![Code coverage](https://codecov.io/gh/SixLabors/ImageSharp/branch/master/graph/badge.svg)](https://codecov.io/gh/SixLabors/ImageSharp) -[![License: AGPL v3](https://img.shields.io/badge/license-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) +[![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=flat&logo=twitter)](https://twitter.com/intent/tweet?hashtags=imagesharp,dotnet,oss&text=ImageSharp.+A+new+cross-platform+2D+graphics+API+in+C%23&url=https%3a%2f%2fgithub.com%2fSixLabors%2fImageSharp&via=sixlabors) @@ -26,10 +26,9 @@ Built against [.NET Standard 1.3](https://docs.microsoft.com/en-us/dotnet/standa ## License -- ImageSharp is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0) -- An alternative Commercial License can be purchased for Closed Source projects and applications. +- ImageSharp is licensed under the [Apache License, Version 2.0](https://opensource.org/licenses/Apache-2.0) +- An alternative Commercial License can be purchased for projects and applications requiring support. Please visit https://sixlabors.com/pricing for details. -- Open Source projects who have taken a dependency on ImageSharp prior to adoption of the AGPL v3 license are permitted to use ImageSharp (including all future versions) under the previous [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). ## Documentation diff --git a/shared-infrastructure b/shared-infrastructure index 44686c6a1..93bd7d17e 160000 --- a/shared-infrastructure +++ b/shared-infrastructure @@ -1 +1 @@ -Subproject commit 44686c6a116961f4a5163e19a0d6136e1b0b9f72 +Subproject commit 93bd7d17ebb029d995d7fa69d4b4e850ec861c1e diff --git a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs index f4e9f3042..d0e4338b3 100644 --- a/src/ImageSharp/Advanced/AdvancedImageExtensions.cs +++ b/src/ImageSharp/Advanced/AdvancedImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Advanced/AotCompilerTools.cs b/src/ImageSharp/Advanced/AotCompilerTools.cs index eaea7a971..2ea456286 100644 --- a/src/ImageSharp/Advanced/AotCompilerTools.cs +++ b/src/ImageSharp/Advanced/AotCompilerTools.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics.CodeAnalysis; diff --git a/src/ImageSharp/Advanced/IConfigurationProvider.cs b/src/ImageSharp/Advanced/IConfigurationProvider.cs index 2deb73a20..9c9d2a942 100644 --- a/src/ImageSharp/Advanced/IConfigurationProvider.cs +++ b/src/ImageSharp/Advanced/IConfigurationProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Advanced { diff --git a/src/ImageSharp/Advanced/IImageVisitor.cs b/src/ImageSharp/Advanced/IImageVisitor.cs index 50e6337e5..2c54c8f1f 100644 --- a/src/ImageSharp/Advanced/IImageVisitor.cs +++ b/src/ImageSharp/Advanced/IImageVisitor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Advanced/IPixelSource.cs b/src/ImageSharp/Advanced/IPixelSource.cs index f0b2687de..948abe0be 100644 --- a/src/ImageSharp/Advanced/IPixelSource.cs +++ b/src/ImageSharp/Advanced/IPixelSource.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Advanced/IRowIntervalOperation.cs b/src/ImageSharp/Advanced/IRowIntervalOperation.cs index a044d8fad..cc7072ff9 100644 --- a/src/ImageSharp/Advanced/IRowIntervalOperation.cs +++ b/src/ImageSharp/Advanced/IRowIntervalOperation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs b/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs index f554e8920..a76624e1a 100644 --- a/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs +++ b/src/ImageSharp/Advanced/IRowIntervalOperation{TBuffer}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Advanced/IRowOperation.cs b/src/ImageSharp/Advanced/IRowOperation.cs index eeec6dce3..122296172 100644 --- a/src/ImageSharp/Advanced/IRowOperation.cs +++ b/src/ImageSharp/Advanced/IRowOperation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Advanced { diff --git a/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs b/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs index 7d8250ddf..5e1562a79 100644 --- a/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs +++ b/src/ImageSharp/Advanced/IRowOperation{TBuffer}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Advanced/ParallelExecutionSettings.cs b/src/ImageSharp/Advanced/ParallelExecutionSettings.cs index 481189374..5415249d2 100644 --- a/src/ImageSharp/Advanced/ParallelExecutionSettings.cs +++ b/src/ImageSharp/Advanced/ParallelExecutionSettings.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Threading.Tasks; diff --git a/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs b/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs index f8250632b..3c2b9fd2c 100644 --- a/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs +++ b/src/ImageSharp/Advanced/ParallelRowIterator.Wrappers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Advanced/ParallelRowIterator.cs b/src/ImageSharp/Advanced/ParallelRowIterator.cs index 45701f933..e787b7cfc 100644 --- a/src/ImageSharp/Advanced/ParallelRowIterator.cs +++ b/src/ImageSharp/Advanced/ParallelRowIterator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Color/Color.Conversions.cs b/src/ImageSharp/Color/Color.Conversions.cs index 1d35b8a31..cd3fc8fd9 100644 --- a/src/ImageSharp/Color/Color.Conversions.cs +++ b/src/ImageSharp/Color/Color.Conversions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Color/Color.NamedColors.cs b/src/ImageSharp/Color/Color.NamedColors.cs index 49c18c9a5..609191d5e 100644 --- a/src/ImageSharp/Color/Color.NamedColors.cs +++ b/src/ImageSharp/Color/Color.NamedColors.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Color/Color.WebSafePalette.cs b/src/ImageSharp/Color/Color.WebSafePalette.cs index 67c608730..cad6553c0 100644 --- a/src/ImageSharp/Color/Color.WebSafePalette.cs +++ b/src/ImageSharp/Color/Color.WebSafePalette.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Color/Color.WernerPalette.cs b/src/ImageSharp/Color/Color.WernerPalette.cs index f8bada44a..52299ae8f 100644 --- a/src/ImageSharp/Color/Color.WernerPalette.cs +++ b/src/ImageSharp/Color/Color.WernerPalette.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Color/Color.cs b/src/ImageSharp/Color/Color.cs index 9056d023a..554fcb835 100644 --- a/src/ImageSharp/Color/Color.cs +++ b/src/ImageSharp/Color/Color.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLab.cs b/src/ImageSharp/ColorSpaces/CieLab.cs index 837812ad0..4d25836ec 100644 --- a/src/ImageSharp/ColorSpaces/CieLab.cs +++ b/src/ImageSharp/ColorSpaces/CieLab.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLch.cs b/src/ImageSharp/ColorSpaces/CieLch.cs index 52d53ffb2..3e94790bb 100644 --- a/src/ImageSharp/ColorSpaces/CieLch.cs +++ b/src/ImageSharp/ColorSpaces/CieLch.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLchuv.cs b/src/ImageSharp/ColorSpaces/CieLchuv.cs index 58fcbfcc3..272c53556 100644 --- a/src/ImageSharp/ColorSpaces/CieLchuv.cs +++ b/src/ImageSharp/ColorSpaces/CieLchuv.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieLuv.cs b/src/ImageSharp/ColorSpaces/CieLuv.cs index 183222f3d..b11447fa7 100644 --- a/src/ImageSharp/ColorSpaces/CieLuv.cs +++ b/src/ImageSharp/ColorSpaces/CieLuv.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieXyy.cs b/src/ImageSharp/ColorSpaces/CieXyy.cs index 2dc4a6204..526c03831 100644 --- a/src/ImageSharp/ColorSpaces/CieXyy.cs +++ b/src/ImageSharp/ColorSpaces/CieXyy.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/CieXyz.cs b/src/ImageSharp/ColorSpaces/CieXyz.cs index f6c95b44b..aaf48c0b9 100644 --- a/src/ImageSharp/ColorSpaces/CieXyz.cs +++ b/src/ImageSharp/ColorSpaces/CieXyz.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Cmyk.cs b/src/ImageSharp/ColorSpaces/Cmyk.cs index 8228c3050..0aab29554 100644 --- a/src/ImageSharp/ColorSpaces/Cmyk.cs +++ b/src/ImageSharp/ColorSpaces/Cmyk.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs b/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs index 73faa30fe..b72332ebe 100644 --- a/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/GammaCompanding.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs b/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs index 7898750a0..719565fd8 100644 --- a/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/LCompanding.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs b/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs index fab8e655b..2eb2537fc 100644 --- a/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/Rec2020Companding.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs b/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs index 0d2030d0d..cf6f97e44 100644 --- a/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/Rec709Companding.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs b/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs index f5c61fe24..2e212ad19 100644 --- a/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs +++ b/src/ImageSharp/ColorSpaces/Companding/SRgbCompanding.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs b/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs index 5ce915e3e..a81845f21 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/CieConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.ColorSpaces.Conversion { diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs index 37aeae6ba..f39d5049c 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.ColorSpaces.Conversion { diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs index 1880d535c..86075e002 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs index 560cd763f..da2e80844 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs index 337cccc66..7f100428b 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs index 662564863..1c831f714 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs index 90654efe3..0adac2201 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs index 70d6a0c7b..b069bb72c 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs index 61534127a..5fa5ec8b1 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs index 18ccfa054..f88076706 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs index dbcba38cb..6d784575c 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs index 9a9c9be78..17cbcbbd5 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs index 8801f837f..7156ac82f 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs index 9b089b7c9..cb5907424 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs index 4695706d0..ce09b1148 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs index 83b756817..126f1eb21 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs index 2c08db268..f565e6aa6 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs index bf7786875..e91c83624 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs index 6be996fbb..36dd2445e 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyChromaticityCoordinates.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs index b18bd81a6..2b60b2861 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CIeLchToCieLabConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs index 3bf36efaf..25542f559 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieLchConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs index bd069373b..31c3f4633 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLabToCieXyzConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs index 1ccc59dc5..052db0e77 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLchuvToCieLuvConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs index 78e1c39f5..13644b092 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieLchuvConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs index b07dcafad..7f15fc77d 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieLuvToCieXyzConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs index 083259d64..2e048031b 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndCieXyyConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs index 47fddbf42..761558676 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndHunterLabConverterBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs index 5094c46ec..0a6ba15fe 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzAndLmsConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs index 42e468733..7a9016261 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLabConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs index acce087fb..45e7589ce 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToCieLuvConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs index ed43951e3..2bf1bb720 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToHunterLabConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs index 999fef5fd..b14705a2d 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CieXyzToLinearRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs index 6f2dafdf2..38c03ca18 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/CmykAndRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs index 844bf6c88..d0e0da756 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HslAndRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs index 9316db491..f005e025a 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HsvAndRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs index e9c8e17a5..4c3cdba22 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/HunterLabToCieXyzConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs index e6d59e0a5..556334b4d 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbAndCieXyzConverterBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs index 25fbf8025..c52a91e6f 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToCieXyzConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs index e5bde6477..7e9e3210a 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/LinearRgbToRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs index 7a50b67e3..056f89608 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/RgbToLinearRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs index 30eda8826..0ae244848 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Converters/YCbCrAndRgbConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs index e26ed0e90..62833475d 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/IChromaticAdaptation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs index 1e3959db2..f69868760 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs index 7ec9f2703..2a03b54e7 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs index 0e01fd5bd..6dec4d735 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/VonKriesChromaticAdaptation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs index 6a2e451e9..f9b268307 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/GammaWorkingSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs index 2d97db2bc..7d42759ae 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/LWorkingSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs index c3f4e5fb9..d57936e35 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec2020WorkingSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs index 6c59fd3c3..5d556fa0d 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/Rec709WorkingSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs index c112d118e..996b72094 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs index 7456c6c93..8140d24db 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/SRgbWorkingSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.ColorSpaces.Companding; diff --git a/src/ImageSharp/ColorSpaces/Hsl.cs b/src/ImageSharp/ColorSpaces/Hsl.cs index 75ac8c053..9df5b4656 100644 --- a/src/ImageSharp/ColorSpaces/Hsl.cs +++ b/src/ImageSharp/ColorSpaces/Hsl.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Hsv.cs b/src/ImageSharp/ColorSpaces/Hsv.cs index 76ed552be..40474621a 100644 --- a/src/ImageSharp/ColorSpaces/Hsv.cs +++ b/src/ImageSharp/ColorSpaces/Hsv.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/HunterLab.cs b/src/ImageSharp/ColorSpaces/HunterLab.cs index ca1d9eeef..4a0acadf4 100644 --- a/src/ImageSharp/ColorSpaces/HunterLab.cs +++ b/src/ImageSharp/ColorSpaces/HunterLab.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Illuminants.cs b/src/ImageSharp/ColorSpaces/Illuminants.cs index de77f6eee..11b66d43b 100644 --- a/src/ImageSharp/ColorSpaces/Illuminants.cs +++ b/src/ImageSharp/ColorSpaces/Illuminants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.ColorSpaces { diff --git a/src/ImageSharp/ColorSpaces/LinearRgb.cs b/src/ImageSharp/ColorSpaces/LinearRgb.cs index 135185998..245dbbd0f 100644 --- a/src/ImageSharp/ColorSpaces/LinearRgb.cs +++ b/src/ImageSharp/ColorSpaces/LinearRgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Lms.cs b/src/ImageSharp/ColorSpaces/Lms.cs index 0718398c6..fa6800343 100644 --- a/src/ImageSharp/ColorSpaces/Lms.cs +++ b/src/ImageSharp/ColorSpaces/Lms.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/Rgb.cs b/src/ImageSharp/ColorSpaces/Rgb.cs index 8d6db080a..900f71b2c 100644 --- a/src/ImageSharp/ColorSpaces/Rgb.cs +++ b/src/ImageSharp/ColorSpaces/Rgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs b/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs index ec6db8bb1..07f76e58c 100644 --- a/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs +++ b/src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.ColorSpaces.Companding; using SixLabors.ImageSharp.ColorSpaces.Conversion; diff --git a/src/ImageSharp/ColorSpaces/YCbCr.cs b/src/ImageSharp/ColorSpaces/YCbCr.cs index 3f5d63159..eaaf7f58f 100644 --- a/src/ImageSharp/ColorSpaces/YCbCr.cs +++ b/src/ImageSharp/ColorSpaces/YCbCr.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Constants.cs b/src/ImageSharp/Common/Constants.cs index 57b1b904c..fd2636100 100644 --- a/src/ImageSharp/Common/Constants.cs +++ b/src/ImageSharp/Common/Constants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/Common/Exceptions/ImageFormatException.cs b/src/ImageSharp/Common/Exceptions/ImageFormatException.cs index 25ed4b589..6a54ce548 100644 --- a/src/ImageSharp/Common/Exceptions/ImageFormatException.cs +++ b/src/ImageSharp/Common/Exceptions/ImageFormatException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs b/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs index 9e225b5c1..dc4f4f108 100644 --- a/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs +++ b/src/ImageSharp/Common/Exceptions/ImageProcessingException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs index 34d3c658d..3b8641532 100644 --- a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs +++ b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs b/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs index 6936852e4..f3a1ea0f5 100644 --- a/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs +++ b/src/ImageSharp/Common/Exceptions/UnknownImageFormatException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/Common/Extensions/ComparableExtensions.cs b/src/ImageSharp/Common/Extensions/ComparableExtensions.cs index e9dfc4bc9..ef3d1deac 100644 --- a/src/ImageSharp/Common/Extensions/ComparableExtensions.cs +++ b/src/ImageSharp/Common/Extensions/ComparableExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs b/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs index 66bd63972..9bf0a1fbe 100644 --- a/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs +++ b/src/ImageSharp/Common/Extensions/ConfigurationExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Threading.Tasks; diff --git a/src/ImageSharp/Common/Extensions/EncoderExtensions.cs b/src/ImageSharp/Common/Extensions/EncoderExtensions.cs index 17c72161f..caef4ac92 100644 --- a/src/ImageSharp/Common/Extensions/EncoderExtensions.cs +++ b/src/ImageSharp/Common/Extensions/EncoderExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #if !SUPPORTS_ENCODING_STRING using System; diff --git a/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs b/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs index 2365bd86c..c6560f8c3 100644 --- a/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs +++ b/src/ImageSharp/Common/Extensions/EnumerableExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Common/Extensions/StreamExtensions.cs b/src/ImageSharp/Common/Extensions/StreamExtensions.cs index 1eff9d7e9..637751f6e 100644 --- a/src/ImageSharp/Common/Extensions/StreamExtensions.cs +++ b/src/ImageSharp/Common/Extensions/StreamExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs b/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs index d81c821ef..f4811d6ca 100644 --- a/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs +++ b/src/ImageSharp/Common/Helpers/Buffer2DUtils.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/DebugGuard.cs b/src/ImageSharp/Common/Helpers/DebugGuard.cs index f793e8165..9ef7c01c6 100644 --- a/src/ImageSharp/Common/Helpers/DebugGuard.cs +++ b/src/ImageSharp/Common/Helpers/DebugGuard.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs b/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs index 7febb3e9b..61f90e23e 100644 --- a/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs +++ b/src/ImageSharp/Common/Helpers/DenseMatrixUtils.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/EnumUtils.cs b/src/ImageSharp/Common/Helpers/EnumUtils.cs index 6dcfdb0ad..089aba337 100644 --- a/src/ImageSharp/Common/Helpers/EnumUtils.cs +++ b/src/ImageSharp/Common/Helpers/EnumUtils.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Common/Helpers/Guard.cs b/src/ImageSharp/Common/Helpers/Guard.cs index 1e6e97122..751920683 100644 --- a/src/ImageSharp/Common/Helpers/Guard.cs +++ b/src/ImageSharp/Common/Helpers/Guard.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/src/ImageSharp/Common/Helpers/ImageMaths.cs b/src/ImageSharp/Common/Helpers/ImageMaths.cs index c88aaba76..977432f8b 100644 --- a/src/ImageSharp/Common/Helpers/ImageMaths.cs +++ b/src/ImageSharp/Common/Helpers/ImageMaths.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/InliningOptions.cs b/src/ImageSharp/Common/Helpers/InliningOptions.cs index d3600d4dd..4bc8ef3c8 100644 --- a/src/ImageSharp/Common/Helpers/InliningOptions.cs +++ b/src/ImageSharp/Common/Helpers/InliningOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // Uncomment this for verbose profiler results. DO NOT PUSH TO MAIN! // #define PROFILING diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs b/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs index 96fbdf124..b56c92dab 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.Avx2Intrinsics.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #if SUPPORTS_RUNTIME_INTRINSICS diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs b/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs index da6714325..de6990db5 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.BasicIntrinsics256.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs b/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs index 7df12d5e2..bd35d1583 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs b/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs index 3a9cf4631..1e89aaeb8 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.FallbackIntrinsics128.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.cs b/src/ImageSharp/Common/Helpers/SimdUtils.cs index 054dbed59..3039eb326 100644 --- a/src/ImageSharp/Common/Helpers/SimdUtils.cs +++ b/src/ImageSharp/Common/Helpers/SimdUtils.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Common/Helpers/TestHelpers.cs b/src/ImageSharp/Common/Helpers/TestHelpers.cs index d1da2def5..33aa81f3d 100644 --- a/src/ImageSharp/Common/Helpers/TestHelpers.cs +++ b/src/ImageSharp/Common/Helpers/TestHelpers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Common.Helpers { diff --git a/src/ImageSharp/Common/Helpers/TolerantMath.cs b/src/ImageSharp/Common/Helpers/TolerantMath.cs index 0415ee1e9..d1d3f2174 100644 --- a/src/ImageSharp/Common/Helpers/TolerantMath.cs +++ b/src/ImageSharp/Common/Helpers/TolerantMath.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Common/Helpers/UnitConverter.cs b/src/ImageSharp/Common/Helpers/UnitConverter.cs index b353e303c..4a6e6abcb 100644 --- a/src/ImageSharp/Common/Helpers/UnitConverter.cs +++ b/src/ImageSharp/Common/Helpers/UnitConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Common/Helpers/Vector4Utilities.cs b/src/ImageSharp/Common/Helpers/Vector4Utilities.cs index eee8c49c6..fccc50755 100644 --- a/src/ImageSharp/Common/Helpers/Vector4Utilities.cs +++ b/src/ImageSharp/Common/Helpers/Vector4Utilities.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Common/Tuples/Octet{T}.cs b/src/ImageSharp/Common/Tuples/Octet{T}.cs index c0bec254a..aaecafd09 100644 --- a/src/ImageSharp/Common/Tuples/Octet{T}.cs +++ b/src/ImageSharp/Common/Tuples/Octet{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Common/Tuples/Vector4Pair.cs b/src/ImageSharp/Common/Tuples/Vector4Pair.cs index 123f838b3..6294a6177 100644 --- a/src/ImageSharp/Common/Tuples/Vector4Pair.cs +++ b/src/ImageSharp/Common/Tuples/Vector4Pair.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Configuration.cs b/src/ImageSharp/Configuration.cs index 1aeea3b7a..03e59d34b 100644 --- a/src/ImageSharp/Configuration.cs +++ b/src/ImageSharp/Configuration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs b/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs index bc33dbb89..233857247 100644 --- a/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs +++ b/src/ImageSharp/Formats/Bmp/BmpArrayFileHeader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs b/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs index f126863e6..6fdf8d634 100644 --- a/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs +++ b/src/ImageSharp/Formats/Bmp/BmpBitsPerPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpCompression.cs b/src/ImageSharp/Formats/Bmp/BmpCompression.cs index 2381a501d..50d1ae46d 100644 --- a/src/ImageSharp/Formats/Bmp/BmpCompression.cs +++ b/src/ImageSharp/Formats/Bmp/BmpCompression.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs b/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs index ff6782f09..5505cd5e6 100644 --- a/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs +++ b/src/ImageSharp/Formats/Bmp/BmpConfigurationModule.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpConstants.cs b/src/ImageSharp/Formats/Bmp/BmpConstants.cs index be577556d..d6c86e4db 100644 --- a/src/ImageSharp/Formats/Bmp/BmpConstants.cs +++ b/src/ImageSharp/Formats/Bmp/BmpConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs index 6547fe76a..7865c06f4 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs index 0661f3145..f97e81001 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs index fbc94a73f..fa832b3a3 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs index cc07c4d87..f2c3791f3 100644 --- a/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpEncoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs b/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs index 784e6393e..acbcdaef3 100644 --- a/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs +++ b/src/ImageSharp/Formats/Bmp/BmpFileHeader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs b/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs index 0ad003037..882ccd12a 100644 --- a/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs +++ b/src/ImageSharp/Formats/Bmp/BmpFileMarkerType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpFormat.cs b/src/ImageSharp/Formats/Bmp/BmpFormat.cs index 36ae5e10b..9e367c6da 100644 --- a/src/ImageSharp/Formats/Bmp/BmpFormat.cs +++ b/src/ImageSharp/Formats/Bmp/BmpFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs b/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs index dce32ace9..b380486a3 100644 --- a/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Bmp/BmpImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs b/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs index 0c4289b32..0d0c05c9f 100644 --- a/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs +++ b/src/ImageSharp/Formats/Bmp/BmpInfoHeader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs b/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs index d4880fd40..86bfdf9bf 100644 --- a/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs +++ b/src/ImageSharp/Formats/Bmp/BmpInfoHeaderType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpMetadata.cs b/src/ImageSharp/Formats/Bmp/BmpMetadata.cs index 396806d22..50cf32fcb 100644 --- a/src/ImageSharp/Formats/Bmp/BmpMetadata.cs +++ b/src/ImageSharp/Formats/Bmp/BmpMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs b/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs index 900c78872..3d577d278 100644 --- a/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs +++ b/src/ImageSharp/Formats/Bmp/BmpThrowHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs b/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs index bf2560067..d359e9f1d 100644 --- a/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs +++ b/src/ImageSharp/Formats/Bmp/IBmpDecoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs b/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs index 4bbf5b87b..d4a22d66e 100644 --- a/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs +++ b/src/ImageSharp/Formats/Bmp/IBmpEncoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Formats/Bmp/ImageExtensions.cs b/src/ImageSharp/Formats/Bmp/ImageExtensions.cs index cfbac8e4e..93e2b3fb1 100644 --- a/src/ImageSharp/Formats/Bmp/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Bmp/ImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs b/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs index c50545e88..a6f212e2e 100644 --- a/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Bmp/MetadataExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Bmp; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs b/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs index 3641c7fe8..ce113dce7 100644 --- a/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs +++ b/src/ImageSharp/Formats/Bmp/RleSkippedPixelHandling.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Bmp { diff --git a/src/ImageSharp/Formats/Gif/GifColorTableMode.cs b/src/ImageSharp/Formats/Gif/GifColorTableMode.cs index 68f084de4..b8569a321 100644 --- a/src/ImageSharp/Formats/Gif/GifColorTableMode.cs +++ b/src/ImageSharp/Formats/Gif/GifColorTableMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs b/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs index 4656629b9..b08a3c38e 100644 --- a/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs +++ b/src/ImageSharp/Formats/Gif/GifConfigurationModule.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifConstants.cs b/src/ImageSharp/Formats/Gif/GifConstants.cs index 410164fbc..24fd8a936 100644 --- a/src/ImageSharp/Formats/Gif/GifConstants.cs +++ b/src/ImageSharp/Formats/Gif/GifConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index faa2498d1..7e8085965 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index 81aa55695..649133085 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs b/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs index 872ab3360..b57491cf9 100644 --- a/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs +++ b/src/ImageSharp/Formats/Gif/GifDisposalMethod.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifEncoder.cs b/src/ImageSharp/Formats/Gif/GifEncoder.cs index 762fc03fc..5ded825e4 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoder.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs index 34c92a180..fe77ba289 100644 --- a/src/ImageSharp/Formats/Gif/GifEncoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifEncoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Gif/GifFormat.cs b/src/ImageSharp/Formats/Gif/GifFormat.cs index e3122c96e..4ff53a409 100644 --- a/src/ImageSharp/Formats/Gif/GifFormat.cs +++ b/src/ImageSharp/Formats/Gif/GifFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs b/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs index 530e368ef..c254a7650 100644 --- a/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs +++ b/src/ImageSharp/Formats/Gif/GifFrameMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Gif { diff --git a/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs b/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs index 735be07d9..3b3dd0bf1 100644 --- a/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Gif/GifImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Gif/GifMetadata.cs b/src/ImageSharp/Formats/Gif/GifMetadata.cs index 1a1e90fe6..686288a98 100644 --- a/src/ImageSharp/Formats/Gif/GifMetadata.cs +++ b/src/ImageSharp/Formats/Gif/GifMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs index dd189ae03..b85bb139a 100644 --- a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs +++ b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs b/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs index 5bd530bba..56bb6d651 100644 --- a/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs +++ b/src/ImageSharp/Formats/Gif/IGifDecoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs index cdb6c7260..909d1c3a7 100644 --- a/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs +++ b/src/ImageSharp/Formats/Gif/IGifEncoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Gif/ImageExtensions.cs b/src/ImageSharp/Formats/Gif/ImageExtensions.cs index cc08976e2..7e762d68b 100644 --- a/src/ImageSharp/Formats/Gif/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Gif/ImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/Gif/LzwDecoder.cs b/src/ImageSharp/Formats/Gif/LzwDecoder.cs index 337118a5d..6a975951c 100644 --- a/src/ImageSharp/Formats/Gif/LzwDecoder.cs +++ b/src/ImageSharp/Formats/Gif/LzwDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Gif/LzwEncoder.cs b/src/ImageSharp/Formats/Gif/LzwEncoder.cs index 004c3cb20..195a84a1d 100644 --- a/src/ImageSharp/Formats/Gif/LzwEncoder.cs +++ b/src/ImageSharp/Formats/Gif/LzwEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Gif/MetadataExtensions.cs b/src/ImageSharp/Formats/Gif/MetadataExtensions.cs index a504ffdf5..2e8dda5c0 100644 --- a/src/ImageSharp/Formats/Gif/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Gif/MetadataExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs b/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs index e5a8b8eba..77b32f77d 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifGraphicControlExtension.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs b/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs index c7cdb44ad..68b048482 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifImageDescriptor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs b/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs index 71a661a66..88c13d203 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifLogicalScreenDescriptor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs b/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs index 251f262b7..26faa8925 100644 --- a/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs +++ b/src/ImageSharp/Formats/Gif/Sections/GifNetscapeLoopingApplicationExtension.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs b/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs index efeb0e602..bec188123 100644 --- a/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs +++ b/src/ImageSharp/Formats/Gif/Sections/IGifExtension.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/IImageDecoder.cs b/src/ImageSharp/Formats/IImageDecoder.cs index 4f17f6729..77d13842a 100644 --- a/src/ImageSharp/Formats/IImageDecoder.cs +++ b/src/ImageSharp/Formats/IImageDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/IImageEncoder.cs b/src/ImageSharp/Formats/IImageEncoder.cs index 01478eb3e..9e2094469 100644 --- a/src/ImageSharp/Formats/IImageEncoder.cs +++ b/src/ImageSharp/Formats/IImageEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/IImageFormat.cs b/src/ImageSharp/Formats/IImageFormat.cs index de49afffb..06b96caad 100644 --- a/src/ImageSharp/Formats/IImageFormat.cs +++ b/src/ImageSharp/Formats/IImageFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/IImageFormatDetector.cs b/src/ImageSharp/Formats/IImageFormatDetector.cs index 8d5f0677f..96c3a49af 100644 --- a/src/ImageSharp/Formats/IImageFormatDetector.cs +++ b/src/ImageSharp/Formats/IImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/IImageInfoDetector.cs b/src/ImageSharp/Formats/IImageInfoDetector.cs index 2bd33c616..77abfe78f 100644 --- a/src/ImageSharp/Formats/IImageInfoDetector.cs +++ b/src/ImageSharp/Formats/IImageInfoDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/ImageFormatManager.cs b/src/ImageSharp/Formats/ImageFormatManager.cs index f4f4c1b10..2e1874592 100644 --- a/src/ImageSharp/Formats/ImageFormatManager.cs +++ b/src/ImageSharp/Formats/ImageFormatManager.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Concurrent; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs index 0879aaaeb..bc6036903 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs index 5fe2b3ba3..f6f590368 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt index 7a7f35e30..6ee054021 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt @@ -1,6 +1,6 @@ <# -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -8,8 +8,8 @@ <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs index 48ca39163..23cf4ce4a 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs index 713f21d2a..8809f890f 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs index a3e787470..00ab48e25 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/AdobeMarker.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs index 56fb32fb9..7b257b37d 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromCmyk.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs index 007ca5a8f..cf0bc2c92 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs index a36942c52..25889a6df 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromRgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs index 47a96afd1..31fc05461 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrBasic.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs index c9c740716..541a03615 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimd.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs index 663ed44e8..c4d1408a2 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYCbCrSimdAvx2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs index 562fa8f44..1137cdc0e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromYccK.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs index af7b21fb0..f68bca041 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs index 09adbc44e..76d5a2dd9 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanBuffer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.IO; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs index bc68fb3b0..10c1b9bcf 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs index b5f4f1b31..f18c63627 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs index d77b0e864..66f7867b4 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs index 7ee8a4b15..b1ac1f78f 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IRawJpegData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs index 8a1389842..3125ff123 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JFifMarker.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs index 8bd15ea12..40683e25a 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs index f7332852d..1ec646bc9 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegColorSpace.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs index f254f9e86..5c3ee6e28 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs index aa3ba9c4c..fc1ebaf92 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs index 389632cae..622c01f5b 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFileMarker.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs index 483c22a39..827afe38d 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs index 93de973d5..716bb9eb0 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegImagePostProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs index c8ec92f97..e1e0e160c 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs index c304c00b6..938459b88 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs index 714c4f823..cda149d29 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/BlockQuad.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs index 6f5d4700d..aa3968a31 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffIndex.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs index a92e06dac..bc2c7634b 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanLut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs index acf25a120..f9c16c5be 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanSpec.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs index 204652b7e..5eee5dfde 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/QuantIndex.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder { diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs index 8ae50a167..3c234ccb1 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs index 38a955f65..52d8a5107 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/YCbCrForwardConverter{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs b/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs index 26c709d5e..ee06f2bde 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/FastFloatingPointDCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs index 69c634c35..213c48ff3 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // namespace SixLabors.ImageSharp.Formats.Jpeg.Components diff --git a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt index 4afd1f72d..e69de29bb 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt +++ b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.Generated.tt @@ -1,40 +0,0 @@ -<# -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. -#> -<#@ template debug="false" hostspecific="false" language="C#" #> -<#@ assembly name="System.Core" #> -<#@ import namespace="System.Linq" #> -<#@ import namespace="System.Text" #> -<#@ import namespace="System.Collections.Generic" #> -<#@ output extension=".cs" #> -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. - -// -namespace SixLabors.ImageSharp.Formats.Jpeg.Components -{ - internal unsafe partial struct GenericBlock8x8 - { - #pragma warning disable 169 - - // It's not allowed use fix-sized buffers with generics, need to place all the fields manually: - <# - PushIndent(" "); - Write(" "); - for (int y = 0; y < 8; y++) - { - Write("private T "); - for (int x = 0; x < 8; x++) - { - Write($"_y{y}_x{x}"); - if (x < 7) Write(", "); - } - WriteLine(";"); - } - PopIndent(); - #> - - #pragma warning restore 169 - } -} diff --git a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs index d72c6f17e..7fe7d869c 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/GenericBlock8x8.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs b/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs index 971890924..ae10bfba8 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/RowOctet.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs b/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs index f3e797228..69f3f2a25 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/SizeExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs b/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs index 801867d56..737652d4e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ZigZag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs b/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs index dc0971e51..3dbcd244a 100644 --- a/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs +++ b/src/ImageSharp/Formats/Jpeg/IJpegDecoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs b/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs index 5f1a2a99c..ecd64a782 100644 --- a/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs +++ b/src/ImageSharp/Formats/Jpeg/IJpegEncoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs b/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs index 36c6d5615..ee47aa345 100644 --- a/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/ImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs b/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs index 6719f5498..ab8197af9 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegConfigurationModule.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/JpegConstants.cs b/src/ImageSharp/Formats/Jpeg/JpegConstants.cs index 30a0e4a00..8cc6ee81a 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegConstants.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs index 97f455c6f..a13d7562e 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index e61ca326a..15f9e3611 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs index 9f3d04a8a..2d6b0d49d 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs index 21bf538ec..3acc8ecea 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Jpeg/JpegFormat.cs b/src/ImageSharp/Formats/Jpeg/JpegFormat.cs index 4d9899f7a..f4a8a8bf2 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegFormat.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs b/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs index c3b938348..660ed3814 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs b/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs index 85506c170..c9dded635 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs b/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs index 71aa0ca22..6597e0ccb 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegSubsample.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Jpeg { diff --git a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs index 2850fd968..fa9eb8391 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs b/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs index 79383902c..d154f3490 100644 --- a/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/PixelTypeInfo.cs b/src/ImageSharp/Formats/PixelTypeInfo.cs index 67d19d756..d53d496fa 100644 --- a/src/ImageSharp/Formats/PixelTypeInfo.cs +++ b/src/ImageSharp/Formats/PixelTypeInfo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Adam7.cs b/src/ImageSharp/Formats/Png/Adam7.cs index 4290e2ca0..50792cae1 100644 --- a/src/ImageSharp/Formats/Png/Adam7.cs +++ b/src/ImageSharp/Formats/Png/Adam7.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs b/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs index f26f4262a..daf653532 100644 --- a/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs +++ b/src/ImageSharp/Formats/Png/Chunks/PhysicalChunkData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs b/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs index 238e1934e..8d9f6e415 100644 --- a/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/AverageFilter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/FilterType.cs b/src/ImageSharp/Formats/Png/Filters/FilterType.cs index 613288c63..bd6aa3c59 100644 --- a/src/ImageSharp/Formats/Png/Filters/FilterType.cs +++ b/src/ImageSharp/Formats/Png/Filters/FilterType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png.Filters { diff --git a/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs b/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs index 0d1122a3a..cdf47a24f 100644 --- a/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/NoneFilter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs b/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs index 69b9c85af..7b5c71a01 100644 --- a/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/SubFilter.cs b/src/ImageSharp/Formats/Png/Filters/SubFilter.cs index 85bbd90ea..c448e71f4 100644 --- a/src/ImageSharp/Formats/Png/Filters/SubFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/SubFilter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Filters/UpFilter.cs b/src/ImageSharp/Formats/Png/Filters/UpFilter.cs index 2f0e0dc19..2a77bccb9 100644 --- a/src/ImageSharp/Formats/Png/Filters/UpFilter.cs +++ b/src/ImageSharp/Formats/Png/Filters/UpFilter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs b/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs index 27ef8cc5a..4b09c5b1c 100644 --- a/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngDecoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs index 66117371e..2c05019ed 100644 --- a/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/IPngEncoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Formats/Png/ImageExtensions.cs b/src/ImageSharp/Formats/Png/ImageExtensions.cs index bdbddd0c6..9188e43ad 100644 --- a/src/ImageSharp/Formats/Png/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Png/ImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/Png/MetadataExtensions.cs b/src/ImageSharp/Formats/Png/MetadataExtensions.cs index 24274531c..b7c2cccf5 100644 --- a/src/ImageSharp/Formats/Png/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Png/MetadataExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Png/PngBitDepth.cs b/src/ImageSharp/Formats/Png/PngBitDepth.cs index 1af76e746..e03f80f28 100644 --- a/src/ImageSharp/Formats/Png/PngBitDepth.cs +++ b/src/ImageSharp/Formats/Png/PngBitDepth.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // Note the value assignment, This will allow us to add 1, 2, and 4 bit encoding when we support it. namespace SixLabors.ImageSharp.Formats.Png diff --git a/src/ImageSharp/Formats/Png/PngChunk.cs b/src/ImageSharp/Formats/Png/PngChunk.cs index 1d0337f4f..fd11ba1b6 100644 --- a/src/ImageSharp/Formats/Png/PngChunk.cs +++ b/src/ImageSharp/Formats/Png/PngChunk.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Png/PngChunkFilter.cs b/src/ImageSharp/Formats/Png/PngChunkFilter.cs index 4e8b5ab96..4d6a20bc9 100644 --- a/src/ImageSharp/Formats/Png/PngChunkFilter.cs +++ b/src/ImageSharp/Formats/Png/PngChunkFilter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Png/PngChunkType.cs b/src/ImageSharp/Formats/Png/PngChunkType.cs index 2dd9cc8b5..39f19f232 100644 --- a/src/ImageSharp/Formats/Png/PngChunkType.cs +++ b/src/ImageSharp/Formats/Png/PngChunkType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngColorType.cs b/src/ImageSharp/Formats/Png/PngColorType.cs index 59a6de335..cb9d819ba 100644 --- a/src/ImageSharp/Formats/Png/PngColorType.cs +++ b/src/ImageSharp/Formats/Png/PngColorType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngCompressionLevel.cs b/src/ImageSharp/Formats/Png/PngCompressionLevel.cs index 74c967544..7516e0987 100644 --- a/src/ImageSharp/Formats/Png/PngCompressionLevel.cs +++ b/src/ImageSharp/Formats/Png/PngCompressionLevel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngConfigurationModule.cs b/src/ImageSharp/Formats/Png/PngConfigurationModule.cs index 3acbfd87a..030669189 100644 --- a/src/ImageSharp/Formats/Png/PngConfigurationModule.cs +++ b/src/ImageSharp/Formats/Png/PngConfigurationModule.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngConstants.cs b/src/ImageSharp/Formats/Png/PngConstants.cs index 60f38dda8..b4ef28083 100644 --- a/src/ImageSharp/Formats/Png/PngConstants.cs +++ b/src/ImageSharp/Formats/Png/PngConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs index b2e243997..9c728fc88 100644 --- a/src/ImageSharp/Formats/Png/PngDecoder.cs +++ b/src/ImageSharp/Formats/Png/PngDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index b6943e5ac..5919b7537 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs index 9b1fc80e0..cd6287fb2 100644 --- a/src/ImageSharp/Formats/Png/PngEncoder.cs +++ b/src/ImageSharp/Formats/Png/PngEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 5f7dd212f..0ce516d2d 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs index e54d5864a..5717ff0d6 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderHelpers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs index 53e6ee30f..3c17c2463 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptions.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs index d0f708e93..b0311f088 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderOptionsHelpers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/Formats/Png/PngFilterMethod.cs b/src/ImageSharp/Formats/Png/PngFilterMethod.cs index aa1899494..e24d86b10 100644 --- a/src/ImageSharp/Formats/Png/PngFilterMethod.cs +++ b/src/ImageSharp/Formats/Png/PngFilterMethod.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngFormat.cs b/src/ImageSharp/Formats/Png/PngFormat.cs index a0f493b95..d90893fea 100644 --- a/src/ImageSharp/Formats/Png/PngFormat.cs +++ b/src/ImageSharp/Formats/Png/PngFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Png/PngHeader.cs b/src/ImageSharp/Formats/Png/PngHeader.cs index 3844a15aa..d54050e02 100644 --- a/src/ImageSharp/Formats/Png/PngHeader.cs +++ b/src/ImageSharp/Formats/Png/PngHeader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs b/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs index c294aab3f..14498e5f1 100644 --- a/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngInterlaceMode.cs b/src/ImageSharp/Formats/Png/PngInterlaceMode.cs index 6516b8473..e524c17e9 100644 --- a/src/ImageSharp/Formats/Png/PngInterlaceMode.cs +++ b/src/ImageSharp/Formats/Png/PngInterlaceMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/PngMetadata.cs b/src/ImageSharp/Formats/Png/PngMetadata.cs index d3b34fbd7..185e7bf4a 100644 --- a/src/ImageSharp/Formats/Png/PngMetadata.cs +++ b/src/ImageSharp/Formats/Png/PngMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs b/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs index ef3a8034e..48ec9bdcd 100644 --- a/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs +++ b/src/ImageSharp/Formats/Png/PngScanlineProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Png/PngTextData.cs b/src/ImageSharp/Formats/Png/PngTextData.cs index 5b5e4b8ab..6c391d62a 100644 --- a/src/ImageSharp/Formats/Png/PngTextData.cs +++ b/src/ImageSharp/Formats/Png/PngTextData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Png/PngThrowHelper.cs b/src/ImageSharp/Formats/Png/PngThrowHelper.cs index 61e986d06..8700438bd 100644 --- a/src/ImageSharp/Formats/Png/PngThrowHelper.cs +++ b/src/ImageSharp/Formats/Png/PngThrowHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/PngTransparentColorMode.cs b/src/ImageSharp/Formats/Png/PngTransparentColorMode.cs index 63967c153..fe92e7fbf 100644 --- a/src/ImageSharp/Formats/Png/PngTransparentColorMode.cs +++ b/src/ImageSharp/Formats/Png/PngTransparentColorMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png { diff --git a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs index d348e7df1..163d4cbcf 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Adler32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Adler32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs index 77fb9f825..500783353 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.Lut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Png.Zlib { diff --git a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs index 5b29e3590..6b19987cb 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Crc32.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Crc32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs b/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs index c2296e013..a5d129c92 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflateThrowHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/Deflater.cs b/src/ImageSharp/Formats/Png/Zlib/Deflater.cs index c99a4c351..838921581 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Deflater.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Deflater.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs index 62943a5ae..ec224d748 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // using System; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs index 11b39efb5..797f5d210 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs index 4d1be0fc4..96b47fb24 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs index 11e566739..5c5651996 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterOutputStream.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs index 095cb33cc..f702a7ead 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs index 3257fa884..06c6e3dea 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibDeflateStream.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs b/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs index 387ff9301..07316d37b 100644 --- a/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs +++ b/src/ImageSharp/Formats/Png/Zlib/ZlibInflateStream.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs b/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs index 3d99f136f..240b8b9b3 100644 --- a/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs +++ b/src/ImageSharp/Formats/Tga/ITgaDecoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs b/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs index b85431e51..21599902a 100644 --- a/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs +++ b/src/ImageSharp/Formats/Tga/ITgaEncoderOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/ImageExtensions.cs b/src/ImageSharp/Formats/Tga/ImageExtensions.cs index 3f9bdacec..50e6c166a 100644 --- a/src/ImageSharp/Formats/Tga/ImageExtensions.cs +++ b/src/ImageSharp/Formats/Tga/ImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/Tga/MetadataExtensions.cs b/src/ImageSharp/Formats/Tga/MetadataExtensions.cs index e8af82a0e..00bdb0188 100644 --- a/src/ImageSharp/Formats/Tga/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Tga/MetadataExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Tga; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs b/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs index 0bba5a4d5..7c04ed4d8 100644 --- a/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs +++ b/src/ImageSharp/Formats/Tga/TgaBitsPerPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaCompression.cs b/src/ImageSharp/Formats/Tga/TgaCompression.cs index 2686afd5b..526d3b3e5 100644 --- a/src/ImageSharp/Formats/Tga/TgaCompression.cs +++ b/src/ImageSharp/Formats/Tga/TgaCompression.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs b/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs index 13bcc54c6..eecd5f0ea 100644 --- a/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs +++ b/src/ImageSharp/Formats/Tga/TgaConfigurationModule.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaConstants.cs b/src/ImageSharp/Formats/Tga/TgaConstants.cs index ec84fa451..990c2bcb1 100644 --- a/src/ImageSharp/Formats/Tga/TgaConstants.cs +++ b/src/ImageSharp/Formats/Tga/TgaConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs index abfaba629..746e88f4d 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index ead053572..e6648039e 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Formats/Tga/TgaEncoder.cs b/src/ImageSharp/Formats/Tga/TgaEncoder.cs index 6280b2ae6..2d944db6c 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoder.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs index aee3a26cc..317bec080 100644 --- a/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaEncoderCore.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Formats/Tga/TgaFileHeader.cs b/src/ImageSharp/Formats/Tga/TgaFileHeader.cs index 452c7e4c5..7ea2479dd 100644 --- a/src/ImageSharp/Formats/Tga/TgaFileHeader.cs +++ b/src/ImageSharp/Formats/Tga/TgaFileHeader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Formats/Tga/TgaFormat.cs b/src/ImageSharp/Formats/Tga/TgaFormat.cs index 0afdb3075..9d72ee64f 100644 --- a/src/ImageSharp/Formats/Tga/TgaFormat.cs +++ b/src/ImageSharp/Formats/Tga/TgaFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs b/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs index 9074b3756..018dbc7ca 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs b/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs index 6e311a525..43e0a357b 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageOrigin.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaImageType.cs b/src/ImageSharp/Formats/Tga/TgaImageType.cs index 4ee95ccb5..9525cc7e7 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageType.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors. ImageSharp.Formats.Tga diff --git a/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs b/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs index b8b8b75c4..f323c93ae 100644 --- a/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs +++ b/src/ImageSharp/Formats/Tga/TgaImageTypeExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaMetadata.cs b/src/ImageSharp/Formats/Tga/TgaMetadata.cs index 17225ea0c..3a86b9551 100644 --- a/src/ImageSharp/Formats/Tga/TgaMetadata.cs +++ b/src/ImageSharp/Formats/Tga/TgaMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Formats.Tga { diff --git a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs index c6df287d8..cf27a5656 100644 --- a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs +++ b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/GeometryUtilities.cs b/src/ImageSharp/GeometryUtilities.cs index 4e82442f6..d9c6ffa5a 100644 --- a/src/ImageSharp/GeometryUtilities.cs +++ b/src/ImageSharp/GeometryUtilities.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs b/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs index 4912f55c8..d1581a00e 100644 --- a/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs +++ b/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Processing; diff --git a/src/ImageSharp/GraphicsOptions.cs b/src/ImageSharp/GraphicsOptions.cs index 8c3060547..99f974201 100644 --- a/src/ImageSharp/GraphicsOptions.cs +++ b/src/ImageSharp/GraphicsOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/IConfigurationModule.cs b/src/ImageSharp/IConfigurationModule.cs index a47bb89bb..9db719fcb 100644 --- a/src/ImageSharp/IConfigurationModule.cs +++ b/src/ImageSharp/IConfigurationModule.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/IDeepCloneable.cs b/src/ImageSharp/IDeepCloneable.cs index caf837b66..f6fb4e267 100644 --- a/src/ImageSharp/IDeepCloneable.cs +++ b/src/ImageSharp/IDeepCloneable.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/IImage.cs b/src/ImageSharp/IImage.cs index 8e9df0108..74a18b831 100644 --- a/src/ImageSharp/IImage.cs +++ b/src/ImageSharp/IImage.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/IImageInfo.cs b/src/ImageSharp/IImageInfo.cs index 92ff5c5c3..426c7ab91 100644 --- a/src/ImageSharp/IImageInfo.cs +++ b/src/ImageSharp/IImageInfo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/IO/DoubleBufferedStreamReader.cs b/src/ImageSharp/IO/DoubleBufferedStreamReader.cs index f0d9620eb..079657c83 100644 --- a/src/ImageSharp/IO/DoubleBufferedStreamReader.cs +++ b/src/ImageSharp/IO/DoubleBufferedStreamReader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/IO/IFileSystem.cs b/src/ImageSharp/IO/IFileSystem.cs index 75d844dab..6a765956b 100644 --- a/src/ImageSharp/IO/IFileSystem.cs +++ b/src/ImageSharp/IO/IFileSystem.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/IO/LocalFileSystem.cs b/src/ImageSharp/IO/LocalFileSystem.cs index 4a3b68ea9..50a6293a6 100644 --- a/src/ImageSharp/IO/LocalFileSystem.cs +++ b/src/ImageSharp/IO/LocalFileSystem.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index cb6f01ce4..fca36b33c 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Image.FromBytes.cs b/src/ImageSharp/Image.FromBytes.cs index 3cd6228a1..50950c192 100644 --- a/src/ImageSharp/Image.FromBytes.cs +++ b/src/ImageSharp/Image.FromBytes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Image.FromFile.cs b/src/ImageSharp/Image.FromFile.cs index 91b6ca3a7..3237ea743 100644 --- a/src/ImageSharp/Image.FromFile.cs +++ b/src/ImageSharp/Image.FromFile.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index bcd11845b..6e22ee8a3 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Image.LoadPixelData.cs b/src/ImageSharp/Image.LoadPixelData.cs index 8b827f170..4ea72ca2c 100644 --- a/src/ImageSharp/Image.LoadPixelData.cs +++ b/src/ImageSharp/Image.LoadPixelData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Image.WrapMemory.cs b/src/ImageSharp/Image.WrapMemory.cs index 03b5cb9a0..2d3c29ed4 100644 --- a/src/ImageSharp/Image.WrapMemory.cs +++ b/src/ImageSharp/Image.WrapMemory.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Image.cs b/src/ImageSharp/Image.cs index c43a20842..d84e0c4a5 100644 --- a/src/ImageSharp/Image.cs +++ b/src/ImageSharp/Image.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/ImageExtensions.Internal.cs b/src/ImageSharp/ImageExtensions.Internal.cs index 65e2701a2..b2ba19e84 100644 --- a/src/ImageSharp/ImageExtensions.Internal.cs +++ b/src/ImageSharp/ImageExtensions.Internal.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs index aa9030c6e..be06c836f 100644 --- a/src/ImageSharp/ImageExtensions.cs +++ b/src/ImageSharp/ImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/ImageFrame.LoadPixelData.cs b/src/ImageSharp/ImageFrame.LoadPixelData.cs index a5a792472..39fd50e19 100644 --- a/src/ImageSharp/ImageFrame.LoadPixelData.cs +++ b/src/ImageSharp/ImageFrame.LoadPixelData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/ImageFrame.cs b/src/ImageSharp/ImageFrame.cs index 38c853fd7..fa25d7642 100644 --- a/src/ImageSharp/ImageFrame.cs +++ b/src/ImageSharp/ImageFrame.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/src/ImageSharp/ImageFrameCollection.cs b/src/ImageSharp/ImageFrameCollection.cs index 75b7fe84c..62ecc71f5 100644 --- a/src/ImageSharp/ImageFrameCollection.cs +++ b/src/ImageSharp/ImageFrameCollection.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections; diff --git a/src/ImageSharp/ImageFrameCollection{TPixel}.cs b/src/ImageSharp/ImageFrameCollection{TPixel}.cs index 1e674198b..36c3ee481 100644 --- a/src/ImageSharp/ImageFrameCollection{TPixel}.cs +++ b/src/ImageSharp/ImageFrameCollection{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections; diff --git a/src/ImageSharp/ImageFrame{TPixel}.cs b/src/ImageSharp/ImageFrame{TPixel}.cs index be4e988c6..a336c9c59 100644 --- a/src/ImageSharp/ImageFrame{TPixel}.cs +++ b/src/ImageSharp/ImageFrame{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/ImageInfo.cs b/src/ImageSharp/ImageInfo.cs index baff7fd08..3128e63bf 100644 --- a/src/ImageSharp/ImageInfo.cs +++ b/src/ImageSharp/ImageInfo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; diff --git a/src/ImageSharp/ImageInfoExtensions.cs b/src/ImageSharp/ImageInfoExtensions.cs index f87b19b1a..7af166c9c 100644 --- a/src/ImageSharp/ImageInfoExtensions.cs +++ b/src/ImageSharp/ImageInfoExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/Image{TPixel}.cs b/src/ImageSharp/Image{TPixel}.cs index 7eda2050a..fcd38846a 100644 --- a/src/ImageSharp/Image{TPixel}.cs +++ b/src/ImageSharp/Image{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/IndexedImageFrame{TPixel}.cs b/src/ImageSharp/IndexedImageFrame{TPixel}.cs index 410cd7655..7668d7600 100644 --- a/src/ImageSharp/IndexedImageFrame{TPixel}.cs +++ b/src/ImageSharp/IndexedImageFrame{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/AllocationOptions.cs b/src/ImageSharp/Memory/Allocators/AllocationOptions.cs index 7c97f08b3..3c865f357 100644 --- a/src/ImageSharp/Memory/Allocators/AllocationOptions.cs +++ b/src/ImageSharp/Memory/Allocators/AllocationOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Memory { diff --git a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs index a468fecee..a7a51f77d 100644 --- a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs +++ b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.Buffer{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs index b0ea00f5b..8aa1b9063 100644 --- a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs +++ b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.CommonFactoryMethods.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Memory { diff --git a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs index 57d8c0e45..8814bbe1f 100644 --- a/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs +++ b/src/ImageSharp/Memory/Allocators/ArrayPoolMemoryAllocator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs b/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs index ef17e6953..8088a2c47 100644 --- a/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs +++ b/src/ImageSharp/Memory/Allocators/IManagedByteBuffer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs b/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs index d88e0bd5d..3a3c695b2 100644 --- a/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs +++ b/src/ImageSharp/Memory/Allocators/Internals/BasicArrayBuffer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs b/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs index b3ece76eb..499a9228c 100644 --- a/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs +++ b/src/ImageSharp/Memory/Allocators/Internals/BasicByteBuffer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Memory.Internals { diff --git a/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs b/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs index ca4483e3b..3f54e335e 100644 --- a/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs +++ b/src/ImageSharp/Memory/Allocators/Internals/ManagedBufferBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs b/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs index 71564836b..ff376a618 100644 --- a/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs +++ b/src/ImageSharp/Memory/Allocators/MemoryAllocator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs b/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs index 5996d0c49..84494f685 100644 --- a/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs +++ b/src/ImageSharp/Memory/Allocators/SimpleGcMemoryAllocator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; using SixLabors.ImageSharp.Memory.Internals; diff --git a/src/ImageSharp/Memory/Buffer2DExtensions.cs b/src/ImageSharp/Memory/Buffer2DExtensions.cs index 56de1fd07..9fce9a4f4 100644 --- a/src/ImageSharp/Memory/Buffer2DExtensions.cs +++ b/src/ImageSharp/Memory/Buffer2DExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Memory/Buffer2DRegion{T}.cs b/src/ImageSharp/Memory/Buffer2DRegion{T}.cs index 2a44a4b72..8c5988944 100644 --- a/src/ImageSharp/Memory/Buffer2DRegion{T}.cs +++ b/src/ImageSharp/Memory/Buffer2DRegion{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Memory/Buffer2D{T}.cs b/src/ImageSharp/Memory/Buffer2D{T}.cs index 6c8741c5d..38ca89e59 100644 --- a/src/ImageSharp/Memory/Buffer2D{T}.cs +++ b/src/ImageSharp/Memory/Buffer2D{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs index 8f46ae3b8..e00775cb3 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/IMemoryGroup{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs index 64f7e368c..950cecf35 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupEnumerator{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs index ca8123f6a..da42b30ad 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs index d301b528d..2fd424d32 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroupView{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs index 3f21d768c..cc2a2f17c 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Consumed.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs index 041e5838a..35290c109 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.Owned.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs index f010855bc..451a8f7e3 100644 --- a/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs +++ b/src/ImageSharp/Memory/DiscontiguousBuffers/MemoryGroup{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/InvalidMemoryOperationException.cs b/src/ImageSharp/Memory/InvalidMemoryOperationException.cs index 88df49bd3..92b1d8d35 100644 --- a/src/ImageSharp/Memory/InvalidMemoryOperationException.cs +++ b/src/ImageSharp/Memory/InvalidMemoryOperationException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs b/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs index 1595b0f48..45463c76f 100644 --- a/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs +++ b/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; diff --git a/src/ImageSharp/Memory/MemoryOwnerExtensions.cs b/src/ImageSharp/Memory/MemoryOwnerExtensions.cs index d86b1e784..98fd40e65 100644 --- a/src/ImageSharp/Memory/MemoryOwnerExtensions.cs +++ b/src/ImageSharp/Memory/MemoryOwnerExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Memory/RowInterval.cs b/src/ImageSharp/Memory/RowInterval.cs index 4f3df7df5..437760f0e 100644 --- a/src/ImageSharp/Memory/RowInterval.cs +++ b/src/ImageSharp/Memory/RowInterval.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs b/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs index 5e14e90f2..722dde19a 100644 --- a/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs +++ b/src/ImageSharp/Memory/TransformItemsDelegate{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs b/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs index e6981548b..3a2356f18 100644 --- a/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs +++ b/src/ImageSharp/Memory/TransformItemsInplaceDelegate.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/FrameDecodingMode.cs b/src/ImageSharp/Metadata/FrameDecodingMode.cs index 55cfdc6ab..e03af18bd 100644 --- a/src/ImageSharp/Metadata/FrameDecodingMode.cs +++ b/src/ImageSharp/Metadata/FrameDecodingMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata { diff --git a/src/ImageSharp/Metadata/ImageFrameMetadata.cs b/src/ImageSharp/Metadata/ImageFrameMetadata.cs index 19b4d8aa6..2021f1249 100644 --- a/src/ImageSharp/Metadata/ImageFrameMetadata.cs +++ b/src/ImageSharp/Metadata/ImageFrameMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Formats; diff --git a/src/ImageSharp/Metadata/ImageMetadata.cs b/src/ImageSharp/Metadata/ImageMetadata.cs index a9b2e9658..425fd9b47 100644 --- a/src/ImageSharp/Metadata/ImageMetadata.cs +++ b/src/ImageSharp/Metadata/ImageMetadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Formats; diff --git a/src/ImageSharp/Metadata/PixelResolutionUnit.cs b/src/ImageSharp/Metadata/PixelResolutionUnit.cs index d894ce877..84d15ed4c 100644 --- a/src/ImageSharp/Metadata/PixelResolutionUnit.cs +++ b/src/ImageSharp/Metadata/PixelResolutionUnit.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs index f2c237094..0c81f14dd 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs index d6273f0dc..13e67554c 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs index 870a7714a..4f75999bb 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifDataTypes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs index 189edf8ca..dc12f3819 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifParts.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs index 2c26cfd57..55af45fb4 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs index 1e944b999..749c69186 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs index c1f3aaf9a..b8a3d4f23 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifTagDescriptionAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs index 38ef49197..3f7303566 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifTags.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs index 70d2664ff..a240c1392 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifWriter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs index 0f22d358a..110abafdd 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Byte.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs index ef59c9d90..e20867b43 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ByteArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs index 76482fb75..2d8a638d0 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.DoubleArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs index 8f2fd3e62..8aae08160 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Long.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs index e164f3c62..ac4b0a1bf 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.LongArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs index 9c3e30d50..7e73b75aa 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Number.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs index ddc0d3b0f..e9440119e 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.NumberArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs index a53f81579..fb16a0cc3 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Rational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs index 741e40c7d..dfca0e277 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.RationalArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs index 6bca94afd..f52045531 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Short.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs index f5a386cb8..ce0bb36f0 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.ShortArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs index 00d29ad4a..46f495786 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs index 954b544a6..4c4a6f275 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.SignedRationalArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs index 24a4789c1..3fc353211 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.String.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs index 4a2af0bff..1d9af6adc 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.Undefined.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs index 35a6fbab9..81a746330 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs index a35b3301c..e07a32598 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTagValue.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs index 6b727e8db..13c94e16d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/ExifTag{TValueType}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs b/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs index 51cab264a..1e6d7abdb 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Tags/UnkownExifTag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs index 3d1282ca4..37dd64686 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifArrayValue{TValueType}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs index d55447ed7..375bc4fff 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByte.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs index 83819844d..72be91ec5 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifByteArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs index 2d0ac3a0f..553b4d391 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDouble.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs index 6157cffc9..3afefc294 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifDoubleArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs index 4c53b36cf..0c4aba895 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs index 3dfd2989d..eaafff953 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifFloatArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs index 98d016af0..49dc8ebc2 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs index 944cd6ceb..206b020ce 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLongArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs index a36eae16f..9e206b23d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumber.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs index 414996ed1..28002f0b7 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifNumberArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs index 2afca7dba..c1f4c3800 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs index 866e8d22b..227362444 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifRationalArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs index c8837b82e..c0acd7790 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShort.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs index 39d0bac4d..a2f40d50c 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifShortArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs index 8d18f8eb7..37fef08c1 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByte.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs index 6da81f77b..5b562e7d9 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedByteArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs index be5aef3d0..d5a8e7c23 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLong.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs index e94f66b59..e26584e8b 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedLongArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs index 90c30501c..5f80db4ea 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs index 88927c548..fbf4903c4 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedRationalArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs index a460f1407..42332a9a3 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShort.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs index 14bb59071..9e5fd65e6 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifSignedShortArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs index a4429de7d..0514c2e8c 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifString.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs index 0c6f61d18..314333919 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs index f5caf1583..2d8aa9260 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs index 25b8d1dbb..fad42a8dd 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValue{TValueType}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs index ca780448c..fc51ebc38 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs index 9631d780a..8cd694dd8 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/IExifValue{TValueType}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs index 6880385d1..c68283914 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccCurveSegment.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs index ec2f9bd01..1ba521f1a 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccFormulaCurveElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs index 36877916a..a5a94b3f8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccOneDimensionalCurve.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs index a6cedd530..204c7563b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccParametricCurve.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs index c55c145fd..d38cf4668 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccResponseCurve.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs index 30e9bf4b4..d79f8c7dc 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Curves/IccSampledCurveElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs index 4f9cebce4..785a110f8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Curves.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs index dd3c5020b..bbd87b1f6 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Lut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs index 7541fe1e3..9c9b3678f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Matrix.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs index 7cbb146ec..beb399d69 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.MultiProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs index bbeb2f211..3347cb0a0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs index 00c902339..931392836 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.Primitives.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs index 91dd8bbc1..20d2b2adc 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs index 14ad06bb8..925a86ac2 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataReader/IccDataReader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs index 6a7564ec4..ffd7ee998 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Curves.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs index fd9310e74..a5eef3d23 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Lut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs index d03d17330..aa28d25aa 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Matrix.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs index 2854fb3e8..aaaf0c531 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.MultiProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs index 4af49e5db..53dd5f008 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs index 2053fed41..5fb8e57d2 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.Primitives.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Text; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs index 5577d7c24..fdbf2a477 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.TagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs index 9c72fa3e5..a3e4f5557 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/DataWriter/IccDataWriter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs index e1306e689..78b8c9fa7 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccClutDataType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs index 649e2700c..413bfff75 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorSpaceType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs index d42195cd1..fe07c47ee 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccColorantEncoding.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs index 5b58b74c2..7d51b7889 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveMeasurementEncodings.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs index a66556cbe..d84f2a57d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccCurveSegmentSignature.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs index 57a25e254..a0c1c3b2a 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDataType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs index 0428789e2..c906b1bb3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccDeviceAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs index be43bc3ff..437235321 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccFormulaCurveType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs index 4849fa3af..90579b71f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMeasurementGeometry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs index 2f216ff37..4e279fcc0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccMultiProcessElementSignature.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs index 9d87d9548..d715b2be3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccParametricCurveType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs index 07abc024f..cd17605c6 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccPrimaryPlatformType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs index db49aa4ce..9efe1ac8f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileClass.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs index fc1f3237c..8a88e3dd1 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileFlag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs index cb901028b..5ef7f8a1e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccProfileTag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // ReSharper disable InconsistentNaming namespace SixLabors.ImageSharp.Metadata.Profiles.Icc diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs index 301b7448f..33406b5a0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccRenderingIntent.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs index ead39c3c5..8cd9a7ae7 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningFlag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs index 414db39bf..95bbf2d0b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccScreeningSpotType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs index af3c7a3f0..7b153dd14 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccSignatureName.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs index 961a7f2cd..7897f5922 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardIlluminant.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs index fb5e8cac4..5a68f54a0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccStandardObserver.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs index 751020c3c..7142f2fc3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Enums/IccTypeSignature.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Icc { diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs b/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs index 3d031e25b..cb08d116d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Exceptions/InvalidIccProfileException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs index 53157b95e..718e4cbe8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccProfile.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Security.Cryptography; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs index d5962318b..898490fba 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccProfileHeader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs index 9c02f3a8c..dd1c72c8b 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccReader.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs index 6bdd6b993..b1783cfe4 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs b/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs index e1e181dc6..9cd0c1793 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/IccWriter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs index f95236f29..387a1a1ea 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccBAcsProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs index 4e68c411b..59295c661 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccClutProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs index 397a9c292..8270786ed 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccCurveSetProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs index 1ad702da0..57fb4bd54 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccEAcsProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs index 0208220d9..6ebeca79d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs index 6bbee5b8d..e3ab9f0ab 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/MultiProcessElements/IccMultiProcessElement.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs index 072644827..508b3f9ad 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccChromaticityTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs index bed0446b1..df7c6b8e8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs index 881b14427..0e096f0cb 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccColorantTableTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs index 998e8d920..f411989e2 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCrdInfoTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs index 43592cc9d..24e57ec8e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs index 118f0d0bd..1b885c590 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Text; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs index 56c25a7c7..af837237e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccDateTimeTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs index 46e303896..45d6865c3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs index d8d13a15e..8ec19d1c6 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut16TagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs index 190265fe9..816462772 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLut8TagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs index 223165acd..7a3b35fea 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutAToBTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs index b0f20a08b..f72970cb8 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccLutBToATagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs index 68440870d..bb53e0757 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMeasurementTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs index 8c61f7744..ca713b4ed 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiLocalizedUnicodeTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs index 966b1cb6d..3dd05ca42 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccMultiProcessElementsTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs index 457ee49b4..64d04da91 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccNamedColor2TagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs index b384d10fe..25bb64dbd 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccParametricCurveTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs index 9a5c108e9..54e5f667c 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceDescTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs index 26dea9d1b..e15529e8f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs index 3db6afccb..625566140 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccResponseCurveSet16TagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs index a9761a270..9fe044ddb 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs index 70d982f0b..1b4338e2e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccSignatureTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs index 0791cd77d..15d1e7264 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextDescriptionTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs index 0e6e82679..2ee339a5f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccTextTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs index 49cd4518e..2b8ec2c7e 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs index 0c41770d7..9396bbc35 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs index 7f5de5b88..38b76fd34 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs index 7e18675d6..f1eb93c46 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs index 94740250c..1640999a3 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs index b0f2325a8..763425554 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs index feea43293..f811af298 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs index fe60ca6da..826340c90 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccViewingConditionsTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs index 67f25934c..90ef83251 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs index 14c11cfa5..0e37b0e2d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccClut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs index 60fc7e54f..c90ec28a0 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccColorantTableEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs index c8d097d38..5a66de54d 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLocalizedString.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs index bacf3f22a..76c099029 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccLut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs index c55a1849a..d15833fdf 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccNamedColor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs index 959269b4e..555b33648 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccPositionNumber.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs index 476f43c26..baf84b128 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileDescription.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs index c113e8ddf..dcac6fa48 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileId.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs index 7818229e1..5a352f38f 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccProfileSequenceIdentifier.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs index ea9f3286c..29cf65f25 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccResponseNumber.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs index 7736255c3..d8e360512 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccScreeningChannel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs index 1ce66146e..bc272e418 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccTagTableEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs index d8f5b13fe..77f364692 100644 --- a/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs +++ b/src/ImageSharp/Metadata/Profiles/ICC/Various/IccVersion.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index 6e864db14..e31842c53 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index 68807918c..084eb8de4 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs index 525d90c89..b670591df 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs index a09239b8d..9e409ca06 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Text; diff --git a/src/ImageSharp/PixelFormats/HalfTypeHelper.cs b/src/ImageSharp/PixelFormats/HalfTypeHelper.cs index 3110e4599..534f60999 100644 --- a/src/ImageSharp/PixelFormats/HalfTypeHelper.cs +++ b/src/ImageSharp/PixelFormats/HalfTypeHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs b/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs index 47962ef20..64560a572 100644 --- a/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs +++ b/src/ImageSharp/PixelFormats/IPackedVector{TPacked}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/PixelFormats/IPixel.cs b/src/ImageSharp/PixelFormats/IPixel.cs index 5d4d3ff94..12b5bc784 100644 --- a/src/ImageSharp/PixelFormats/IPixel.cs +++ b/src/ImageSharp/PixelFormats/IPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs b/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs index 46f13f008..624118778 100644 --- a/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs +++ b/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.PixelFormats { diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs index 6ad5af8e5..2cb528a03 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt index d2633ae3f..46990b53c 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt @@ -1,6 +1,6 @@ <# -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -8,8 +8,8 @@ <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs index 9a385937e..5fccb1fa6 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt index 1869eb3c9..31b502908 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt @@ -1,6 +1,6 @@ <# -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -8,8 +8,8 @@ <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".cs" #> -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs index 54cf72ae8..918935b5e 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs b/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs index 17cd33d55..100f80fe1 100644 --- a/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs +++ b/src/ImageSharp/PixelFormats/PixelBlender{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs b/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs index d3c0dc13d..559571ac9 100644 --- a/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs +++ b/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.PixelFormats { diff --git a/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs b/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs index c5124ebe6..7a5a3dad6 100644 --- a/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs +++ b/src/ImageSharp/PixelFormats/PixelConversionModifiers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs b/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs index 5d08ee69c..9e8c97f81 100644 --- a/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs +++ b/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs index 114ed46b4..b19c35a0a 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/A8.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs index 925f0c301..914b31672 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Argb32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs index 13a38e811..a2ec185be 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr24.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs index e2c24efdf..21ec24a6e 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgr565.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs index 0faaca257..68dcd8287 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs index e1246f276..b2af3045a 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra4444.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs index 06f5532ef..31fa0c29c 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Bgra5551.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs index 296bb3df1..9c5289b86 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Byte4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs index 8d0a86a12..0b1292b64 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Argb32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs index 23b91c5f8..b73bb8b83 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgr24.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs index 7892a2de0..5bdd10404 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs index 251251842..f9662e0d0 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Bgra5551.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs index e7bdb1ebe..d0c96def1 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L16.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs index 95612035a..31b1c96ec 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/L8.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs index 3c4624c09..48e7c76e5 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La16.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs index 0b01a215b..f8b4bedc2 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/La32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs index 081f33573..332683fc7 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb24.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs index cd6924733..9423aa2c8 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgb48.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs index 0a621748e..b05c62f1f 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba32.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs index ac04da77b..3fface03b 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/Rgba64.PixelOperations.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude index f8427ed53..5d56731ba 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Generated/_Common.ttinclude @@ -3,8 +3,8 @@ <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs index 788cb4b59..e3e6e1383 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfSingle.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs index dfd4aa838..43380eac0 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs index 1575c8e5e..cb1ae1f40 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/HalfVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs index 78bd8e4b8..087becaf2 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/L16.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs index 5fb2834f6..32f963795 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/L8.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs index 410cd853e..bcfe67249 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/La16.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs index 3c5b60034..23f4b8e17 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/La32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs index 930d8d296..70098b666 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs index 28d81a8b6..2762073aa 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedByte4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs index 672a86def..8eaec1411 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs index 653aaafd5..ce7c0035f 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/NormalizedShort4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs index 436711e91..7c805f148 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rg32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs index 099ea2105..60cbccded 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs index ffc42ad1f..08f3bcc71 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgb48.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs index de69ad172..2bf9350f8 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba1010102.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs index aa66bbf66..dcf304e9b 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.PixelOperations.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs index 2a3cbf3aa..0b4235101 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs index b9539bac3..22f58ca4a 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Rgba64.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs index fd59222fd..aa0791d0c 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.PixelOperations.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs index 688e48824..6ea80ca3b 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/RgbaVector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs index 16c7da0d3..91c0e9ab5 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs index 43b4649d4..3f74b6845 100644 --- a/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs +++ b/src/ImageSharp/PixelFormats/PixelImplementations/Short4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs index 2c620eeaa..cc36c7d13 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt index 286745a92..21ed328fa 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.Generated.tt @@ -1,6 +1,6 @@ <# -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #> <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> @@ -96,8 +96,8 @@ } #> -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // using System; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs index 11a85cf88..c245e1a6d 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats.PixelBlenders; diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs index 42d7992cf..2fff67b58 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/PixelFormats/RgbaComponent.cs b/src/ImageSharp/PixelFormats/RgbaComponent.cs index 29f3ef4f1..90400fb54 100644 --- a/src/ImageSharp/PixelFormats/RgbaComponent.cs +++ b/src/ImageSharp/PixelFormats/RgbaComponent.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs b/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs index 167103477..814264084 100644 --- a/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs +++ b/src/ImageSharp/PixelFormats/Utils/PixelConverter.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers.Binary; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs index 614925f19..999f6325b 100644 --- a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs +++ b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.Default.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs index e49efd5c3..3973f0485 100644 --- a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs +++ b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.RgbaCompatible.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs index 83edef064..2dca8f2c1 100644 --- a/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs +++ b/src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Primitives/ColorMatrix.cs b/src/ImageSharp/Primitives/ColorMatrix.cs index 24be37fad..228b1d9b0 100644 --- a/src/ImageSharp/Primitives/ColorMatrix.cs +++ b/src/ImageSharp/Primitives/ColorMatrix.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #pragma warning disable SA1117 // Parameters should be on same line or separate lines using System; diff --git a/src/ImageSharp/Primitives/Complex64.cs b/src/ImageSharp/Primitives/Complex64.cs index 4a3c564b8..c4681c511 100644 --- a/src/ImageSharp/Primitives/Complex64.cs +++ b/src/ImageSharp/Primitives/Complex64.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Primitives/ComplexVector4.cs b/src/ImageSharp/Primitives/ComplexVector4.cs index 1cc1e8e68..3a1d4ac46 100644 --- a/src/ImageSharp/Primitives/ComplexVector4.cs +++ b/src/ImageSharp/Primitives/ComplexVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Primitives/DenseMatrix{T}.cs b/src/ImageSharp/Primitives/DenseMatrix{T}.cs index 4393e4e66..e31270336 100644 --- a/src/ImageSharp/Primitives/DenseMatrix{T}.cs +++ b/src/ImageSharp/Primitives/DenseMatrix{T}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/src/ImageSharp/Primitives/LongRational.cs b/src/ImageSharp/Primitives/LongRational.cs index 248cb2e27..9f8eb9a1a 100644 --- a/src/ImageSharp/Primitives/LongRational.cs +++ b/src/ImageSharp/Primitives/LongRational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Matrix3x2Extensions.cs b/src/ImageSharp/Primitives/Matrix3x2Extensions.cs index 0675ff464..91fbf9e34 100644 --- a/src/ImageSharp/Primitives/Matrix3x2Extensions.cs +++ b/src/ImageSharp/Primitives/Matrix3x2Extensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Primitives/Number.cs b/src/ImageSharp/Primitives/Number.cs index 81adf1013..f6748d856 100644 --- a/src/ImageSharp/Primitives/Number.cs +++ b/src/ImageSharp/Primitives/Number.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Point.cs b/src/ImageSharp/Primitives/Point.cs index 6776e584d..653ec1fe3 100644 --- a/src/ImageSharp/Primitives/Point.cs +++ b/src/ImageSharp/Primitives/Point.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/PointF.cs b/src/ImageSharp/Primitives/PointF.cs index d8918a52c..848bfce4a 100644 --- a/src/ImageSharp/Primitives/PointF.cs +++ b/src/ImageSharp/Primitives/PointF.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/Rational.cs b/src/ImageSharp/Primitives/Rational.cs index 7c55d8f17..b6f83e277 100644 --- a/src/ImageSharp/Primitives/Rational.cs +++ b/src/ImageSharp/Primitives/Rational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Rectangle.cs b/src/ImageSharp/Primitives/Rectangle.cs index eac5cf04c..1904b0979 100644 --- a/src/ImageSharp/Primitives/Rectangle.cs +++ b/src/ImageSharp/Primitives/Rectangle.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/RectangleF.cs b/src/ImageSharp/Primitives/RectangleF.cs index 05af7b430..d050c5139 100644 --- a/src/ImageSharp/Primitives/RectangleF.cs +++ b/src/ImageSharp/Primitives/RectangleF.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/SignedRational.cs b/src/ImageSharp/Primitives/SignedRational.cs index 440fbd71e..78ad45de7 100644 --- a/src/ImageSharp/Primitives/SignedRational.cs +++ b/src/ImageSharp/Primitives/SignedRational.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/src/ImageSharp/Primitives/Size.cs b/src/ImageSharp/Primitives/Size.cs index 099a56c43..0790a3dbd 100644 --- a/src/ImageSharp/Primitives/Size.cs +++ b/src/ImageSharp/Primitives/Size.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/SizeF.cs b/src/ImageSharp/Primitives/SizeF.cs index ff8ea1950..b62aa8b0d 100644 --- a/src/ImageSharp/Primitives/SizeF.cs +++ b/src/ImageSharp/Primitives/SizeF.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.ComponentModel; diff --git a/src/ImageSharp/Primitives/ValueSize.cs b/src/ImageSharp/Primitives/ValueSize.cs index 996f0979d..86d54e26d 100644 --- a/src/ImageSharp/Primitives/ValueSize.cs +++ b/src/ImageSharp/Primitives/ValueSize.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs b/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs index d4f376a31..dc9965c43 100644 --- a/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs +++ b/src/ImageSharp/Processing/AdaptiveThresholdExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Binarization; diff --git a/src/ImageSharp/Processing/AffineTransformBuilder.cs b/src/ImageSharp/Processing/AffineTransformBuilder.cs index 66e46f683..75f23c6b4 100644 --- a/src/ImageSharp/Processing/AffineTransformBuilder.cs +++ b/src/ImageSharp/Processing/AffineTransformBuilder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/AnchorPositionMode.cs b/src/ImageSharp/Processing/AnchorPositionMode.cs index d492ed5e8..d880de544 100644 --- a/src/ImageSharp/Processing/AnchorPositionMode.cs +++ b/src/ImageSharp/Processing/AnchorPositionMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/ColorBlindnessMode.cs b/src/ImageSharp/Processing/ColorBlindnessMode.cs index 78b54744f..2ee14cc16 100644 --- a/src/ImageSharp/Processing/ColorBlindnessMode.cs +++ b/src/ImageSharp/Processing/ColorBlindnessMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs b/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs index e65e44072..4f47545fa 100644 --- a/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs +++ b/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/EdgeDetectionOperators.cs b/src/ImageSharp/Processing/EdgeDetectionOperators.cs index e36df76bc..3e986f802 100644 --- a/src/ImageSharp/Processing/EdgeDetectionOperators.cs +++ b/src/ImageSharp/Processing/EdgeDetectionOperators.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs b/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs index f52aab015..244e93f8b 100644 --- a/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Binarization/BinaryDitherExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs b/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs index 55fe2501b..d21429589 100644 --- a/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Binarization/BinaryThresholdExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Binarization; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs index 08ae60623..ea5aedeca 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/BokehBlurExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs index ba9b84f19..1f75838ab 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/BoxBlurExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs index d1ce9cdf7..61b900848 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/DetectEdgesExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs index a8b7bf190..824094935 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/GaussianBlurExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs b/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs index 7dd6823b8..78044e958 100644 --- a/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Convolution/GaussianSharpenExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs b/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs index c595cc83b..f4664a5c0 100644 --- a/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Dithering/DitherExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs b/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs index 048ccf1be..847b20e39 100644 --- a/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Drawing; diff --git a/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs b/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs index aafab4b99..13d9bc349 100644 --- a/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Effects/OilPaintExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs b/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs index 84c5cb422..4f48d4e56 100644 --- a/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Effects/PixelRowDelegateExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs b/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs index 0639c5a16..5316c46cf 100644 --- a/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Effects/PixelateExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs index 92abd0ff0..76861af1a 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/BlackWhiteExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs index 02d73d42a..7431e499f 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/BrightnessExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs index 33efccecf..d46e3b284 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/ColorBlindnessExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs index 3f05651df..01a346aac 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/ContrastExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs index e395e2778..d92f1ff48 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/FilterExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs index 00b0f4bb5..f8fb4946f 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/GrayscaleExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs index d387fc7e3..59a46852d 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/HueExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs index 97acd1aa7..03bfb2fa8 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/InvertExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs index 7810e7c5c..bb9fe9755 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/KodachromeExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs index f50021dd3..373babb64 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/LightnessExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs index 5bff26f0c..2bd4350a6 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/LomographExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs index 386fa5fca..80d7d0c8a 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/OpacityExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs index d2c05765b..73fa5e121 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/PolaroidExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs index f3f0a82cc..b7d520be8 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/SaturateExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs b/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs index 537d280d0..8d818cb0b 100644 --- a/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Filters/SepiaExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs b/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs index a1e708993..175c7648a 100644 --- a/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Normalization/HistogramEqualizationExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Normalization; diff --git a/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs b/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs index 10a570959..06e640f86 100644 --- a/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Overlays/BackgroundColorExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs b/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs index 55fe83da0..9cffd6e1f 100644 --- a/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Overlays/GlowExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs b/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs index 47b05ffe9..43d86b8d5 100644 --- a/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Overlays/VignetteExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs b/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs index fae679276..0bf83812d 100644 --- a/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs b/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs index e160ee921..f0a35b71b 100644 --- a/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Quantization/QuantizeExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs index 5a357375b..0011101e6 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/AutoOrientExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs index 0afc3bf17..5b62b226d 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/CropExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs index ce9f65e96..9324a6977 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/EntropyCropExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs index 7fd1198d5..9f08ecaaf 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/FlipExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs index f7e28cd73..5b0614e79 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/PadExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs index ff70c8f74..572cc2891 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/ResizeExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs index 7eac4d0fa..4b2ee8144 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/RotateExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs index 09470a732..f1e3823a0 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/RotateFlipExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs index e3efc8391..b3fc43dde 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/SkewExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs b/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs index d5adc2701..15430b28f 100644 --- a/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs +++ b/src/ImageSharp/Processing/Extensions/Transforms/TransformExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Processing/FlipMode.cs b/src/ImageSharp/Processing/FlipMode.cs index 56b8300ab..59e7e8a9c 100644 --- a/src/ImageSharp/Processing/FlipMode.cs +++ b/src/ImageSharp/Processing/FlipMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/GrayscaleMode.cs b/src/ImageSharp/Processing/GrayscaleMode.cs index 42a3c0ae3..27b190d23 100644 --- a/src/ImageSharp/Processing/GrayscaleMode.cs +++ b/src/ImageSharp/Processing/GrayscaleMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/IImageProcessingContext.cs b/src/ImageSharp/Processing/IImageProcessingContext.cs index 8398f093e..fb0c2d1c7 100644 --- a/src/ImageSharp/Processing/IImageProcessingContext.cs +++ b/src/ImageSharp/Processing/IImageProcessingContext.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Processing.Processors; diff --git a/src/ImageSharp/Processing/IImageProcessingContextFactory.cs b/src/ImageSharp/Processing/IImageProcessingContextFactory.cs index d843d453b..1b782d188 100644 --- a/src/ImageSharp/Processing/IImageProcessingContextFactory.cs +++ b/src/ImageSharp/Processing/IImageProcessingContextFactory.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs b/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs index 38a1ef202..5bbd24cbe 100644 --- a/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs +++ b/src/ImageSharp/Processing/IInternalImageProcessingContext{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/KnownDitherings.cs b/src/ImageSharp/Processing/KnownDitherings.cs index b5f670232..1c086b740 100644 --- a/src/ImageSharp/Processing/KnownDitherings.cs +++ b/src/ImageSharp/Processing/KnownDitherings.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/KnownFilterMatrices.cs b/src/ImageSharp/Processing/KnownFilterMatrices.cs index 1dadccfd9..8627707fd 100644 --- a/src/ImageSharp/Processing/KnownFilterMatrices.cs +++ b/src/ImageSharp/Processing/KnownFilterMatrices.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/KnownQuantizers.cs b/src/ImageSharp/Processing/KnownQuantizers.cs index 1d3c09c51..9fc8cf543 100644 --- a/src/ImageSharp/Processing/KnownQuantizers.cs +++ b/src/ImageSharp/Processing/KnownQuantizers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Processing/KnownResamplers.cs b/src/ImageSharp/Processing/KnownResamplers.cs index 694328207..469d662ba 100644 --- a/src/ImageSharp/Processing/KnownResamplers.cs +++ b/src/ImageSharp/Processing/KnownResamplers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/OrientationMode.cs b/src/ImageSharp/Processing/OrientationMode.cs index c6ef1a035..a8ba5a55c 100644 --- a/src/ImageSharp/Processing/OrientationMode.cs +++ b/src/ImageSharp/Processing/OrientationMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/PixelRowOperation.cs b/src/ImageSharp/Processing/PixelRowOperation.cs index 1ce20d7b8..466bbc545 100644 --- a/src/ImageSharp/Processing/PixelRowOperation.cs +++ b/src/ImageSharp/Processing/PixelRowOperation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs index a09181fa8..c21d69f90 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs index 2d5918ec7..43023c938 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/AdaptiveThresholdProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs index a90f5f6f4..460a82f0a 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs index 559e6e447..e5672ee9d 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs b/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs index 416f5ad07..f1bc828d9 100644 --- a/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs index 0c9af05e5..2a41329a6 100644 --- a/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/CloningImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs index 3c2ec0ef3..27eca523c 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs index 080e29a36..a3b366590 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BokehBlurProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs index 3ae74571f..da6b96718 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs index 400adb267..8c5358770 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/BoxBlurProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs index a4048e6a8..3a5f35cd1 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs index 627cb7fbd..b61690415 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs index 191681c3e..7b1ceff27 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessorHelpers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs index 70bd69f32..95fef15f6 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs index 3325ea495..6c831e727 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetector2DProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs index df7abee68..164488155 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorCompassProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs index f422146b8..a9d20b547 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs index bf4623ac8..45639d93a 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetectorProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs index a5ff500df..1fa65b62c 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs index 92a848a1f..a9b692a01 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianBlurProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs index 6c904a17f..7e1f02906 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs index 6b35f120a..5e20865e5 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/GaussianSharpenProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs index 65b2d2529..c13e8b543 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/KayyaliProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs index bc0239a99..24caa40f8 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/CompassKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs index 6df09ca32..dbd749c1c 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KayyaliKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs index 644e8d668..28c5590ef 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/KirschKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs index c36bedb91..960ff30eb 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernelFactory.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs index 3c98c1673..ce574341f 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/LaplacianKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs index 35c7f9716..67e52a8f1 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/PrewittKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs index 23b06a987..40c811ca6 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobertsCrossKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs index 89c576e8f..857c772b0 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/RobinsonKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs index 70b4d195f..72c48b273 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/ScharrKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs b/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs index 3918936fb..333b275ba 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Kernels/SobelKernels.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs index 2be8a8d30..62bd17016 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/KirschProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs b/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs index 5079ecc23..957c61b07 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Laplacian3x3Processor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs b/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs index 417fffec0..8b28662ae 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Laplacian5x5Processor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs index 95e6fdbdd..5c8f7c40d 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/LaplacianOfGaussianProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs index 7a8e953d9..09ce7864a 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs index a51f42bdc..ff52d14ba 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurKernelDataProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Concurrent; diff --git a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs index 305b71e19..d2d20e06a 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Parameters/BokehBlurParameters.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs index d1d9316cf..c5ae14935 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/PrewittProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs index fdda446ac..57df83a14 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/RobertsCrossProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs index 6c77bc904..22c8562e2 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/RobinsonProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs index e42c3b42b..d9a0745e2 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ScharrProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs index ac99d2d4d..73632392e 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/SobelProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Convolution { diff --git a/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs b/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs index 01f26fbbb..4c01fb402 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/ErroDither.KnownTypes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Dithering { diff --git a/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs b/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs index 75253fd37..30ac5f135 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/ErrorDither.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Dithering/IDither.cs b/src/ImageSharp/Processing/Processors/Dithering/IDither.cs index 5cb95ead8..1b046c7bc 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/IDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/IDither.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Quantization; diff --git a/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs index 2a929c6fd..5ab3be70d 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/IPaletteDitherImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs index 83f7d6136..71ad6db97 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.KnownTypes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Dithering { diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs index 811599e71..b11411e32 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDither.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs b/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs index 62b16203e..5e2f30f74 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/OrderedDitherFactory.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs index 1c4970710..bb6614a7e 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs index de5a7ec30..789d02046 100644 --- a/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Dithering/PaletteDitherProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs index 81e99eecd..fc954412e 100644 --- a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs index 96e701760..9b3dbcaa3 100644 --- a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs +++ b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs b/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs index 280c6e87b..00049ec1b 100644 --- a/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs +++ b/src/ImageSharp/Processing/Processors/Effects/IPixelRowDelegate.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs index 47e482c78..692d222ee 100644 --- a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs index 3a943b226..21ec8a9c7 100644 --- a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs index 5016657c1..a9c942b30 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs index 8a70f1b74..6b63c885a 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelRowDelegateProcessor{TPixel,TDelegate}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs index 127f0eaa5..b8c5eb7b3 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs index b3f7d51ec..0f307f8f1 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs index 2373c98f0..2e6bf9591 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PositionAwarePixelRowDelegateProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs index 01189f1b1..63326d299 100644 --- a/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/AchromatomalyProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs index 6a86b463d..782bac529 100644 --- a/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/AchromatopsiaProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs index 0e28c9846..e5e556dc2 100644 --- a/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs index 1b5dc0582..bc424e462 100644 --- a/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs index f4dd63ad6..cc7385d4b 100644 --- a/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs index 71638f2da..3afef7b7e 100644 --- a/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/DeuteranomalyProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs index 730d71053..9bd7f449b 100644 --- a/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/DeuteranopiaProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs index 148a34d95..51760f8a2 100644 --- a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs index a8c913a50..584ba072c 100644 --- a/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs index 4dd2bb6af..f2c5e023d 100644 --- a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs index 43d84b704..ace25f1fb 100644 --- a/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs index bdb5a6c1a..2ff99009a 100644 --- a/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs index 343757929..95937e5b3 100644 --- a/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs index 96bdc59c7..fa9cc0874 100644 --- a/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs index 3b4685f28..ba73793c7 100644 --- a/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/LightnessProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs index 6dd6c783b..c2ea2b627 100644 --- a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs index 81ff899b3..9ee52c5a7 100644 --- a/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs index eb1154181..0ccdfafbd 100644 --- a/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs index 8c0765bc7..9bb364476 100644 --- a/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/OpaqueProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs index e098762c2..9f5b495a5 100644 --- a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs index 3b4bafc59..96238c5b3 100644 --- a/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs index e4bb904f2..0e8f571f5 100644 --- a/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/ProtanomalyProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs index f74a9f48f..59735a28c 100644 --- a/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/ProtanopiaProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs index 01ac91c95..051c4ca6b 100644 --- a/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs index 4803bd950..8a0780e46 100644 --- a/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs index ba4b59478..bb031d0ef 100644 --- a/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/TritanomalyProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs index 248e230df..926fd70c5 100644 --- a/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Filters/TritanopiaProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Filters { diff --git a/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs b/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs index 4bd4549fe..d7ef2982c 100644 --- a/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/ICloningImageProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs index 999aad619..9ae89b22a 100644 --- a/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/ICloningImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/IImageProcessor.cs b/src/ImageSharp/Processing/Processors/IImageProcessor.cs index 13d27ae8a..86a514bb6 100644 --- a/src/ImageSharp/Processing/Processors/IImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/IImageProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs index 2e4a56e66..3f2779c82 100644 --- a/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/IImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs b/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs index a86f819f4..bbd226128 100644 --- a/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs +++ b/src/ImageSharp/Processing/Processors/ImageProcessorExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs index 6b0fb68b8..b0896636e 100644 --- a/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/ImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs index 4fc33de0d..56593acb8 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs index 436f66441..b5b07d7a8 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs index 80a987828..046405fc4 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs index 8ff4f0527..a61c68de3 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistogramEqualizationSlidingWindowProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs index f6cbe1be8..30478117a 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs index c6327d3e0..19514c4b6 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs index 31f05b77f..3b81e1134 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationMethod.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs index 7e98cad56..602dc0c4b 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Normalization { diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs index a1d0a42da..60686f401 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs index 6067381fb..2849574bc 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/HistogramEqualizationProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs index b147673b8..bce604c65 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs index af5029fa0..76dcc2194 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/BackgroundColorProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs index 13efc879e..fae5b7c55 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs index 49a3a2d98..c028903f4 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs index 22b75fcb0..749f82594 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs index daf18f806..d09e3b22a 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs index 1f963017c..ccdae0f08 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/DefaultPixelSamplingStrategy.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs index 6db0c2a17..c194f402a 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/EuclideanPixelMap{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Concurrent; diff --git a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs index cd3c8a68e..a998685c0 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/ExtensivePixelSamplingStrategy.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs index 7b8151f08..b31dba614 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IPixelSamplingStrategy.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs index 493c3e0ff..62e04b3f2 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs index 05bbb0b23..993a8d7fa 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/IQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs index b10c5bab5..861697594 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs index 1f2c7ea51..f4d55ebeb 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/OctreeQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs index 4af8460ee..bc5eb783f 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs index d2c5d1fed..d0dbdae20 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/PaletteQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs index 2bfb5907f..a085e1484 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs index 72fb05d00..bb6d3d44a 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizeProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs index e419e23cd..83178bc95 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerConstants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs index 5a29a02c5..d30481043 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs index a623d37da..d9bc81856 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/QuantizerUtilities.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs index 586c8ff5e..5dda17dc6 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WebSafePaletteQuantizer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs index 49e268d7e..6675263df 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WernerPaletteQuantizer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Quantization { diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs index 1cab3996c..95adb7e5d 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs index b7f21473d..e44967855 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs index 52b32ed16..a2c46dd3f 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Transforms { diff --git a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs index 657c2b28d..df9c1146b 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs b/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs index 575ac5fbe..eea095aa5 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/DegenerateTransformException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs index e2b42591c..b1110bfe2 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs index 38e278bca..ebc8f0e4f 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/EntropyCropProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs index 509df8a42..ae3b4da60 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/IResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs index 7413cbafb..2f4b19e10 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/IResamplingTransformImageProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs index 0a9660a66..77ba9582d 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs index 927d0361c..cd7f46d92 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs index 552e2e1f1..5539c10f6 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs index b058c1689..3a06f5c2c 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AutoOrientProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs index 1b0f07c7c..3912617c8 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs index ddb228b82..840881b14 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/FlipProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs index 8ac445827..e19854147 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/LinearTransformUtilities.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs index e787d361b..338489d3f 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs index 6f11b62d2..4f7537796 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs index 2708848ef..3b4604075 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs index ce94e2a27..cce6d6860 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/RotateProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs index 0760c6f69..e5791b82f 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/SkewProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs index 704583343..0b14eeda6 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BicubicResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs index 1cc567166..444d9c37e 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/BoxResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs index 7ad238eaa..fa0dd1f60 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/CubicResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs index fd21495fd..7aefd8f6f 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/LanczosResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs index 27da022d9..d9e1541f1 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/NearestNeighborResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs index fe761f9d6..6aa585b8b 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/TriangleResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs index 33b081b0f..93c50af13 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resamplers/WelchResampler.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs index aa5c80b76..5ff82a096 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs index 990ebc482..35d1931d0 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs index e4b3a7ba0..ef556e1a0 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.PeriodicKernelMap.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs index a619e2358..7cbda76a5 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeKernelMap.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs index 63135e47b..576f97a93 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing.Processors.Transforms { diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs index a654dcc62..9908d4f79 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor{TPixel}.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs index f2fd4c628..764349884 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeWorker.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs index 30317070c..a843293a9 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessor.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs index a9f63bd3c..4fed7cd20 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformProcessorHelpers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs index 7c6069a5b..2b4c2ff14 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs b/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs index f079c7490..d81ce2890 100644 --- a/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs +++ b/src/ImageSharp/Processing/ProjectiveTransformBuilder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/src/ImageSharp/Processing/ResizeMode.cs b/src/ImageSharp/Processing/ResizeMode.cs index b4d2d7d5c..acfa22a7a 100644 --- a/src/ImageSharp/Processing/ResizeMode.cs +++ b/src/ImageSharp/Processing/ResizeMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/ResizeOptions.cs b/src/ImageSharp/Processing/ResizeOptions.cs index bc978b7be..bad8bd455 100644 --- a/src/ImageSharp/Processing/ResizeOptions.cs +++ b/src/ImageSharp/Processing/ResizeOptions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/src/ImageSharp/Processing/RotateMode.cs b/src/ImageSharp/Processing/RotateMode.cs index 7f9d4145e..9a738d990 100644 --- a/src/ImageSharp/Processing/RotateMode.cs +++ b/src/ImageSharp/Processing/RotateMode.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/TaperCorner.cs b/src/ImageSharp/Processing/TaperCorner.cs index 63b9a0fa1..b44fcadbe 100644 --- a/src/ImageSharp/Processing/TaperCorner.cs +++ b/src/ImageSharp/Processing/TaperCorner.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Processing/TaperSide.cs b/src/ImageSharp/Processing/TaperSide.cs index 0fdcf3788..209f5bf6d 100644 --- a/src/ImageSharp/Processing/TaperSide.cs +++ b/src/ImageSharp/Processing/TaperSide.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Processing { diff --git a/src/ImageSharp/Properties/AssemblyInfo.cs b/src/ImageSharp/Properties/AssemblyInfo.cs index 36da83142..74c666c2f 100644 --- a/src/ImageSharp/Properties/AssemblyInfo.cs +++ b/src/ImageSharp/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // Redundant suppressing of SA1413 for Rider. [assembly: diff --git a/src/ImageSharp/ReadOrigin.cs b/src/ImageSharp/ReadOrigin.cs index 76e40755b..e62d2fa2b 100644 --- a/src/ImageSharp/ReadOrigin.cs +++ b/src/ImageSharp/ReadOrigin.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp { diff --git a/tests/ImageSharp.Benchmarks/BenchmarkBase.cs b/tests/ImageSharp.Benchmarks/BenchmarkBase.cs index 412aec6f0..5573b1382 100644 --- a/tests/ImageSharp.Benchmarks/BenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/BenchmarkBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Benchmarks { diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs index fb799cb02..58a97b65e 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeBmp.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs index 170e99041..3488d4405 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeFilteredPng.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs index b04712f7e..f4cfddd88 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeGif.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs index 025e6128b..57ee308e7 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodePng.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs b/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs index 81cabe161..4695d7ca4 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/DecodeTga.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs index f30b19c16..c816aee2e 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmp.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs index a0fa12d67..a7ffbe46e 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeBmpMultiple.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Drawing.Imaging; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs index 57ea71cf8..b6ce67bfd 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeGif.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs index 5f3659c21..179e6946a 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeGifMultiple.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Drawing.Imaging; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs index ceeed0f4e..b3113e6d7 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs index 0a88cf1c9..81b884b75 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodePng.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs index 86eeff384..37cfa314c 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeTga.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs b/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs index b1f497129..197f0804d 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/GetSetPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs b/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs index 906b4c98b..61d18f0e9 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/ImageBenchmarkTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // This file contains small, cheap and "unit test" benchmarks to test MultiImageBenchmarkBase. // Need this because there are no real test cases for the common benchmark utility stuff. diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs index 623cd5696..bb7d08e22 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs index db95d043a..d915cbef0 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs index 3887bcac7..574a08000 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs index 18573d45f..167e93691 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs index 6da398c10..0a6a1d97e 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs index a13ae4de1..dfedf3d89 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs index cd2f411bd..b92a66ebd 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs index fd23688c5..2ac02c7d5 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs index c398e2609..77719673f 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DoubleBufferedStreams.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs index f9ab79feb..0a1fe977f 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs index cf01e5e61..14b240339 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpegMultiple.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Drawing.Imaging; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs index a635f0747..43d4ccf07 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs index 4787f7d6b..2edc3e7af 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Drawing; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs index 99234922d..b46e74777 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Drawing; diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs index b80dc3393..7b47cf94a 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/YCbCrColorConversion.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs b/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs index b8e00191f..96fb2f4e6 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Configs; using BenchmarkDotNet.Jobs; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs index 874eacdab..8f862de54 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/FromRgba32Bytes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs index a4412e0d6..da15da24c 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/FromVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs index 2302db39d..c66acd64a 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/Rgb24Bytes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs index c4e8e3e04..9a0801a6e 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToRgba32Bytes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs index 2e477b7ec..8a5445001 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs index c766b72e6..b090c7dc2 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Bgra32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs index 407fc3f26..145bf9889 100644 --- a/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs +++ b/tests/ImageSharp.Benchmarks/Color/Bulk/ToVector4_Rgba32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs b/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs index c94eeafcc..0c0a63bfb 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorEquality.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs index 8bf9fc9bc..914041e5b 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToCieLabConvert.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs index a63b19505..c6f4c0471 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToHunterLabConvert.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs index f0d5fe49a..c7f78bb08 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToLmsConvert.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs index f0b573ef6..18494f3f6 100644 --- a/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs +++ b/tests/ImageSharp.Benchmarks/Color/ColorspaceCieXyzToRgbConvert.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs index dc2c3d8e5..4b046b3c4 100644 --- a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs +++ b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.LookupTables.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Benchmarks { diff --git a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs index 3c3f2001f..f4f944333 100644 --- a/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs +++ b/tests/ImageSharp.Benchmarks/Color/RgbToYCbCr.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs b/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs index 86a119a6c..21cf10bb7 100644 --- a/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs +++ b/tests/ImageSharp.Benchmarks/Color/RgbWorkingSpaceAdapt.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs b/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs index d0afb1d3e..c962886d1 100644 --- a/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs +++ b/tests/ImageSharp.Benchmarks/Color/YcbCrToRgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Benchmarks { diff --git a/tests/ImageSharp.Benchmarks/Config.cs b/tests/ImageSharp.Benchmarks/Config.cs index 8af7d8f68..f9240779b 100644 --- a/tests/ImageSharp.Benchmarks/Config.cs +++ b/tests/ImageSharp.Benchmarks/Config.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. #if Windows_NT using System.Security.Principal; diff --git a/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs b/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs index 37144bd94..eba4bcbb4 100644 --- a/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs +++ b/tests/ImageSharp.Benchmarks/General/Adler32Benchmark.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/Array2D.cs b/tests/ImageSharp.Benchmarks/General/Array2D.cs index 40c6ab120..16cbb5991 100644 --- a/tests/ImageSharp.Benchmarks/General/Array2D.cs +++ b/tests/ImageSharp.Benchmarks/General/Array2D.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs b/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs index 63b45a583..cd3fc5a06 100644 --- a/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs +++ b/tests/ImageSharp.Benchmarks/General/ArrayReverse.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs index c800db7f8..b6cdcf5f5 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/Abs.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs index 10622f5cd..516c187e3 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampFloat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs index b4b379515..1c58636df 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampInt32IntoByte.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs index 61ebadee7..0b5f31ee4 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ClampVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs index 9de30afba..55e26372b 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoConstant.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs index dba159d95..9da7b9fdf 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/ModuloPowerOfTwoVariable.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs index 1edf28516..ad8f8746c 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/Pow.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs b/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs index 6bb577e61..986276774 100644 --- a/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs +++ b/tests/ImageSharp.Benchmarks/General/BasicMath/Round.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs b/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs index 9fa543eda..96a95942c 100644 --- a/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs +++ b/tests/ImageSharp.Benchmarks/General/CopyBuffers.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs b/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs index 7f85d5aad..2dcf03627 100644 --- a/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs +++ b/tests/ImageSharp.Benchmarks/General/Crc32Benchmark.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs index 255c1d909..12ebbcf4b 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/ITestPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs index 4a5fd8144..7d6c2efed 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromRgba32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs index bd29b3d83..6bb3f38be 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertFromVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs index dfe581c50..f922559f7 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs index 3770aefe6..1a228e3bf 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToRgba32_AsPartOfCompositeOperation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs index 73b35e10d..dc7dea504 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs index b2edd9c9a..c1c4d6e0d 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_ConvertToVector4_AsPartOfCompositeOperation.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs index ae110fb4f..7c51e0547 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Argb32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs index d0c495266..8cb9fb984 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/PixelConversion_Rgba32_To_Bgra32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs index 8e8a01864..958495c3c 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestArgb.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs index 1af7080a3..ff11585e7 100644 --- a/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs +++ b/tests/ImageSharp.Benchmarks/General/PixelConversion/TestRgba.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/StructCasting.cs b/tests/ImageSharp.Benchmarks/General/StructCasting.cs index 6ac50e42c..92f16e16c 100644 --- a/tests/ImageSharp.Benchmarks/General/StructCasting.cs +++ b/tests/ImageSharp.Benchmarks/General/StructCasting.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.CompilerServices; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs b/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs index 45464eb46..ef1b3c98d 100644 --- a/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs +++ b/tests/ImageSharp.Benchmarks/General/Vector4Constants.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs index fdffcc6e4..651ca51ba 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/BitwiseOrUint32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs index c1c3ccffb..4c981bf5c 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/DivFloat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs index 42914e5c2..36a45a482 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/DivUInt32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs index 19f478228..09d14963b 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/Divide.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs index 70be3d681..595df8a59 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/MulFloat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs index 84f67536c..a405f0953 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/MulUInt32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs index 2122e1afa..ebdbddd54 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/Multiply.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using BenchmarkDotNet.Attributes; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs index d63610969..3f5a2ce13 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/Premultiply.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs index 2b52348be..cdf8ad04f 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/ReinterpretUInt32AsFloat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.InteropServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs index 44c8adab9..8a61f49c4 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/SIMDBenchmarkBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs index a5c8dafa2..15c4b8c05 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/UInt32ToSingle.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs index 396f754fe..d9edc91f9 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/VectorFetching.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Benchmarks.General.Vectorization { diff --git a/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs b/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs index faa905a66..a0049f984 100644 --- a/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs +++ b/tests/ImageSharp.Benchmarks/General/Vectorization/WidenBytesToUInt32.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs b/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs index 16b9a47fd..2b6657a22 100644 --- a/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs +++ b/tests/ImageSharp.Benchmarks/PixelBlenders/PorterDuffBulkVsPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Benchmarks/Program.cs b/tests/ImageSharp.Benchmarks/Program.cs index 6ddfff755..8080825d9 100644 --- a/tests/ImageSharp.Benchmarks/Program.cs +++ b/tests/ImageSharp.Benchmarks/Program.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Reflection; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Crop.cs b/tests/ImageSharp.Benchmarks/Samplers/Crop.cs index 7abd8fa79..a62b68557 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Crop.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Crop.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing; using System.Drawing.Drawing2D; diff --git a/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs b/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs index 5c68e6b92..d40201bd8 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/DetectEdges.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs b/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs index c817ab207..354d105e6 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Diffuse.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs b/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs index 57dbbd330..62d580603 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/GaussianBlur.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Resize.cs b/tests/ImageSharp.Benchmarks/Samplers/Resize.cs index 8af41d5a7..63a85c757 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Resize.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Resize.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing; using System.Drawing.Drawing2D; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs b/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs index 8578d3b98..94594c787 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Rotate.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Benchmarks/Samplers/Skew.cs b/tests/ImageSharp.Benchmarks/Samplers/Skew.cs index e791385cf..2758bed7a 100644 --- a/tests/ImageSharp.Benchmarks/Samplers/Skew.cs +++ b/tests/ImageSharp.Benchmarks/Samplers/Skew.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using BenchmarkDotNet.Attributes; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs b/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs index 318dfb643..8155c6a58 100644 --- a/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs +++ b/tests/ImageSharp.Tests.ProfilingSandbox/Program.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Tests.Formats.Jpg; diff --git a/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs b/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs index b50122628..6031227bd 100644 --- a/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Advanced/AdvancedImageExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs b/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs index 8ef69181f..38b94f486 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.CastFrom.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs b/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs index 3c74c7f09..ee1820de7 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.CastTo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs b/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs index a93d5915a..89276014b 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.ConstructFrom.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Color/ColorTests.cs b/tests/ImageSharp.Tests/Color/ColorTests.cs index 0ec10a77d..808a3ecbb 100644 --- a/tests/ImageSharp.Tests/Color/ColorTests.cs +++ b/tests/ImageSharp.Tests/Color/ColorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Color/ReferencePalette.cs b/tests/ImageSharp.Tests/Color/ReferencePalette.cs index 25cabc46b..8e74ab59c 100644 --- a/tests/ImageSharp.Tests/Color/ReferencePalette.cs +++ b/tests/ImageSharp.Tests/Color/ReferencePalette.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs index cfec1ffa3..90d804b41 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs index dc09207cd..f0e97f614 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs index f81009088..d69eac50e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs index 20d330a1e..c76626a0e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs index 785dd1a8e..31ad79b3d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.ColorSpaces.Conversion; using Xunit; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs index 736275dec..a2549e41e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs index d2f906e6f..d5166cc83 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs b/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs index 9dfcbd9c0..76f5bb548 100644 --- a/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs b/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs index 6de0314c3..cff562e81 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Companding/CompandingTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs index 83f7801c8..f0a692362 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/ApproximateColorspaceComparer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs index eeba1b22f..6e68155bd 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs index 5b847b025..0c5341fd6 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs index e52aadc4e..956a249f7 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs index af13c26fa..9ecd7873d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs index 37650c672..f6a25d07d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCmykConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs index 177d434d5..4cda3a8f2 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHslConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs index 29e93f1df..7269475b5 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHsvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs index e72a79103..ab4a0f44f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs index 5f3a8f499..7038843d3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs index 826d7255a..afce3e413 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndLmsConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs index 5388bc668..5c7db6210 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs index 48e461d62..c9fe56d30 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs index 0130e7cc6..9cf79e6a3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs index 37c51356c..087d39323 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs index 0f39d5db2..3b9678b40 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHslConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs index c2d4b3f35..19a200af0 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHsvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs index 759c2f7b3..2b0338d2f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs index 572817174..a1749097b 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs index 7469d5d5f..fa90e5985 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndLmsConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs index 0aacd4a57..667e3d7a7 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs index c01b31255..7c08da633 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs index c1fed0384..1844026b0 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs index 3db47c54a..ddbb09e85 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs index 960f888de..715b282d0 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLchuvAndCmykConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs index 25d1e6d25..b486c9614 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs index 6497a3b9e..b866b6c2c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHslConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs index f21a10db8..681b29518 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHsvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs index 35cc082bb..aa3d0424a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs index 33d1e782d..798b4612b 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs index 170365cc2..0e46c912c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndLmsConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs index 29e306909..26417b739 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs index 943cf9f48..07372aca8 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLuvAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs index 0c9ee268f..818443ea5 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHslConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs index 5ce26d620..18728d0c7 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHsvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs index ad6cfc1b0..015f95b65 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs index a6e47f3ef..11f5fd516 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLinearRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs index 0e7fd1033..82a847893 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndLmsConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs index a2fec52be..424920593 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndRgbConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs index 944647e10..2c0a9a602 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyyAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs index 6dbce8ed7..40a60e47c 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLabConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs index 1781ed74d..5bf463562 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs index 1a8b38a1c..ae5df5130 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLchuvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs index 81208e5c3..336d5a508 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieLuvConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs index a9edfef5b..134a9529f 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndCieXyyConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs index 7efeb4fb9..447856c63 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHslConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs index 3089a2fe1..0591f60d2 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHsvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs index 95a50816e..1ad329eab 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndHunterLabConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs index bb364435a..5f6a3030b 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndLmsConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs index 8d4f82927..a255b9e24 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieXyzAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs index fdbab2f80..dcbaaf7e6 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLchConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs index b62c74331..cdb6c67bf 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieLuvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs index fc440c621..54505428e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyyConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs index ff9498c12..de8ca4409 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndCieXyzConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs index 3e3f48962..61f698a1a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHslConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs index ed5df4dc3..b5d97f442 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHsvConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs index 4062f4df5..eaceae229 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndHunterLabConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs index 549eb235d..fabfea7e2 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CmykAndYCbCrConversionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs index 06110af77..466b2d3c3 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.ColorSpaces; using SixLabors.ImageSharp.ColorSpaces.Conversion; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs index bbd2dda6c..d0b5cf99d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCieXyzConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs index 88c9fec45..fed76101d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndCmykConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs index 8f09d3715..279c57510 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHslConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs index eb4c8c0e8..abd190262 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndHsvConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs index 1eec1d5b4..f2d1f4972 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/RgbAndYCbCrConversionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs index e239f3efe..ae7711e55 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/VonKriesChromaticAdaptationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/HslTests.cs b/tests/ImageSharp.Tests/Colorspaces/HslTests.cs index 409428ffa..84fca1ac2 100644 --- a/tests/ImageSharp.Tests/Colorspaces/HslTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/HslTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs b/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs index f44b8d96a..6bb07867e 100644 --- a/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs b/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs index 3ebf92cbb..2f97207db 100644 --- a/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs b/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs index 9db4ab92c..4639195b6 100644 --- a/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs b/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs index d954c770f..a1c3081c6 100644 --- a/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs b/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs index 2f0ae2f93..788976fbf 100644 --- a/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs b/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs index 9d48d239a..ca50e4a74 100644 --- a/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs b/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs index f802770e9..d6a87a731 100644 --- a/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs +++ b/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.ColorSpaces; diff --git a/tests/ImageSharp.Tests/Common/ConstantsTests.cs b/tests/ImageSharp.Tests/Common/ConstantsTests.cs index 8795e90b8..8180814cd 100644 --- a/tests/ImageSharp.Tests/Common/ConstantsTests.cs +++ b/tests/ImageSharp.Tests/Common/ConstantsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs b/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs index 22240f14e..3e7fce316 100644 --- a/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Text; diff --git a/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs b/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs index 78d47d8d4..6dce48935 100644 --- a/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs +++ b/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs b/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs index 5c09e7110..890a14faa 100644 --- a/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Common/StreamExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Common/Tuple8.cs b/tests/ImageSharp.Tests/Common/Tuple8.cs index a8d3f1034..957312da0 100644 --- a/tests/ImageSharp.Tests/Common/Tuple8.cs +++ b/tests/ImageSharp.Tests/Common/Tuple8.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Runtime.InteropServices; diff --git a/tests/ImageSharp.Tests/ConfigurationTests.cs b/tests/ImageSharp.Tests/ConfigurationTests.cs index 368f47280..b18d04834 100644 --- a/tests/ImageSharp.Tests/ConfigurationTests.cs +++ b/tests/ImageSharp.Tests/ConfigurationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs b/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs index d991fe7cf..320a8bba8 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs b/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs index c721d15ff..b426f4404 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/FileTestBase.cs b/tests/ImageSharp.Tests/FileTestBase.cs index c862e8e93..93024197b 100644 --- a/tests/ImageSharp.Tests/FileTestBase.cs +++ b/tests/ImageSharp.Tests/FileTestBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs index 6d07d84df..3f767620a 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs index 8f6125533..b05486e35 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs index 232df080d..125e40194 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpFileHeaderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Formats.Bmp; diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs index 2082b7a8d..b14956379 100644 --- a/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs index a2d4ebd1a..c10cd8d29 100644 --- a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs +++ b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs index 62d9bb2b9..63aae5c55 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs index 69e06490c..f8efe700f 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifEncoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs index d3434864c..61caaad66 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifFrameMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Gif; using Xunit; diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs index ed028fee8..533b1ed30 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/GifMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs index de172ec51..6ec1162c4 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifGraphicControlExtensionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Gif; diff --git a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs index 88f9c7d8a..db88cf5b3 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifImageDescriptorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Gif; diff --git a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs index f9ad1f30d..9773bcd61 100644 --- a/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Gif/Sections/GifLogicalScreenDescriptorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Gif; diff --git a/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs b/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs index cf94e468b..98fbac7c0 100644 --- a/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs +++ b/tests/ImageSharp.Tests/Formats/ImageFormatManagerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs index 655f12c85..d033e17ff 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/AdobeMarkerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs index a18775ac1..193fead8e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // Uncomment this to turn unit tests into benchmarks: // #define BENCHMARKING diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs index c85c83d2c..348266269 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // Uncomment this to turn unit tests into benchmarks: // #define BENCHMARKING diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs index c8befba3a..c22db3a1c 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg.Components; using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs index 3d8a3963e..2c1239883 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs b/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs index 908dc35dd..bb857f1ed 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/GenericBlock8x8Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs index 9fb0b6ae2..0f25d11d4 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JFifMarkerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; using SixLabors.ImageSharp.Metadata; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs index 2bc404e5b..860f9c396 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs index d7c0b4e23..f0a64e6af 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Baseline.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Microsoft.DotNet.RemoteExecutor; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs index 356e3f18b..c91aad7e7 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs index ce45f9485..9b6643f7f 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs index 7e556c997..e29d8f158 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Progressive.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Microsoft.DotNet.RemoteExecutor; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index 77265c60e..e69ba98f9 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs index 2c52baeda..6c9a74463 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs index be5974cb4..79e3c448f 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegFileMarkerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs index 47f687311..12e1ec22b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegImagePostProcessorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs index bd7abf8fc..98558a726 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg; using Xunit; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs index bed4374bd..a267d437b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/LibJpegToolsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs index b08923b70..94e3af3a9 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Text; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs index a938ee1b0..0c17ac7db 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ProfileResolverTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Text; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs index 87567751a..bfa0966af 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.AccurateDCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg.Components; using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs index 3850b29e3..770f0cbf7 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.FastFloatingPointDCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // ReSharper disable InconsistentNaming using SixLabors.ImageSharp.Formats.Jpeg.Components; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs index 852cc322b..8bf1d7155 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.StandardIntegerDCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs index c8a2cd1f7..d3077a6e3 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit.Abstractions; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs index 60fcca523..fad2f06b1 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/SpectralJpegTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs index 5d4e6f9ed..983faddf1 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs index 2ca6c1615..6f6032ee2 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs index 9f5e362b4..6ed7c15ae 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.SpectralData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs index bdc9e0776..60187a860 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs index 14041ca8d..e70bdc8cc 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.AccurateDCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs index fc1cb03a7..6bb76ac19 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.GT_FloatingPoint_DCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs index 2abdf91fb..3d113ffd0 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs index 70a8db867..45159ba6f 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.StandardIntegerDCT.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs index 90c778c4e..2c673f30e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs index c90ed1b6e..a6d4e917b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/SpanExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs index 8b2282d08..10717dfcf 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/VerifyJpeg.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs index 450c2b225..cf50ba0b3 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/ZigZagTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Jpeg.Components; using Xunit; diff --git a/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs b/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs index 9c5f0f6a9..26fbe57c3 100644 --- a/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/Adler32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Formats.Png.Zlib; diff --git a/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs b/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs index 56743c3ae..a9a4ba318 100644 --- a/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/Crc32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Formats.Png.Zlib; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs index fcffd399e..34014e977 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngChunkTypeTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers.Binary; using System.Text; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs index 52393a7f1..6284191f3 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.Chunks.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs index ed28a2646..5b6adfe1a 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using Microsoft.DotNet.RemoteExecutor; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs index fa63f73e0..31fd67601 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.Chunks.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers.Binary; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs index 93ea73eb4..83ac400f4 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // ReSharper disable InconsistentNaming using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs index a0a377348..bea116b2b 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs index 1cd9fe5c2..f1fdd8332 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngSmokeTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Formats.Png; diff --git a/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs index 4f250d07b..5080b0b12 100644 --- a/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Png/PngTextDataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Formats.Png; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs index 34bd52c8b..5fb15541e 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Microsoft.DotNet.RemoteExecutor; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs index 99b3fe8fe..22c5d20b3 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaEncoderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs index a305e58b7..beec043c7 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaFileHeaderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs index 3bbf1b187..af93884fd 100644 --- a/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs +++ b/tests/ImageSharp.Tests/Formats/Tga/TgaTestUtils.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/GlobalSuppressions.cs b/tests/ImageSharp.Tests/GlobalSuppressions.cs index 2b23eb6c1..0411ce883 100644 --- a/tests/ImageSharp.Tests/GlobalSuppressions.cs +++ b/tests/ImageSharp.Tests/GlobalSuppressions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // This file is used by Code Analysis to maintain SuppressMessage // attributes that are applied to this project. diff --git a/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs b/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs index b5e8a12e6..72ec35538 100644 --- a/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs +++ b/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.Processing; diff --git a/tests/ImageSharp.Tests/GraphicsOptionsTests.cs b/tests/ImageSharp.Tests/GraphicsOptionsTests.cs index 1a267bf49..599838d42 100644 --- a/tests/ImageSharp.Tests/GraphicsOptionsTests.cs +++ b/tests/ImageSharp.Tests/GraphicsOptionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities; diff --git a/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs b/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs index f2eb1be1e..27689f681 100644 --- a/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ImageMathsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs b/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs index 41ddaa0ed..9166b5ac5 100644 --- a/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ParallelExecutionSettingsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs b/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs index 5f7b31127..c93eb41c2 100644 --- a/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs +++ b/tests/ImageSharp.Tests/Helpers/ParallelRowIteratorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs b/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs index 64a25c227..711dd9177 100644 --- a/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs +++ b/tests/ImageSharp.Tests/Helpers/RowIntervalTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs b/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs index 6ab1cb287..0dbbaa53f 100644 --- a/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs +++ b/tests/ImageSharp.Tests/Helpers/TolerantMathTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs b/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs index 1871203da..dfce62ec2 100644 --- a/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs +++ b/tests/ImageSharp.Tests/Helpers/UnitConverterHelperTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Common.Helpers; using Xunit; diff --git a/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs b/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs index 89206dbca..c3b8e79ee 100644 --- a/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs +++ b/tests/ImageSharp.Tests/Helpers/Vector4UtilsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs b/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs index 14fad2bd6..73010fe2c 100644 --- a/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs +++ b/tests/ImageSharp.Tests/IO/DoubleBufferedStreamReaderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs b/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs index 30a46b60a..27aaabee2 100644 --- a/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs +++ b/tests/ImageSharp.Tests/IO/LocalFileSystemTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageCloneTests.cs b/tests/ImageSharp.Tests/Image/ImageCloneTests.cs index fc709a2ee..5efbe2cba 100644 --- a/tests/ImageSharp.Tests/Image/ImageCloneTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageCloneTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs index 303801a07..ecbc331b2 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.Generic.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs index cf92b42a3..92109ed47 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.NonGeneric.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs index 9fb1bf37a..06cd7defc 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameCollectionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageFrameTests.cs b/tests/ImageSharp.Tests/Image/ImageFrameTests.cs index 998aabc70..d4aef7538 100644 --- a/tests/ImageSharp.Tests/Image/ImageFrameTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageFrameTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Image/ImageRotationTests.cs b/tests/ImageSharp.Tests/Image/ImageRotationTests.cs index 84778e845..4df823801 100644 --- a/tests/ImageSharp.Tests/Image/ImageRotationTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageRotationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Image/ImageSaveTests.cs b/tests/ImageSharp.Tests/Image/ImageSaveTests.cs index 0a56dca09..f77fc7921 100644 --- a/tests/ImageSharp.Tests/Image/ImageSaveTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageSaveTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs index f923832ab..0ec4d500c 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.DetectFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs index c7dbbc2d8..3d1cff978 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs b/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs index 5941854c1..d0c9805ce 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.ImageLoadTestBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs b/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs index 87ca1fb95..a4044b906 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.LoadPixelData.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs index c3ee5b198..7478f76f0 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_PassLocalConfiguration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs index 8a7f87ff2..5f7137e15 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs index 7cee11983..d275a11d8 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_PassLocalConfiguration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs index 97ae94948..0f46bfa5b 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromBytes_UseGlobalConfiguration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs index dbe1410c2..c7737ef8b 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_PassLocalConfiguration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs index d8d7129df..d462abf7b 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_ThrowsRightException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs index ab3a87a31..6cc3d6acd 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FromStream_UseDefaultConfiguration.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Save.cs b/tests/ImageSharp.Tests/Image/ImageTests.Save.cs index 99feb8177..ee46807e5 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Save.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Save.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs index f1aaf0ae3..2b30d9459 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Image/ImageTests.cs b/tests/ImageSharp.Tests/Image/ImageTests.cs index 54de9b55f..b7c6b3835 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs b/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs index cd66be363..afa217bbc 100644 --- a/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs +++ b/tests/ImageSharp.Tests/Image/LargeImageIntegrationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs b/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs index 1f6a3c6bf..1a480702f 100644 --- a/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs +++ b/tests/ImageSharp.Tests/Image/MockImageFormatDetector.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Formats; diff --git a/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs b/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs index 22358e173..1ae217f0f 100644 --- a/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs +++ b/tests/ImageSharp.Tests/Image/NoneSeekableStream.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/ImageInfoTests.cs b/tests/ImageSharp.Tests/ImageInfoTests.cs index 07c7293a7..dd222f2c3 100644 --- a/tests/ImageSharp.Tests/ImageInfoTests.cs +++ b/tests/ImageSharp.Tests/ImageInfoTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata; diff --git a/tests/ImageSharp.Tests/Issues/Issue594.cs b/tests/ImageSharp.Tests/Issues/Issue594.cs index d9a44f870..9b9dbc98e 100644 --- a/tests/ImageSharp.Tests/Issues/Issue594.cs +++ b/tests/ImageSharp.Tests/Issues/Issue594.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs b/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs index a241921ec..939e5898c 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/ArrayPoolMemoryAllocatorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs b/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs index 933dfec74..b6754f392 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/BufferExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs b/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs index 391d654d6..1124b6439 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/BufferTestSuite.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs b/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs index 18a2bf030..8e7b30567 100644 --- a/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs +++ b/tests/ImageSharp.Tests/Memory/Allocators/SimpleGcMemoryAllocatorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.InteropServices; diff --git a/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs b/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs index c692f7c9d..549ecb7f4 100644 --- a/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs +++ b/tests/ImageSharp.Tests/Memory/Buffer2DTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs index 0eb4fe0ec..0dfc5f36b 100644 --- a/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs +++ b/tests/ImageSharp.Tests/Memory/BufferAreaTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; using Xunit; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs index 4e5ce8823..0eb219593 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndex.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs index a9a6d9860..6fecb1988 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupIndexTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs index 1ce7af0d1..e9094fcca 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.Allocate.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs index acca894a0..0dff35957 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.CopyTo.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs index a1f3f7ede..61b9f7a89 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.SwapOrCopyContent.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs index 654c06734..771d64b38 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.View.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs index 3522d5a92..3ab5797dd 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs index 644e86665..20cf66d42 100644 --- a/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs +++ b/tests/ImageSharp.Tests/Memory/DiscontiguousBuffers/MemoryGroupTestsBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Memory/TestStructs.cs b/tests/ImageSharp.Tests/Memory/TestStructs.cs index d95b4edf6..62319156f 100644 --- a/tests/ImageSharp.Tests/Memory/TestStructs.cs +++ b/tests/ImageSharp.Tests/Memory/TestStructs.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs b/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs index 000b247e2..3f8904904 100644 --- a/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs +++ b/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Metadata; diff --git a/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs b/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs index 5e81e2d9c..a82ea7017 100644 --- a/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs +++ b/tests/ImageSharp.Tests/Metadata/ImageMetadataTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata.Profiles.Exif; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs index 5b927e2f9..466568bfe 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs index d55fca3c5..401546e5c 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifReaderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs index 95f927de0..2b00cc5b4 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifTagDescriptionAttributeTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs index 1949e3eaa..5fe1b51ba 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifValueTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs index be5fb243b..898c69356 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs index 69ad26220..5451cbf37 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderCurvesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs index 9f07d4759..aa24c2673 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderLutTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs index b7a0d8a13..fe31d74ac 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMatrixTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs index 95ab5226c..3fbef46de 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderMultiProcessElementTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs index 98cbbd4e9..cf4cf80d1 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderNonPrimitivesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs index 70fe79baf..2b2b564a7 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderPrimitivesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs index e5fb6114a..ea77004ed 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTagDataEntryTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs index b2f1c0ed4..7c5070af1 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataReader/IccDataReaderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs index 05f5a271b..593eed97c 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterCurvesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs index 27f8314bb..e48d89ddb 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs index 1e40d9b7d..711e3426d 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests1.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs index 30f953757..ecfbad395 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterLutTests2.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs index 9a92cea95..4346265c7 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMatrixTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs index 248ae034a..bf8b7d069 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterMultiProcessElementTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs index 5d72e403b..a918adc3f 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterNonPrimitivesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs index 83af8fd31..1dc37a195 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterPrimitivesTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs index 7dec70b6c..6325f26ce 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTagDataEntryTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs index 853dc4daf..9fa3e644c 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/DataWriter/IccDataWriterTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs index 5504a4331..a40082f78 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccProfileTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs index 4a303723e..e9d960ebb 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccReaderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs index a6cbe2acc..0d4495912 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/IccWriterTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs index 0cdcfd6df..b06a52964 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/ICC/Various/IccProfileIdTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index cb1fdace8..9e763536b 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Numerics/RationalTests.cs b/tests/ImageSharp.Tests/Numerics/RationalTests.cs index 761543f89..46efe6527 100644 --- a/tests/ImageSharp.Tests/Numerics/RationalTests.cs +++ b/tests/ImageSharp.Tests/Numerics/RationalTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs b/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs index c171232d7..ed9cf7e30 100644 --- a/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs +++ b/tests/ImageSharp.Tests/Numerics/SignedRationalTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs b/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs index a1c9ac341..784f9821f 100644 --- a/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/A8Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs index d4cb1b002..c8cf0cf11 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Argb32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs index 065d87b61..110bdc2f0 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs index 988e3f5db..8c53e117f 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgr565Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs index 9d9a0dff2..195f92b0e 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs index 5c032d79f..776f5cdc6 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgra4444Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs index 8be964c66..cdc03b292 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Bgra5551Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs index 688617bdf..bb7e82e50 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Byte4Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs b/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs index 8d60a7021..e59cb3344 100644 --- a/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/HalfSingleTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs index 10325e510..b59e598b4 100644 --- a/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/HalfVector2Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs index 38efe1ff5..27726e9a3 100644 --- a/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/HalfVector4Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs b/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs index 07424602a..4204fc2f7 100644 --- a/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/L16Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs b/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs index d4fc794d0..09d67ab9a 100644 --- a/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/L8Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs b/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs index 08b054f63..f36d9765c 100644 --- a/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/La16Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs index 4fe322a6e..d3fdbd085 100644 --- a/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/La32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs index 62baa56ef..9278a8a48 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte2Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs index 6d52ea2d1..9b754ecc2 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedByte4Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs index a5be4fc45..0b346b256 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort2Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs index 7ef933c6e..8166421a1 100644 --- a/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/NormalizedShort4Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs index 4efb066dd..548e2f4d8 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs index b8d9e50da..931af1568 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffCompositorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelBlenders { diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs index e939761da..27674bc50 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats.PixelBlenders; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs index 67e70d98a..a09974e8d 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTestsTPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs index d93f72d0c..6fda9dbba 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.ReferenceImplementations.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs index eb5382881..3de6804dc 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelConverterTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats.Utils; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs index 23bed6a01..aa39588f9 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs index b3c617059..1d4d58341 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Argb32OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs index 45a805ec0..712b1495b 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgr24OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs index 96d1f329c..7f248b682 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra32OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs index b6af8ffa8..9a0e51563 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Bgra5551OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs index 4855351c3..6acd439f2 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L16OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs index 6d02cbd3e..a16f8c66d 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.L8OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs index 4b1954409..07ec79777 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La16OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs index 08ba9ce16..bd8bb40da 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.La32OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs index 39760bffa..07bf838ee 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb24OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using Xunit; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs index 634627b0b..7ab677766 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgb48OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs index 650196fba..e4f1fa462 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba32OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Buffers; using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs index 232152e63..a0ef2f765 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.Rgba64OperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs index ed210f8a7..c552fb359 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.RgbaVectorOperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs index be31c7f76..3c4b9dc79 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs index 2bfd9e99d..e3e65798a 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rg32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs index 8634dfe00..926f820c7 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs index 6c887aaad..835779e68 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgb48Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs index cee4ecd92..ba222c230 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgba1010102Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs index b64aeeff2..0eb95d4cb 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgba32Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs index 0b29d4142..8d29c8e2d 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Rgba64Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs b/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs index 99d766ad6..de6cc09de 100644 --- a/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/RgbaVectorTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using System.Runtime.CompilerServices; diff --git a/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs index 0d9721854..b65299ccc 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Short2Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs index 6eff0f5b8..8da95e0f5 100644 --- a/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/Short4Tests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs b/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs index 0a85a94c4..b8c778621 100644 --- a/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/UnPackedPixelTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs b/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs index 5df77bb67..c95d70532 100644 --- a/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs +++ b/tests/ImageSharp.Tests/Primitives/ColorMatrixTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs b/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs index dc73ccf76..2b37b24b7 100644 --- a/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs +++ b/tests/ImageSharp.Tests/Primitives/DenseMatrixTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using Xunit; diff --git a/tests/ImageSharp.Tests/Primitives/PointFTests.cs b/tests/ImageSharp.Tests/Primitives/PointFTests.cs index 1cc468965..c09cfe50c 100644 --- a/tests/ImageSharp.Tests/Primitives/PointFTests.cs +++ b/tests/ImageSharp.Tests/Primitives/PointFTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/PointTests.cs b/tests/ImageSharp.Tests/Primitives/PointTests.cs index 7d4aea01e..ffa025f56 100644 --- a/tests/ImageSharp.Tests/Primitives/PointTests.cs +++ b/tests/ImageSharp.Tests/Primitives/PointTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs b/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs index 774f7c379..66791fd3c 100644 --- a/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs +++ b/tests/ImageSharp.Tests/Primitives/RectangleFTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/RectangleTests.cs b/tests/ImageSharp.Tests/Primitives/RectangleTests.cs index 2e306842c..94c45ed36 100644 --- a/tests/ImageSharp.Tests/Primitives/RectangleTests.cs +++ b/tests/ImageSharp.Tests/Primitives/RectangleTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/SizeFTests.cs b/tests/ImageSharp.Tests/Primitives/SizeFTests.cs index 2bdbe72b3..1db4d3863 100644 --- a/tests/ImageSharp.Tests/Primitives/SizeFTests.cs +++ b/tests/ImageSharp.Tests/Primitives/SizeFTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Primitives/SizeTests.cs b/tests/ImageSharp.Tests/Primitives/SizeTests.cs index 4dddb63d4..e011e417b 100644 --- a/tests/ImageSharp.Tests/Primitives/SizeTests.cs +++ b/tests/ImageSharp.Tests/Primitives/SizeTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs b/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs index 766f78e95..ae9befba0 100644 --- a/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs +++ b/tests/ImageSharp.Tests/Processing/BaseImageOperationsExtensionTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.ComponentModel.DataAnnotations; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs b/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs index 674d706b8..8efac7593 100644 --- a/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs +++ b/tests/ImageSharp.Tests/Processing/Binarization/AdaptiveThresholdTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs b/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs index b92941162..5bdfda02e 100644 --- a/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs +++ b/tests/ImageSharp.Tests/Processing/Binarization/BinaryThresholdTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Binarization; diff --git a/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs b/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs index ad48c299c..0bbb962fc 100644 --- a/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs +++ b/tests/ImageSharp.Tests/Processing/Binarization/OrderedDitherFactoryTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing.Processors.Dithering; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs index 50c4169fc..eb176f5f0 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/BoxBlurTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs index 33c83ad63..a0e9be110 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/DetectEdgesTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs index 903dfdfa8..26454fcb6 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/GaussianBlurTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs b/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs index f686a889c..d264e82e1 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/GaussianSharpenTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs b/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs index 23c89b5bc..73f6a3f47 100644 --- a/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs +++ b/tests/ImageSharp.Tests/Processing/Convolution/Processors/LaplacianKernelFactoryTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Processing.Processors.Convolution; diff --git a/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs b/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs index b97d91c44..9f0a80453 100644 --- a/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs +++ b/tests/ImageSharp.Tests/Processing/Dithering/DitherTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs b/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs index 412e7393c..5bc6256d9 100644 --- a/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs +++ b/tests/ImageSharp.Tests/Processing/Effects/BackgroundColorTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs b/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs index b63bad4e8..2fd7ac7ef 100644 --- a/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs +++ b/tests/ImageSharp.Tests/Processing/Effects/OilPaintTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs b/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs index 9d359d77b..33061e1e4 100644 --- a/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Effects/PixelateTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Effects; diff --git a/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs b/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs index b3cc94894..5f673b9d2 100644 --- a/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs +++ b/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs index 3f8cb45ea..f87ace189 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs index 384d01b4c..75a9072c5 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs index efa6128ac..e65b67815 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs b/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs index 4ed75aba8..e181999fa 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs index 332ecee0f..15945e468 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs index 407d10717..36c2ff769 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs b/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs index a3d004e40..9d85af589 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs b/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs index 8f6dba662..e773a177f 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs index 64973b01f..798c0e055 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs index 355415027..cbf44e4c6 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/LightnessTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs index f51bea16f..e7d289ea5 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Tests.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs b/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs index 6771ec271..8e8b4636c 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs index 985b1d9a3..2cfd8519d 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs index f7b4f8177..b61a12102 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs index 9460b6099..c7f85b732 100644 --- a/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs +++ b/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Filters; diff --git a/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs b/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs index b7c659ab7..cd0a65ad5 100644 --- a/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs +++ b/tests/ImageSharp.Tests/Processing/ImageOperationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs b/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs index de3bbb7c7..c206938a2 100644 --- a/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs +++ b/tests/ImageSharp.Tests/Processing/ImageProcessingContextTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Moq; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs b/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs index 681d6e3b4..1c1da6f19 100644 --- a/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs +++ b/tests/ImageSharp.Tests/Processing/Normalization/HistogramEqualizationTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs b/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs index ddafa0df9..8bc0a2c97 100644 --- a/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs +++ b/tests/ImageSharp.Tests/Processing/Overlays/GlowTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs b/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs index 1c9732a70..32e8ba384 100644 --- a/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Overlays/VignetteTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Overlays; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs index b1113f5fe..24e52d5d0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryDitherTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs index 909105bad..c5b7808cc 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Binarization/BinaryThresholdTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs index 9a9fec4fe..7e0676aab 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/Basic1ParameterConvolutionTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs index 1664693e9..490a6ea49 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BokehBlurTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs index f25850e83..529a4b49c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/BoxBlurTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs index f6efeb2d6..dbbf624db 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/DetectEdgesTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs index 02678c0fc..31b3d20db 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianBlurTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs index 1906d283e..7d3e91803 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Convolution/GaussianSharpenTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs index 71e707c54..adc3c381a 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Dithering/DitherTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs index b716bccc3..b29e45221 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/BackgroundColorTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs index 5b5c32d8f..0d68a860d 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/OilPaintTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs index 64dc4d7a1..919cb3137 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelShaderTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs index 278f703e8..2173cbef8 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Effects/PixelateTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs index aadcdd0a0..fdcc3c6f7 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/BlackWhiteTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs index 438a92b8f..d7e5b13cc 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/BrightnessTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs index d71a6d9e9..a007f7194 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/ColorBlindnessTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs index d2edfc935..25fe9c84c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/ContrastTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs index a14460faf..535179cb1 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/FilterTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs index 04dabec82..279b699ee 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/GrayscaleTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs index dd008957b..3538f0dba 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/HueTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs index d88fb9c4e..a2e0b0b4b 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/InvertTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs index c6e2e78d5..f21d45836 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/KodachromeTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs index 2e10c8c58..c924ddc4f 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/LightnessTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs index bf535decd..a7ef2f862 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/LomographTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs index 4014de635..64025a6fb 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/OpacityTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs index ba8ccf2a1..8be43efa9 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/PolaroidTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs index e6d519ad0..91c6e4af8 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/SaturateTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs index 4d822288c..af2c2136a 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Filters/SepiaTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs index e40493ac9..f0d6b784b 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Overlays/GlowTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs b/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs index cc48fd40a..fa4d422b1 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Overlays/OverlayTestBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs index 8572e754f..6eccde4bc 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Overlays/VignetteTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs index fa6f27c92..2b4460429 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/OctreeQuantizerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs index b33a24515..0df498cd1 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/PaletteQuantizerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs index c498b9bc7..a25eca5b0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/QuantizerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs index 48cb133b2..8881aa9ad 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Quantization/WuQuantizerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs index 4bf6e91b2..379f74d09 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AffineTransformTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs index 51a11919c..44f88c3a2 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/AutoOrientTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Metadata.Profiles.Exif; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs index 1fd7ecf0f..78c35fa9b 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/CropTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs index ea85c4ef5..16668fb20 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/EntropyCropTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs index ff15b2859..c094febc9 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/FlipTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs index 54abb7990..2ea833640 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/PadTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs index 62b7cfa68..4691fc82b 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResamplerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs index 42f029a00..ceee3e7e0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeHelperTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs index 405bf9fe5..da567f18c 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.ReferenceKernelMap.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs index f61b4e18c..991bca80e 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeKernelMapTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs index 5feb8e9f0..51b8ee026 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs index b9c3502c8..398039e43 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateFlipTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs index 79c259c1e..1e888a51a 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/RotateTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs index 7591f2384..2fd87de29 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/SkewTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs index bf3d8e3ff..1d28df8e2 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/AffineTransformBuilderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs index 4eca2ccbd..50fff725b 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/AutoOrientTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs index 24d94f5b9..9fa75448b 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/CropTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs index 537d619da..f2ca8dee5 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/EntropyCropTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs index d6264540c..3f6e26b8e 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/FlipTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs index 2fc9c8aea..3f49b0f02 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/PadTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs index 6c6e4a015..d95992d6b 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformBuilderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs index afe08f6f6..2fd5f2a7d 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ProjectiveTransformTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs index 1f6da58f1..bf412739d 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/ResizeTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs index ebd17a9c3..379d39966 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/RotateFlipTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs index 42aa8aadb..6f7dbd9de 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/RotateTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs index fe22e7b87..de276b427 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/SkewTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Processors.Transforms; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs b/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs index 8b64492c0..4306732e8 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/TransformBuilderTestBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs b/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs index 8d2b493a1..81c415c06 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/TransformsHelpersTest.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs index 7d16bdf33..78fb99802 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegProfilingBenchmarks.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs index 87c0348ec..2d67b0ebd 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveProfilingBenchmarks.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs index 9579b24c6..5adec670f 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. // Uncomment to enable local profiling benchmarks. DO NOT PUSH TO MAIN! // #define PROFILING diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs index 26c34ba00..7d1a844d9 100644 --- a/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs +++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/ResizeProfilingBenchmarks.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs index a4e022a1a..9a8d8351b 100644 --- a/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs +++ b/tests/ImageSharp.Tests/Quantization/PixelSamplingStrategyTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs index 7ec63064c..7d57d8c49 100644 --- a/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs +++ b/tests/ImageSharp.Tests/Quantization/QuantizedImageTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs index 0457de35e..71a8702c7 100644 --- a/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs +++ b/tests/ImageSharp.Tests/Quantization/WuQuantizerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using SixLabors.ImageSharp.Advanced; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs index 41925c2e0..41faf235e 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataArray.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs index 9b6e1eb23..1c47492e4 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataCurves.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs index e84f393c2..cf838d82e 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataLut.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs index 1f5558659..0704e9136 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMatrix.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs index 913d1f5c6..0a0dcc6bb 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataMultiProcessElements.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Metadata.Profiles.Icc; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs index d0e5eb21e..0b8bbf15d 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataNonPrimitives.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Globalization; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs index 43c595898..0bf62a83e 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataPrimitives.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs index 4aa4d48e2..c1cedcc79 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataProfiles.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs index 7df3ed21d..8953f5e07 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs +++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Globalization; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestFile.cs b/tests/ImageSharp.Tests/TestFile.cs index 91f1dbe0e..338ccffbe 100644 --- a/tests/ImageSharp.Tests/TestFile.cs +++ b/tests/ImageSharp.Tests/TestFile.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Concurrent; diff --git a/tests/ImageSharp.Tests/TestFileSystem.cs b/tests/ImageSharp.Tests/TestFileSystem.cs index 7779e8d6e..960f13637 100644 --- a/tests/ImageSharp.Tests/TestFileSystem.cs +++ b/tests/ImageSharp.Tests/TestFileSystem.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestFontUtilities.cs b/tests/ImageSharp.Tests/TestFontUtilities.cs index af648431f..0da2e0618 100644 --- a/tests/ImageSharp.Tests/TestFontUtilities.cs +++ b/tests/ImageSharp.Tests/TestFontUtilities.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.IO; diff --git a/tests/ImageSharp.Tests/TestFormat.cs b/tests/ImageSharp.Tests/TestFormat.cs index f3f4daa55..a609a9205 100644 --- a/tests/ImageSharp.Tests/TestFormat.cs +++ b/tests/ImageSharp.Tests/TestFormat.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 8815d8367..4b5dffdfd 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs index ab7631066..b2f390dcd 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ApproximateFloatComparer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs b/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs index 8dcc90640..e8a07a76a 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ArrayHelper.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs index 65832660b..4e7ead62e 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/GroupOutputAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs index f945feafa..0cf76a389 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/ImageDataAttributeBase.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs index 398963e63..03113e133 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBasicTestPatternImagesAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs index cbd61e052..0fa109933 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithBlankImagesAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs index 74c7b3851..6c79b9541 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs index 98ad54424..92556024d 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithFileCollectionAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs index 02b2c7d62..8af058dc7 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithMemberFactoryAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs index 0eb1b22d6..9dbfdce56 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithSolidFilledImagesAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs index 9c03c9983..e7da40aa3 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Attributes/WithTestPatternImagesAttribute.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs b/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs index 89264bdbe..c00443668 100644 --- a/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/BasicSerializer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs b/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs index 8d06c949a..aababf434 100644 --- a/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/GraphicsOptionsComparer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs index e1ef383f3..c6bcef461 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ExactImageComparer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs index 005ae5825..e1cbf12ac 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDifferenceIsOverThresholdException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs index 2b4b1963c..7f4328959 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImageDimensionsMismatchException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison { diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs index d0deed371..ebfa47c5b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/Exceptions/ImagesSimilarityException.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison { diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs index 76ee3d501..bd7c71f0d 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageComparer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs index 0e6271513..f6a233034 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/ImageSimilarityReport.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs index 2c1363a07..ba60633ac 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/PixelDifference.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs index 9ab2ce2a3..e87a83e4f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageComparison/TolerantImageComparer.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs index 0cd25b10f..409dea1c5 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BasicTestPatternProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs index 1e3b93874..5663934c2 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/BlankProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs index 4b7d1b89f..78567f926 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/FileProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Concurrent; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs index 762ffdb05..7f1a481ee 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/ITestImageProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests { diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs index 4bbe4dc78..68840d988 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/MemberMethodProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs index 54a4877e6..3b496d5e6 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/SolidProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Memory; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs index 606e12ada..da641a296 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Reflection; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs index dda7595cf..f186ed318 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestPatternProvider.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs index 386a0477f..fcde6273f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ImagingTestCaseUtility.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs b/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs index a04e5384e..d00dc67df 100644 --- a/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs +++ b/tests/ImageSharp.Tests/TestUtilities/MeasureFixture.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs index c76934383..eb840231c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs +++ b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs index a146e260c..4594e5b1f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/MagickReferenceDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs index 92c4cecd6..6d6e7bd76 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs index 05a1fbf84..4971ca037 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceDecoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs index 34bec526b..e68f53909 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingReferenceEncoder.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Drawing.Imaging; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs b/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs index 27088d928..859a834ec 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Numerics; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs index 592c47f9c..6e204e2d4 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.Formats.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs index f2e9fca5c..1375b5763 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestEnvironment.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Diagnostics; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs index f643f90da..073db1efe 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestImageExtensions.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs b/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs index 709e9755d..ab9611d2f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestMemoryAllocator.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs b/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs index 7e936fb65..20078564a 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestMemoryManager.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Buffers; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs b/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs index d4c63c011..818876065 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestPixel.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestType.cs b/tests/ImageSharp.Tests/TestUtilities/TestType.cs index c950b19b5..f131d7a0f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestType.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestType.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit.Abstractions; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs b/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs index 5743682f6..39ebf7f15 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestUtils.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs b/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs index 484ec021b..055083ae2 100644 --- a/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs +++ b/tests/ImageSharp.Tests/TestUtilities/TestVector4.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Numerics; using Xunit.Abstractions; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs index 4798e953a..28bd1cb44 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/BasicSerializerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs index 6bf435b51..03d067116 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/GroupOutputTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs index 6464d0af4..9983ee3c8 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ImageComparerTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; using System.Linq; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs index 511fd1cc2..6cb78e541 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/MagickReferenceCodecTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using Xunit; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs index 31681e442..578af884b 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceDecoderBenchmarks.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs index dd777ba6f..5472f1e33 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/SystemDrawingReferenceCodecTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.PixelFormats; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs index 8431b8556..e72d953ac 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestEnvironmentTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs index 0a48c4555..563789209 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs index 0390457a0..439709566 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestImageProviderTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Concurrent; diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs index 27f43d004..c8a2c6c4c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/TestUtilityExtensionsTests.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; diff --git a/tests/ImageSharp.Tests/VectorAssert.cs b/tests/ImageSharp.Tests/VectorAssert.cs index 92bc1e45d..144681af7 100644 --- a/tests/ImageSharp.Tests/VectorAssert.cs +++ b/tests/ImageSharp.Tests/VectorAssert.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.Collections.Generic; From a9ca7f3c25bbe0a2c581c3412e6500e5f4f8b32d Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 7 Jun 2020 23:12:17 +0100 Subject: [PATCH 092/130] Add Open Collective Links --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/README.md b/README.md index 98607c981..141311e97 100644 --- a/README.md +++ b/README.md @@ -94,3 +94,73 @@ Please... Spread the word, contribute algorithms, submit performance improvement - [Anton Firsov](https://github.com/antonfirsov) - [Scott Williams](https://github.com/tocsoft) - [Brian Popow](https://github.com/brianpopow) + +### Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/imagesharp#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +### Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/imagesharp#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 51cbd0a317f8fc71c15208695afa8329fd36956e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 7 Jun 2020 23:41:26 +0100 Subject: [PATCH 093/130] Split out bug report templates --- .../ISSUE_TEMPLATE/commercial-bug-report.md | 33 +++++++++++++++++++ .../{bug-report.md => oss-bug-report.md} | 3 +- ImageSharp.sln | 6 ++-- 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/commercial-bug-report.md rename .github/ISSUE_TEMPLATE/{bug-report.md => oss-bug-report.md} (95%) diff --git a/.github/ISSUE_TEMPLATE/commercial-bug-report.md b/.github/ISSUE_TEMPLATE/commercial-bug-report.md new file mode 100644 index 000000000..a694c1823 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/commercial-bug-report.md @@ -0,0 +1,33 @@ +--- +name: Commercial License : Bug Report +about: | + Create a report to help us improve the project. For Commercial License holders only. + Please contact help@sixlabors.com for issues requiring private support. +labels: commercial, needs triage + +--- + + +### Prerequisites + +- [ ] I have written a descriptive issue title +- [ ] I have verified that I am running the latest version of ImageSharp +- [ ] I have verified if the problem exist in both `DEBUG` and `RELEASE` mode +- [ ] I have searched [open](https://github.com/SixLabors/ImageSharp/issues) and [closed](https://github.com/SixLabors/ImageSharp/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported + +### Description + + +### Steps to Reproduce + + +### System Configuration + + +- ImageSharp version: +- Other ImageSharp packages and versions: +- Environment (Operating system, version and so on): +- .NET Framework version: +- Additional information: + + diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/oss-bug-report.md similarity index 95% rename from .github/ISSUE_TEMPLATE/bug-report.md rename to .github/ISSUE_TEMPLATE/oss-bug-report.md index 8ee2e0e60..d2f7e92e8 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/oss-bug-report.md @@ -1,6 +1,7 @@ --- -name: Bug Report +name: OSS : Bug Report about: Create a report to help us improve the project. +labels: needs triage --- diff --git a/ImageSharp.sln b/ImageSharp.sln index f1d4afef4..509dcf96b 100644 --- a/ImageSharp.sln +++ b/ImageSharp.sln @@ -27,9 +27,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1799 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ISSUE_TEMPLATE", "ISSUE_TEMPLATE", "{FBE8C1AD-5AEC-4514-9B64-091D8E145865}" ProjectSection(SolutionItems) = preProject - .github\ISSUE_TEMPLATE\ask-question.md = .github\ISSUE_TEMPLATE\ask-question.md - .github\ISSUE_TEMPLATE\bug-report.md = .github\ISSUE_TEMPLATE\bug-report.md - .github\ISSUE_TEMPLATE\feature-request.md = .github\ISSUE_TEMPLATE\feature-request.md + .github\ISSUE_TEMPLATE\commercial-bug-report.md = .github\ISSUE_TEMPLATE\commercial-bug-report.md + .github\ISSUE_TEMPLATE\config.yml = .github\ISSUE_TEMPLATE\config.yml + .github\ISSUE_TEMPLATE\oss-bug-report.md = .github\ISSUE_TEMPLATE\oss-bug-report.md EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{815C0625-CD3D-440F-9F80-2D83856AB7AE}" From 4aeb57a5c64c2f44e4c5c80e6266c117384090b3 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 7 Jun 2020 23:48:42 +0100 Subject: [PATCH 094/130] Escape separator --- .github/ISSUE_TEMPLATE/commercial-bug-report.md | 2 +- .github/ISSUE_TEMPLATE/oss-bug-report.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/commercial-bug-report.md b/.github/ISSUE_TEMPLATE/commercial-bug-report.md index a694c1823..024de8e19 100644 --- a/.github/ISSUE_TEMPLATE/commercial-bug-report.md +++ b/.github/ISSUE_TEMPLATE/commercial-bug-report.md @@ -1,5 +1,5 @@ --- -name: Commercial License : Bug Report +name: "Commercial License : Bug Report" about: | Create a report to help us improve the project. For Commercial License holders only. Please contact help@sixlabors.com for issues requiring private support. diff --git a/.github/ISSUE_TEMPLATE/oss-bug-report.md b/.github/ISSUE_TEMPLATE/oss-bug-report.md index d2f7e92e8..e0d37de53 100644 --- a/.github/ISSUE_TEMPLATE/oss-bug-report.md +++ b/.github/ISSUE_TEMPLATE/oss-bug-report.md @@ -1,5 +1,5 @@ --- -name: OSS : Bug Report +name: "OSS : Bug Report" about: Create a report to help us improve the project. labels: needs triage From d2d5eef708e4928e0edd1b24883c15bca4294175 Mon Sep 17 00:00:00 2001 From: Greg Ingram Date: Mon, 8 Jun 2020 08:26:07 -0400 Subject: [PATCH 095/130] Update README.md Fixed wording --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 141311e97..ae9161f94 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ SixLabors.ImageSharp ImageSharp is a new, fully featured, fully managed, cross-platform, 2D graphics library. Designed to simplify image processing, ImageSharp brings you an incredibly powerful yet beautifully simple API. -ImageSharp is designed from the ground up to be flexible and extensible. The library provides API endpoints for common image processing operations and the building blocks to allow for the development of addtional operations. +ImageSharp is designed from the ground up to be flexible and extensible. The library provides API endpoints for common image processing operations and the building blocks to allow for the development of additional operations. Built against [.NET Standard 1.3](https://docs.microsoft.com/en-us/dotnet/standard/net-standard), ImageSharp can be used in device, cloud, and embedded/IoT scenarios. From 73cc7964e87fecc7cc71bae56e11dd05164376c1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 9 Jun 2020 21:04:35 +0100 Subject: [PATCH 096/130] Use named tuple --- src/ImageSharp/FormattedImage.cs | 95 ------------------ src/ImageSharp/FormattedImageInfo.cs | 93 ------------------ src/ImageSharp/FormattedImage{TPixel}.cs | 98 ------------------- src/ImageSharp/Image.Decode.cs | 35 ++++--- src/ImageSharp/Image.FromStream.cs | 98 ++++++++++--------- .../Image/ImageTests.Identify.cs | 6 +- .../Image/ImageTests.SaveAsync.cs | 7 +- .../TestUtilities/AsyncStreamWrapper.cs | 6 +- 8 files changed, 76 insertions(+), 362 deletions(-) delete mode 100644 src/ImageSharp/FormattedImage.cs delete mode 100644 src/ImageSharp/FormattedImageInfo.cs delete mode 100644 src/ImageSharp/FormattedImage{TPixel}.cs diff --git a/src/ImageSharp/FormattedImage.cs b/src/ImageSharp/FormattedImage.cs deleted file mode 100644 index 9b604eced..000000000 --- a/src/ImageSharp/FormattedImage.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. - -using System; -using System.Collections.Generic; -using SixLabors.ImageSharp.Formats; - -namespace SixLabors.ImageSharp -{ - /// - /// Struct to curry and for return from async overloads. - /// - public readonly struct FormattedImage : IEquatable - { - /// - /// Initializes a new instance of the struct. - /// - /// The . - /// The . - public FormattedImage(Image image, IImageFormat format) - { - this.Image = image; - this.Format = format; - } - - /// - /// Gets the Image. - /// - public readonly Image Image { get; } - - /// - /// Gets the Format. - /// - public readonly IImageFormat Format { get; } - - /// - /// Converts to . - /// - /// The to convert. - public static implicit operator (Image image, IImageFormat format)(FormattedImage value) - => (value.Image, value.Format); - - /// - /// Converts to - /// - /// The to convert. - public static implicit operator FormattedImage((Image image, IImageFormat format) value) - => new FormattedImage(value.image, value.format); - - /// - /// Compares two objects for equality. - /// - /// The on the left side of the operand. - /// The on the right side of the operand. - /// - /// True if the parameter is equal to the parameter; otherwise, false. - /// - public static bool operator ==(FormattedImage left, FormattedImage right) - => left.Equals(right); - - /// - /// Compares two objects for inequality. - /// - /// The on the left side of the operand. - /// The on the right side of the operand. - /// - /// True if the parameter is not equal to the parameter; otherwise, false. - /// - public static bool operator !=(FormattedImage left, FormattedImage right) - => !(left == right); - - /// - public override bool Equals(object obj) - => obj is FormattedImage image && this.Equals(image); - - /// - public bool Equals(FormattedImage other) - => EqualityComparer.Default.Equals(this.Image, other.Image) - && EqualityComparer.Default.Equals(this.Format, other.Format); - - /// - public override int GetHashCode() => HashCode.Combine(this.Image, this.Format); - - /// - /// Deconstructs into component parts. - /// - /// The . - /// The . - public void Deconstruct(out Image image, out IImageFormat format) - { - image = this.Image; - format = this.Format; - } - } -} diff --git a/src/ImageSharp/FormattedImageInfo.cs b/src/ImageSharp/FormattedImageInfo.cs deleted file mode 100644 index 72368be34..000000000 --- a/src/ImageSharp/FormattedImageInfo.cs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. - -using System; -using System.Collections.Generic; -using SixLabors.ImageSharp.Formats; - -namespace SixLabors.ImageSharp -{ - /// - /// Struct to curry and for return from async overloads. - /// - public readonly struct FormattedImageInfo : IEquatable - { - /// - /// Initializes a new instance of the struct. - /// - /// The . - /// The . - public FormattedImageInfo(IImageInfo imageInfo, IImageFormat format) - { - this.ImageInfo = imageInfo; - this.Format = format; - } - - /// - /// Gets the Image Info. - /// - public readonly IImageInfo ImageInfo { get; } - - /// - /// Gets the Format. - /// - public readonly IImageFormat Format { get; } - - /// - /// Converts to a - /// - /// The to convert. - public static implicit operator (IImageInfo imageInfo, IImageFormat format)(FormattedImageInfo value) - => (value.ImageInfo, value.Format); - - /// - /// Converts to - /// - /// The to convert. - public static implicit operator FormattedImageInfo((IImageInfo imageInfo, IImageFormat format) value) - => new FormattedImageInfo(value.imageInfo, value.format); - - /// - /// Compares two objects for equality. - /// - /// The on the left side of the operand. - /// The on the right side of the operand. - /// - /// True if the parameter is equal to the parameter; otherwise, false. - /// - public static bool operator ==(FormattedImageInfo left, FormattedImageInfo right) => left.Equals(right); - - /// - /// Compares two objects for inequality. - /// - /// The on the left side of the operand. - /// The on the right side of the operand. - /// - /// True if the parameter is not equal to the parameter; otherwise, false. - /// - public static bool operator !=(FormattedImageInfo left, FormattedImageInfo right) => !(left == right); - - /// - public override bool Equals(object obj) - => obj is FormattedImageInfo info && this.Equals(info); - - /// - public bool Equals(FormattedImageInfo other) - => EqualityComparer.Default.Equals(this.ImageInfo, other.ImageInfo) - && EqualityComparer.Default.Equals(this.Format, other.Format); - - /// - public override int GetHashCode() => HashCode.Combine(this.ImageInfo, this.Format); - - /// - /// Deconstructs into component parts. - /// - /// The . - /// The . - public void Deconstruct(out IImageInfo imageInfo, out IImageFormat format) - { - imageInfo = this.ImageInfo; - format = this.Format; - } - } -} diff --git a/src/ImageSharp/FormattedImage{TPixel}.cs b/src/ImageSharp/FormattedImage{TPixel}.cs deleted file mode 100644 index bb3eeabe7..000000000 --- a/src/ImageSharp/FormattedImage{TPixel}.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. - -using System; -using System.Collections.Generic; -using SixLabors.ImageSharp.Formats; -using SixLabors.ImageSharp.PixelFormats; - -namespace SixLabors.ImageSharp -{ - /// - /// Struct to curry and for return from async overloads. - /// - /// The pixel format. - public readonly struct FormattedImage : IEquatable> - where TPixel : unmanaged, IPixel - { - /// - /// Initializes a new instance of the struct. - /// - /// The . - /// The . - public FormattedImage(Image image, IImageFormat format) - { - this.Image = image; - this.Format = format; - } - - /// - /// Gets the Image. - /// - public readonly Image Image { get; } - - /// - /// Gets the Format. - /// - public readonly IImageFormat Format { get; } - - /// - /// Converts to . - /// - /// The to convert. - public static implicit operator (Image image, IImageFormat format)(FormattedImage value) - => (value.Image, value.Format); - - /// - /// Converts to - /// - /// The to convert. - public static implicit operator FormattedImage((Image image, IImageFormat format) value) - => new FormattedImage(value.image, value.format); - - /// - /// Compares two objects for equality. - /// - /// The on the left side of the operand. - /// The on the right side of the operand. - /// - /// True if the parameter is equal to the parameter; otherwise, false. - /// - public static bool operator ==(FormattedImage left, FormattedImage right) - => left.Equals(right); - - /// - /// Compares two objects for inequality. - /// - /// The on the left side of the operand. - /// The on the right side of the operand. - /// - /// True if the parameter is not equal to the parameter; otherwise, false. - /// - public static bool operator !=(FormattedImage left, FormattedImage right) - => !(left == right); - - /// - public override bool Equals(object obj) - => obj is FormattedImage image && this.Equals(image); - - /// - public bool Equals(FormattedImage other) - => EqualityComparer>.Default.Equals(this.Image, other.Image) - && EqualityComparer.Default.Equals(this.Format, other.Format); - - /// - public override int GetHashCode() => HashCode.Combine(this.Image, this.Format); - - /// - /// Deconstructs into component parts. - /// - /// The . - /// The . - public void Deconstruct(out Image image, out IImageFormat format) - { - image = this.Image; - format = this.Format; - } - } -} diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index e3ef5cb53..6b6dc6e21 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -110,7 +110,7 @@ namespace SixLabors.ImageSharp /// /// A new . /// - private static FormattedImage Decode(Stream stream, Configuration config) + private static (Image Image, IImageFormat Format) Decode(Stream stream, Configuration config) where TPixel : unmanaged, IPixel { IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); @@ -120,7 +120,7 @@ namespace SixLabors.ImageSharp } Image img = decoder.Decode(config, stream); - return new FormattedImage(img, format); + return (img, format); } /// @@ -129,10 +129,8 @@ namespace SixLabors.ImageSharp /// The stream. /// the configuration. /// The pixel format. - /// - /// A new . - /// - private static async Task> DecodeAsync(Stream stream, Configuration config) + /// A representing the asynchronous operation. + private static async Task<(Image Image, IImageFormat Format)> DecodeAsync(Stream stream, Configuration config) where TPixel : unmanaged, IPixel { IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); @@ -142,10 +140,10 @@ namespace SixLabors.ImageSharp } Image img = await decoder.DecodeAsync(config, stream).ConfigureAwait(false); - return new FormattedImage(img, format); + return (img, format); } - private static FormattedImage Decode(Stream stream, Configuration config) + private static (Image Image, IImageFormat Format) Decode(Stream stream, Configuration config) { IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); if (decoder is null) @@ -154,10 +152,10 @@ namespace SixLabors.ImageSharp } Image img = decoder.Decode(config, stream); - return new FormattedImage(img, format); + return (img, format); } - private static async Task DecodeAsync(Stream stream, Configuration config) + private static async Task<(Image Image, IImageFormat Format)> DecodeAsync(Stream stream, Configuration config) { IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); if (decoder is null) @@ -166,7 +164,7 @@ namespace SixLabors.ImageSharp } Image img = await decoder.DecodeAsync(config, stream).ConfigureAwait(false); - return new FormattedImage(img, format); + return (img, format); } /// @@ -175,9 +173,9 @@ namespace SixLabors.ImageSharp /// The stream. /// the configuration. /// - /// The or null if suitable info detector not found. + /// The or null if a suitable info detector is not found. /// - private static FormattedImageInfo InternalIdentity(Stream stream, Configuration config) + private static (IImageInfo ImageInfo, IImageFormat Format) InternalIdentity(Stream stream, Configuration config) { if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector)) { @@ -185,7 +183,7 @@ namespace SixLabors.ImageSharp } IImageInfo info = detector?.Identify(config, stream); - return new FormattedImageInfo(info, format); + return (info, format); } /// @@ -194,9 +192,10 @@ namespace SixLabors.ImageSharp /// The stream. /// the configuration. /// - /// The or null if suitable info detector not found. - /// - private static async Task InternalIdentityAsync(Stream stream, Configuration config) + /// A representing the asynchronous operation with the + /// property of the returned type set to null if a suitable detector + /// is not found. + private static async Task<(IImageInfo ImageInfo, IImageFormat Format)> InternalIdentityAsync(Stream stream, Configuration config) { if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector)) { @@ -209,7 +208,7 @@ namespace SixLabors.ImageSharp } IImageInfo info = await detector.IdentifyAsync(config, stream).ConfigureAwait(false); - return new FormattedImageInfo(info, format); + return (info, format); } } } diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 4f1d5c194..5c64ae559 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -44,7 +44,7 @@ namespace SixLabors.ImageSharp /// The image stream to read the header from. /// The stream is null. /// The stream is not readable. - /// The format type or null if none found. + /// A representing the asynchronous operation or null if none is found. public static Task DetectFormatAsync(Stream stream) => DetectFormatAsync(Configuration.Default, stream); @@ -56,7 +56,7 @@ namespace SixLabors.ImageSharp /// The configuration is null. /// The stream is null. /// The stream is not readable. - /// The format type or null if none found. + /// A representing the asynchronous operation. public static Task DetectFormatAsync(Configuration configuration, Stream stream) => WithSeekableStreamAsync( configuration, @@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The or null if suitable info detector not found. + /// The or null if a suitable info detector is not found. /// public static IImageInfo Identify(Stream stream) => Identify(stream, out IImageFormat _); @@ -84,7 +84,8 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The or null if suitable info detector not found. + /// A representing the asynchronous operation or null if + /// a suitable detector is not found. /// public static Task IdentifyAsync(Stream stream) => IdentifyAsync(Configuration.Default, stream); @@ -98,7 +99,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The or null if suitable info detector not found. + /// The or null if a suitable info detector is not found. /// public static IImageInfo Identify(Stream stream, out IImageFormat format) => Identify(Configuration.Default, stream, out format); @@ -113,7 +114,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The or null if suitable info detector is not found. + /// The or null if a suitable info detector is not found. /// public static IImageInfo Identify(Configuration configuration, Stream stream) => Identify(configuration, stream, out _); @@ -128,11 +129,12 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The or null if suitable info detector is not found. + /// A representing the asynchronous operation or null if + /// a suitable detector is not found. /// public static async Task IdentifyAsync(Configuration configuration, Stream stream) { - FormattedImageInfo res = await IdentifyWithFormatAsync(configuration, stream).ConfigureAwait(false); + (IImageInfo ImageInfo, IImageFormat Format) res = await IdentifyWithFormatAsync(configuration, stream).ConfigureAwait(false); return res.ImageInfo; } @@ -147,11 +149,11 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The or null if suitable info detector is not found. + /// The or null if a suitable info detector is not found. /// public static IImageInfo Identify(Configuration configuration, Stream stream, out IImageFormat format) { - FormattedImageInfo data = WithSeekableStream(configuration, stream, s => InternalIdentity(s, configuration ?? Configuration.Default)); + (IImageInfo ImageInfo, IImageFormat Format) data = WithSeekableStream(configuration, stream, s => InternalIdentity(s, configuration ?? Configuration.Default)); format = data.Format; return data.ImageInfo; @@ -166,9 +168,10 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The with set to null if suitable info detector is not found. + /// A representing the asynchronous operation or null if + /// a suitable detector is not found. /// - public static Task IdentifyWithFormatAsync(Stream stream) + public static Task<(IImageInfo ImageInfo, IImageFormat Format)> IdentifyWithFormatAsync(Stream stream) => IdentifyWithFormatAsync(Configuration.Default, stream); /// @@ -181,9 +184,10 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image contains invalid content. /// - /// The with set to null if suitable info detector is not found. + /// The representing the asyncronous operation with the parameter type + /// property set to null if suitable info detector is not found. /// - public static Task IdentifyWithFormatAsync(Configuration configuration, Stream stream) + public static Task<(IImageInfo ImageInfo, IImageFormat Format)> IdentifyWithFormatAsync(Configuration configuration, Stream stream) => WithSeekableStreamAsync( configuration, stream, @@ -212,8 +216,8 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// A representing the asynchronous operation. - public static Task LoadWithFormatAsync(Stream stream) + /// A representing the asynchronous operation. + public static Task<(Image Image, IImageFormat Format)> LoadWithFormatAsync(Stream stream) => LoadWithFormatAsync(Configuration.Default, stream); /// @@ -237,7 +241,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// The . + /// A representing the asynchronous operation. public static Task LoadAsync(Stream stream) => LoadAsync(Configuration.Default, stream); /// @@ -266,7 +270,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// The . + /// A representing the asynchronous operation. public static Task LoadAsync(Stream stream, IImageDecoder decoder) => LoadAsync(Configuration.Default, stream, decoder); @@ -283,7 +287,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// A new .> + /// A new . public static Image Load(Configuration configuration, Stream stream, IImageDecoder decoder) { Guard.NotNull(decoder, nameof(decoder)); @@ -303,7 +307,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// A new .> + /// A representing the asynchronous operation. public static Task LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) { Guard.NotNull(decoder, nameof(decoder)); @@ -323,7 +327,7 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// A new .> + /// A new . public static Image Load(Configuration configuration, Stream stream) => Load(configuration, stream, out _); /// @@ -336,10 +340,10 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// A new .> + /// A representing the asynchronous operation. public static async Task LoadAsync(Configuration configuration, Stream stream) { - FormattedImage fmt = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); + (Image Image, IImageFormat Format) fmt = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); return fmt.Image; } @@ -352,7 +356,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A new . public static Image Load(Stream stream) where TPixel : unmanaged, IPixel => Load(Configuration.Default, stream); @@ -366,7 +370,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A representing the asynchronous operation. public static Task> LoadAsync(Stream stream) where TPixel : unmanaged, IPixel => LoadAsync(Configuration.Default, stream); @@ -381,7 +385,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A new . public static Image Load(Stream stream, out IImageFormat format) where TPixel : unmanaged, IPixel => Load(Configuration.Default, stream, out format); @@ -395,8 +399,8 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A representing the asynchronous operation. - public static async Task> LoadWithFormatAsync(Stream stream) + /// A representing the asynchronous operation. + public static async Task<(Image Image, IImageFormat Format)> LoadWithFormatAsync(Stream stream) where TPixel : unmanaged, IPixel => await LoadWithFormatAsync(Configuration.Default, stream).ConfigureAwait(false); @@ -410,7 +414,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A new . public static Image Load(Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel => WithSeekableStream(Configuration.Default, stream, s => decoder.Decode(Configuration.Default, s)); @@ -425,7 +429,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A representing the asynchronous operation. public static Task> LoadAsync(Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel => WithSeekableStreamAsync( @@ -445,7 +449,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A new . public static Image Load(Configuration configuration, Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel => WithSeekableStream(configuration, stream, s => decoder.Decode(configuration, s)); @@ -462,7 +466,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A representing the asynchronous operation. public static Task> LoadAsync(Configuration configuration, Stream stream, IImageDecoder decoder) where TPixel : unmanaged, IPixel => WithSeekableStreamAsync( @@ -481,7 +485,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new .> + /// A new . public static Image Load(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel => Load(configuration, stream, out IImageFormat _); @@ -498,17 +502,17 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new . + /// A representing the asynchronous operation. public static Image Load(Configuration configuration, Stream stream, out IImageFormat format) where TPixel : unmanaged, IPixel { - (Image img, IImageFormat format) data = WithSeekableStream(configuration, stream, s => Decode(s, configuration)); + (Image Image, IImageFormat Format) data = WithSeekableStream(configuration, stream, s => Decode(s, configuration)); - format = data.format; + format = data.Format; - if (data.img != null) + if (data.Image != null) { - return data.img; + return data.Image; } var sb = new StringBuilder(); @@ -532,16 +536,16 @@ namespace SixLabors.ImageSharp /// The stream is not readable. /// Image format not recognised. /// Image contains invalid content. - /// A new . - public static async Task LoadWithFormatAsync(Configuration configuration, Stream stream) + /// A representing the asynchronous operation. + public static async Task<(Image Image, IImageFormat Format)> LoadWithFormatAsync(Configuration configuration, Stream stream) { - (Image img, IImageFormat format) data = await WithSeekableStreamAsync( + (Image Image, IImageFormat Format) data = await WithSeekableStreamAsync( configuration, stream, async s => await DecodeAsync(s, configuration).ConfigureAwait(false)) .ConfigureAwait(false); - if (data.img != null) + if (data.Image != null) { return data; } @@ -568,18 +572,18 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new . - public static async Task> LoadWithFormatAsync(Configuration configuration, Stream stream) + /// A representing the asynchronous operation. + public static async Task<(Image Image, IImageFormat Format)> LoadWithFormatAsync(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel { - (Image img, IImageFormat format) data = + (Image Image, IImageFormat Format) data = await WithSeekableStreamAsync( configuration, stream, s => DecodeAsync(s, configuration)) .ConfigureAwait(false); - if (data.img != null) + if (data.Image != null) { return data; } @@ -606,7 +610,7 @@ namespace SixLabors.ImageSharp /// Image format not recognised. /// Image contains invalid content. /// The pixel format. - /// A new . + /// A representing the asynchronous operation. public static async Task> LoadAsync(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel { diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs index 35e20dc0d..69b1d21a6 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Identify.cs @@ -133,7 +133,7 @@ namespace SixLabors.ImageSharp.Tests using (var stream = new MemoryStream(this.ActualImageBytes)) { var asyncStream = new AsyncStreamWrapper(stream, () => false); - FormattedImageInfo info = await Image.IdentifyWithFormatAsync(asyncStream); + (IImageInfo ImageInfo, IImageFormat Format) info = await Image.IdentifyWithFormatAsync(asyncStream); Assert.NotNull(info.ImageInfo); Assert.Equal(ExpectedGlobalFormat, info.Format); @@ -144,7 +144,7 @@ namespace SixLabors.ImageSharp.Tests public async Task FromStreamAsync_CustomConfiguration() { var asyncStream = new AsyncStreamWrapper(this.DataStream, () => false); - FormattedImageInfo info = await Image.IdentifyWithFormatAsync(this.LocalConfiguration, asyncStream); + (IImageInfo ImageInfo, IImageFormat Format) info = await Image.IdentifyWithFormatAsync(this.LocalConfiguration, asyncStream); Assert.Equal(this.LocalImageInfo, info.ImageInfo); Assert.Equal(this.LocalImageFormat, info.Format); @@ -154,7 +154,7 @@ namespace SixLabors.ImageSharp.Tests public async Task WhenNoMatchingFormatFoundAsync_ReturnsNull() { var asyncStream = new AsyncStreamWrapper(this.DataStream, () => false); - FormattedImageInfo info = await Image.IdentifyWithFormatAsync(new Configuration(), asyncStream); + (IImageInfo ImageInfo, IImageFormat Format) info = await Image.IdentifyWithFormatAsync(new Configuration(), asyncStream); Assert.Null(info.ImageInfo); } diff --git a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs index 0aba932ce..4a6c96ae8 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.SaveAsync.cs @@ -1,5 +1,5 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; using System.IO; @@ -13,7 +13,6 @@ using Xunit; // ReSharper disable InconsistentNaming namespace SixLabors.ImageSharp.Tests { - using System.Runtime.CompilerServices; using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats; @@ -27,7 +26,7 @@ namespace SixLabors.ImageSharp.Tests public async Task DetectedEncoding() { string dir = TestEnvironment.CreateOutputDirectory(nameof(ImageTests)); - string file = System.IO.Path.Combine(dir, "DetectedEncodingAsync.png"); + string file = Path.Combine(dir, "DetectedEncodingAsync.png"); using (var image = new Image(10, 10)) { diff --git a/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs index 3d23a3c3b..2000c6e0c 100644 --- a/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs +++ b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs @@ -1,10 +1,8 @@ -// Copyright (c) Six Labors and contributors. -// Licensed under the GNU Affero General Public License, Version 3. +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. using System; -using System.Collections.Generic; using System.IO; -using System.Text; using System.Threading; using System.Threading.Tasks; From 73fed79d4594ec4a13003050e70a6b30158a75e0 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 9 Jun 2020 23:47:52 +0100 Subject: [PATCH 097/130] Use pooled stream for async decode/identify --- src/ImageSharp/Formats/Bmp/BmpDecoder.cs | 4 +- src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs | 3 +- src/ImageSharp/Formats/Gif/GifDecoder.cs | 4 +- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 3 +- .../Formats/Jpeg/JpegDecoderCore.cs | 2 +- src/ImageSharp/Formats/Png/PngDecoder.cs | 23 ++------- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 3 +- src/ImageSharp/Formats/Tga/TgaDecoderCore.cs | 3 +- .../IO/FixedCapacityPooledMemoryStream.cs | 50 +++++++++++++++++++ src/ImageSharp/Image.FromStream.cs | 9 ++-- .../TestUtilities/AsyncStreamWrapper.cs | 2 +- 11 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs index 26f6c5080..16da086c9 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs @@ -83,11 +83,11 @@ namespace SixLabors.ImageSharp.Formats.Bmp } /// - public async Task IdentifyAsync(Configuration configuration, Stream stream) + public Task IdentifyAsync(Configuration configuration, Stream stream) { Guard.NotNull(stream, nameof(stream)); - return await new BmpDecoderCore(configuration, this).IdentifyAsync(stream).ConfigureAwait(false); + return new BmpDecoderCore(configuration, this).IdentifyAsync(stream); } } } diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs index f5b576f17..e37144bd5 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs @@ -9,6 +9,7 @@ using System.Numerics; using System.Runtime.CompilerServices; using System.Threading.Tasks; using SixLabors.ImageSharp.Common.Helpers; +using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -257,7 +258,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// The containing image data. public async Task IdentifyAsync(Stream stream) { - using (var ms = new MemoryStream()) + using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) { await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs index fbfbee2e4..5f4fdd0fa 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoder.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs @@ -77,12 +77,12 @@ namespace SixLabors.ImageSharp.Formats.Gif } /// - public async Task IdentifyAsync(Configuration configuration, Stream stream) + public Task IdentifyAsync(Configuration configuration, Stream stream) { Guard.NotNull(stream, nameof(stream)); var decoder = new GifDecoderCore(configuration, this); - return await decoder.IdentifyAsync(stream).ConfigureAwait(false); + return decoder.IdentifyAsync(stream); } /// diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index 63eab072b..8f8426780 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -7,6 +7,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; +using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -199,7 +200,7 @@ namespace SixLabors.ImageSharp.Formats.Gif } else { - using (var ms = new MemoryStream()) + using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) { await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index ed5c17faa..af1a705d4 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -266,7 +266,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg } else { - using (var ms = new MemoryStream()) + using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) { await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs index 2eeb1ac80..a6a040789 100644 --- a/src/ImageSharp/Formats/Png/PngDecoder.cs +++ b/src/ImageSharp/Formats/Png/PngDecoder.cs @@ -9,25 +9,8 @@ using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats.Png { /// - /// Encoder for generating an image out of a png encoded stream. + /// Decoder for generating an image out of a png encoded stream. /// - /// - /// At the moment the following features are supported: - /// - /// Filters: all filters are supported. - /// - /// - /// Pixel formats: - /// - /// RGBA (True color) with alpha (8 bit). - /// RGB (True color) without alpha (8 bit). - /// grayscale with alpha (8 bit). - /// grayscale without alpha (8 bit). - /// Palette Index with alpha (8 bit). - /// Palette Index without alpha (8 bit). - /// - /// - /// public sealed class PngDecoder : IImageDecoder, IPngDecoderOptions, IImageInfoDetector { /// @@ -97,10 +80,10 @@ namespace SixLabors.ImageSharp.Formats.Png } /// - public async Task IdentifyAsync(Configuration configuration, Stream stream) + public Task IdentifyAsync(Configuration configuration, Stream stream) { var decoder = new PngDecoderCore(configuration, this); - return await decoder.IdentifyAsync(stream).ConfigureAwait(false); + return decoder.IdentifyAsync(stream); } /// diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index 0aec984cc..bb8589de4 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -13,6 +13,7 @@ using System.Threading.Tasks; using SixLabors.ImageSharp.Formats.Png.Chunks; using SixLabors.ImageSharp.Formats.Png.Filters; using SixLabors.ImageSharp.Formats.Png.Zlib; +using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata.Profiles.Exif; @@ -277,7 +278,7 @@ namespace SixLabors.ImageSharp.Formats.Png } else { - using (var ms = new MemoryStream()) + using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) { await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index 66cb0ed18..ae8946173 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -6,6 +6,7 @@ using System.Buffers; using System.IO; using System.Runtime.CompilerServices; using System.Threading.Tasks; +using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; @@ -689,7 +690,7 @@ namespace SixLabors.ImageSharp.Formats.Tga } else { - using (var ms = new MemoryStream()) + using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) { await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; diff --git a/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs b/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs new file mode 100644 index 000000000..878fcc53a --- /dev/null +++ b/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs @@ -0,0 +1,50 @@ +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. + +using System.Buffers; +using System.IO; + +namespace SixLabors.ImageSharp.IO +{ + /// + /// A memory stream constructed from a pooled buffer of known length. + /// + internal sealed class FixedCapacityPooledMemoryStream : MemoryStream + { + private readonly byte[] buffer; + private bool isDisposed; + + /// + /// Initializes a new instance of the class. + /// + /// The length of the stream buffer to rent. + public FixedCapacityPooledMemoryStream(long length) + : this(RentBuffer(length)) => this.Length = length; + + private FixedCapacityPooledMemoryStream(byte[] buffer) + : base(buffer) => this.buffer = buffer; + + /// + public override long Length { get; } + + /// + protected override void Dispose(bool disposing) + { + if (!this.isDisposed) + { + this.isDisposed = true; + + if (disposing) + { + ArrayPool.Shared.Return(this.buffer); + } + + base.Dispose(disposing); + } + } + + // In the extrememly unlikely event someone ever gives us a stream + // with length longer than int.MaxValue then we'll use something else. + private static byte[] RentBuffer(long length) => ArrayPool.Shared.Rent((int)length); + } +} diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 5c64ae559..499f5ac19 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -7,6 +7,7 @@ using System.IO; using System.Text; using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; +using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp @@ -674,10 +675,7 @@ namespace SixLabors.ImageSharp } // We want to be able to load images from things like HttpContext.Request.Body - // TODO: Should really find a nice way to use a pool for these. - // Investigate readonly version of the linked implementation. - // https://github.com/mgravell/Pipelines.Sockets.Unofficial/compare/mgravell:24482d4...mgravell:6740ea4 - using (var memoryStream = new MemoryStream()) + using (var memoryStream = new FixedCapacityPooledMemoryStream(stream.Length)) { stream.CopyTo(memoryStream); memoryStream.Position = 0; @@ -713,8 +711,7 @@ namespace SixLabors.ImageSharp return await action(stream).ConfigureAwait(false); } - // TODO: See above comment. - using (var memoryStream = new MemoryStream()) + using (var memoryStream = new FixedCapacityPooledMemoryStream(stream.Length)) { await stream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; diff --git a/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs index 2000c6e0c..6a05ce0bc 100644 --- a/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs +++ b/tests/ImageSharp.Tests/TestUtilities/AsyncStreamWrapper.cs @@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities public override bool CanWrite => this.inner.CanWrite; - public override long Length => throw new NotSupportedException("The stream is not seekable."); + public override long Length => this.inner.Length; public override long Position { From eae953c89f3e0851a8c2a72db8b2b3d91f34dde8 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 10 Jun 2020 18:28:30 +0200 Subject: [PATCH 098/130] Use MemoryAllocator from FixedCapacityPooledMemoryStream & dedup async decoder code --- src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs | 89 +++-------------- src/ImageSharp/Formats/Gif/GifDecoderCore.cs | 81 +++------------- .../Formats/IImageDecoderInternals.cs | 38 ++++++++ .../Formats/ImageDecoderUtilities.cs | 55 +++++++++++ .../Formats/Jpeg/JpegDecoderCore.cs | 85 +++-------------- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 95 +++---------------- src/ImageSharp/Formats/Tga/TgaDecoderCore.cs | 90 +++--------------- .../IO/FixedCapacityPooledMemoryStream.cs | 20 ++-- src/ImageSharp/Image.FromStream.cs | 5 +- .../Memory/MemoryAllocatorExtensions.cs | 5 + 10 files changed, 184 insertions(+), 379 deletions(-) create mode 100644 src/ImageSharp/Formats/IImageDecoderInternals.cs create mode 100644 src/ImageSharp/Formats/ImageDecoderUtilities.cs diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs index e37144bd5..4b14061cf 100644 --- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs +++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs @@ -22,7 +22,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// /// A useful decoding source example can be found at /// - internal sealed class BmpDecoderCore + internal sealed class BmpDecoderCore : IImageDecoderInternals { /// /// The default mask for the red part of the color for 16 bit rgb bitmaps. @@ -89,11 +89,6 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// private BmpInfoHeader infoHeader; - /// - /// The global configuration. - /// - private readonly Configuration configuration; - /// /// Used for allocating memory during processing operations. /// @@ -111,67 +106,28 @@ namespace SixLabors.ImageSharp.Formats.Bmp /// The options. public BmpDecoderCore(Configuration configuration, IBmpDecoderOptions options) { - this.configuration = configuration; + this.Configuration = configuration; this.memoryAllocator = configuration.MemoryAllocator; this.options = options; } + /// + public Configuration Configuration { get; } + /// /// Gets the dimensions of the image. /// public Size Dimensions => new Size(this.infoHeader.Width, this.infoHeader.Height); - /// - /// Decodes the image from the specified this._stream and sets - /// the data to image. - /// - /// The pixel format. - /// The stream, where the image should be - /// decoded from. Cannot be null (Nothing in Visual Basic). - /// - /// is null. - /// - /// The decoded image. - public async Task> DecodeAsync(Stream stream) - where TPixel : unmanaged, IPixel - { - // if we can seek then we arn't in a context that errors on async operations - if (stream.CanSeek) - { - return this.Decode(stream); - } - else - { - // cheat for now do async copy of the stream into memory stream and use the sync version - // we should use an array pool backed memorystream implementation - using (var ms = new MemoryStream()) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); - } - } - } - - /// - /// Decodes the image from the specified this._stream and sets - /// the data to image. - /// - /// The pixel format. - /// The stream, where the image should be - /// decoded from. Cannot be null (Nothing in Visual Basic). - /// - /// is null. - /// - /// The decoded image. + /// public Image Decode(Stream stream) - where TPixel : unmanaged, IPixel + where TPixel : unmanaged, IPixel { try { int bytesPerColorMapEntry = this.ReadImageHeaders(stream, out bool inverted, out byte[] palette); - var image = new Image(this.configuration, this.infoHeader.Width, this.infoHeader.Height, this.metadata); + var image = new Image(this.Configuration, this.infoHeader.Width, this.infoHeader.Height, this.metadata); Buffer2D pixels = image.GetRootFramePixelBuffer(); @@ -242,30 +198,13 @@ namespace SixLabors.ImageSharp.Formats.Bmp } } - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. + /// public IImageInfo Identify(Stream stream) { this.ReadImageHeaders(stream, out _, out _); return new ImageInfo(new PixelTypeInfo(this.infoHeader.BitsPerPixel), this.infoHeader.Width, this.infoHeader.Height, this.metadata); } - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. - public async Task IdentifyAsync(Stream stream) - { - using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); - } - } - /// /// Returns the y- value based on the given height. /// @@ -999,7 +938,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp int newY = Invert(y, height, inverted); Span pixelSpan = pixels.GetRowSpan(newY); PixelOperations.Instance.FromBgr24Bytes( - this.configuration, + this.Configuration, row.GetSpan(), pixelSpan, width); @@ -1028,7 +967,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp int newY = Invert(y, height, inverted); Span pixelSpan = pixels.GetRowSpan(newY); PixelOperations.Instance.FromBgra32Bytes( - this.configuration, + this.Configuration, row.GetSpan(), pixelSpan, width); @@ -1065,7 +1004,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp this.stream.Read(row); PixelOperations.Instance.FromBgra32Bytes( - this.configuration, + this.Configuration, row.GetSpan(), bgraRowSpan, width); @@ -1101,7 +1040,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp Span pixelSpan = pixels.GetRowSpan(newY); PixelOperations.Instance.FromBgra32Bytes( - this.configuration, + this.Configuration, row.GetSpan(), pixelSpan, width); @@ -1115,7 +1054,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp { this.stream.Read(row); PixelOperations.Instance.FromBgra32Bytes( - this.configuration, + this.Configuration, row.GetSpan(), bgraRowSpan, width); diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs index 8f8426780..e4c98799b 100644 --- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs +++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs @@ -17,18 +17,13 @@ namespace SixLabors.ImageSharp.Formats.Gif /// /// Performs the gif decoding operation. /// - internal sealed class GifDecoderCore + internal sealed class GifDecoderCore : IImageDecoderInternals { /// /// The temp buffer used to reduce allocations. /// private readonly byte[] buffer = new byte[16]; - /// - /// The global configuration. - /// - private readonly Configuration configuration; - /// /// The currently loaded stream. /// @@ -78,9 +73,12 @@ namespace SixLabors.ImageSharp.Formats.Gif { this.IgnoreMetadata = options.IgnoreMetadata; this.DecodingMode = options.DecodingMode; - this.configuration = configuration ?? Configuration.Default; + this.Configuration = configuration ?? Configuration.Default; } + /// + public Configuration Configuration { get; } + /// /// Gets or sets a value indicating whether the metadata should be ignored when the image is being decoded. /// @@ -96,40 +94,11 @@ namespace SixLabors.ImageSharp.Formats.Gif /// public Size Dimensions => new Size(this.imageDescriptor.Width, this.imageDescriptor.Height); - private MemoryAllocator MemoryAllocator => this.configuration.MemoryAllocator; - - /// - /// Decodes the stream to the image. - /// - /// The pixel format. - /// The stream containing image data. - /// The decoded image - public async Task> DecodeAsync(Stream stream) - where TPixel : unmanaged, IPixel - { - if (stream.CanSeek) - { - return this.Decode(stream); - } - else - { - using (var ms = new MemoryStream()) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); - } - } - } + private MemoryAllocator MemoryAllocator => this.Configuration.MemoryAllocator; - /// - /// Decodes the stream to the image. - /// - /// The pixel format. - /// The stream containing image data. - /// The decoded image + /// public Image Decode(Stream stream) - where TPixel : unmanaged, IPixel + where TPixel : unmanaged, IPixel { Image image = null; ImageFrame previousFrame = null; @@ -188,31 +157,7 @@ namespace SixLabors.ImageSharp.Formats.Gif return image; } - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. - public async Task IdentifyAsync(Stream stream) - { - if (stream.CanSeek) - { - return this.Identify(stream); - } - else - { - using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); - } - } - } - - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. + /// public IImageInfo Identify(Stream stream) { try @@ -410,11 +355,11 @@ namespace SixLabors.ImageSharp.Formats.Gif if (this.imageDescriptor.LocalColorTableFlag) { int length = this.imageDescriptor.LocalColorTableSize * 3; - localColorTable = this.configuration.MemoryAllocator.AllocateManagedByteBuffer(length, AllocationOptions.Clean); + localColorTable = this.Configuration.MemoryAllocator.AllocateManagedByteBuffer(length, AllocationOptions.Clean); this.stream.Read(localColorTable.Array, 0, length); } - indices = this.configuration.MemoryAllocator.Allocate2D(this.imageDescriptor.Width, this.imageDescriptor.Height, AllocationOptions.Clean); + indices = this.Configuration.MemoryAllocator.Allocate2D(this.imageDescriptor.Width, this.imageDescriptor.Height, AllocationOptions.Clean); this.ReadFrameIndices(indices); ReadOnlySpan colorTable = MemoryMarshal.Cast((localColorTable ?? this.globalColorTable).GetSpan()); @@ -438,7 +383,7 @@ namespace SixLabors.ImageSharp.Formats.Gif private void ReadFrameIndices(Buffer2D indices) { int dataSize = this.stream.ReadByte(); - using var lzwDecoder = new LzwDecoder(this.configuration.MemoryAllocator, this.stream); + using var lzwDecoder = new LzwDecoder(this.Configuration.MemoryAllocator, this.stream); lzwDecoder.DecodePixels(dataSize, indices); } @@ -464,7 +409,7 @@ namespace SixLabors.ImageSharp.Formats.Gif if (previousFrame is null) { // This initializes the image to become fully transparent because the alpha channel is zero. - image = new Image(this.configuration, imageWidth, imageHeight, this.metadata); + image = new Image(this.Configuration, imageWidth, imageHeight, this.metadata); this.SetFrameMetadata(image.Frames.RootFrame.Metadata); diff --git a/src/ImageSharp/Formats/IImageDecoderInternals.cs b/src/ImageSharp/Formats/IImageDecoderInternals.cs new file mode 100644 index 000000000..3ab912353 --- /dev/null +++ b/src/ImageSharp/Formats/IImageDecoderInternals.cs @@ -0,0 +1,38 @@ +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. + +using System.IO; +using SixLabors.ImageSharp.PixelFormats; + +namespace SixLabors.ImageSharp.Formats +{ + /// + /// Abstraction for shared internals for ***DecoderCore implementations to be used with . + /// + internal interface IImageDecoderInternals + { + /// + /// Gets the associated configuration. + /// + Configuration Configuration { get; } + + /// + /// Decodes the image from the specified stream. + /// + /// The pixel format. + /// The stream, where the image should be decoded from. Cannot be null. + /// + /// is null. + /// + /// The decoded image. + Image Decode(Stream stream) + where TPixel : unmanaged, IPixel; + + /// + /// Reads the raw image information from the specified stream. + /// + /// The containing image data. + /// The . + IImageInfo Identify(Stream stream); + } +} diff --git a/src/ImageSharp/Formats/ImageDecoderUtilities.cs b/src/ImageSharp/Formats/ImageDecoderUtilities.cs new file mode 100644 index 000000000..933a571cc --- /dev/null +++ b/src/ImageSharp/Formats/ImageDecoderUtilities.cs @@ -0,0 +1,55 @@ +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. + +using System.IO; +using System.Threading.Tasks; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.PixelFormats; + +namespace SixLabors.ImageSharp.Formats +{ + internal static class ImageDecoderUtilities + { + /// + /// Reads the raw image information from the specified stream. + /// + /// The decoder. + /// The containing image data. + public static async Task IdentifyAsync(this IImageDecoderInternals decoder, Stream stream) + { + if (stream.CanSeek) + { + return decoder.Identify(stream); + } + + await using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return decoder.Identify(ms); + } + + /// + /// Decodes the image from the specified stream. + /// + /// The pixel format. + /// The decoder. + /// The stream, where the image should be decoded from. Cannot be null. + /// + /// is null. + /// + /// The decoded image. + public static async Task> DecodeAsync(this IImageDecoderInternals decoder, Stream stream) + where TPixel : unmanaged, IPixel + { + if (stream.CanSeek) + { + return decoder.Decode(stream); + } + + await using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); + await stream.CopyToAsync(ms).ConfigureAwait(false); + ms.Position = 0; + return decoder.Decode(ms); + } + } +} diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index af1a705d4..f8151141c 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -25,18 +25,13 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// Originally ported from /// with additional fixes for both performance and common encoding errors. /// - internal sealed class JpegDecoderCore : IRawJpegData + internal sealed class JpegDecoderCore : IRawJpegData, IImageDecoderInternals { /// /// The only supported precision /// private readonly int[] supportedPrecisions = { 8, 12 }; - /// - /// The global configuration - /// - private readonly Configuration configuration; - /// /// The buffer used to temporarily store bytes read from the stream. /// @@ -109,10 +104,13 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// The options. public JpegDecoderCore(Configuration configuration, IJpegDecoderOptions options) { - this.configuration = configuration ?? Configuration.Default; + this.Configuration = configuration ?? Configuration.Default; this.IgnoreMetadata = options.IgnoreMetadata; } + /// + public Configuration Configuration { get; } + /// /// Gets the frame /// @@ -213,38 +211,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg return new JpegFileMarker(marker[1], stream.Position - 2, true); } - /// - /// Decodes the image from the specified and sets the data to image. - /// - /// The pixel format. - /// The stream, where the image should be. - /// The decoded image. - public async Task> DecodeAsync(Stream stream) - where TPixel : unmanaged, IPixel - { - if (stream.CanSeek) - { - return this.Decode(stream); - } - else - { - using (var ms = new MemoryStream()) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); - } - } - } - - /// - /// Decodes the image from the specified and sets the data to image. - /// - /// The pixel format. - /// The stream, where the image should be. - /// The decoded image. + /// public Image Decode(Stream stream) - where TPixel : unmanaged, IPixel + where TPixel : unmanaged, IPixel { this.ParseStream(stream); this.InitExifProfile(); @@ -254,31 +223,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg return this.PostProcessIntoImage(); } - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. - public async Task IdentifyAsync(Stream stream) - { - if (stream.CanSeek) - { - return this.Identify(stream); - } - else - { - using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); - } - } - } - - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. + /// public IImageInfo Identify(Stream stream) { this.ParseStream(stream, true); @@ -298,7 +243,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg public void ParseStream(Stream stream, bool metadataOnly = false) { this.Metadata = new ImageMetadata(); - this.InputStream = new DoubleBufferedStreamReader(this.configuration.MemoryAllocator, stream); + this.InputStream = new DoubleBufferedStreamReader(this.Configuration.MemoryAllocator, stream); // Check for the Start Of Image marker. this.InputStream.Read(this.markerBuffer, 0, 2); @@ -937,7 +882,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg maxV = v; } - var component = new JpegComponent(this.configuration.MemoryAllocator, this.Frame, this.temp[index], h, v, this.temp[index + 2], i); + var component = new JpegComponent(this.Configuration.MemoryAllocator, this.Frame, this.temp[index], h, v, this.temp[index + 2], i); this.Frame.Components[i] = component; this.Frame.ComponentIds[i] = component.Id; @@ -962,7 +907,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { int length = remaining; - using (IManagedByteBuffer huffmanData = this.configuration.MemoryAllocator.AllocateManagedByteBuffer(256, AllocationOptions.Clean)) + using (IManagedByteBuffer huffmanData = this.Configuration.MemoryAllocator.AllocateManagedByteBuffer(256, AllocationOptions.Clean)) { ref byte huffmanDataRef = ref MemoryMarshal.GetReference(huffmanData.GetSpan()); for (int i = 2; i < remaining;) @@ -985,7 +930,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg this.InputStream.Read(huffmanData.Array, 0, 16); - using (IManagedByteBuffer codeLengths = this.configuration.MemoryAllocator.AllocateManagedByteBuffer(17, AllocationOptions.Clean)) + using (IManagedByteBuffer codeLengths = this.Configuration.MemoryAllocator.AllocateManagedByteBuffer(17, AllocationOptions.Clean)) { ref byte codeLengthsRef = ref MemoryMarshal.GetReference(codeLengths.GetSpan()); int codeLengthSum = 0; @@ -1002,7 +947,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg JpegThrowHelper.ThrowInvalidImageContentException("Huffman table has excessive length."); } - using (IManagedByteBuffer huffmanValues = this.configuration.MemoryAllocator.AllocateManagedByteBuffer(256, AllocationOptions.Clean)) + using (IManagedByteBuffer huffmanValues = this.Configuration.MemoryAllocator.AllocateManagedByteBuffer(256, AllocationOptions.Clean)) { this.InputStream.Read(huffmanValues.Array, 0, codeLengthSum); @@ -1129,12 +1074,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg } var image = Image.CreateUninitialized( - this.configuration, + this.Configuration, this.ImageWidth, this.ImageHeight, this.Metadata); - using (var postProcessor = new JpegImagePostProcessor(this.configuration, this)) + using (var postProcessor = new JpegImagePostProcessor(this.Configuration, this)) { postProcessor.PostProcess(image.Frames.RootFrame); } diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index bb8589de4..e2b0e50fc 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -24,18 +24,13 @@ namespace SixLabors.ImageSharp.Formats.Png /// /// Performs the png decoding operation. /// - internal sealed class PngDecoderCore + internal sealed class PngDecoderCore : IImageDecoderInternals { /// /// Reusable buffer. /// private readonly byte[] buffer = new byte[4]; - /// - /// The global configuration. - /// - private readonly Configuration configuration; - /// /// Gets or sets a value indicating whether the metadata should be ignored when the image is being decoded. /// @@ -123,60 +118,22 @@ namespace SixLabors.ImageSharp.Formats.Png /// The decoder options. public PngDecoderCore(Configuration configuration, IPngDecoderOptions options) { - this.configuration = configuration ?? Configuration.Default; - this.memoryAllocator = this.configuration.MemoryAllocator; + this.Configuration = configuration ?? Configuration.Default; + this.memoryAllocator = this.Configuration.MemoryAllocator; this.ignoreMetadata = options.IgnoreMetadata; } + /// + public Configuration Configuration { get; } + /// /// Gets the dimensions of the image. /// public Size Dimensions => new Size(this.header.Width, this.header.Height); - /// - /// Decodes the stream to the image. - /// - /// The pixel format. - /// The stream containing image data. - /// - /// Thrown if the stream does not contain and end chunk. - /// - /// - /// Thrown if the image is larger than the maximum allowable size. - /// - /// The decoded image. - public async Task> DecodeAsync(Stream stream) - where TPixel : unmanaged, IPixel - { - if (stream.CanSeek) - { - return this.Decode(stream); - } - else - { - using (var ms = new MemoryStream()) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); - } - } - } - - /// - /// Decodes the stream to the image. - /// - /// The pixel format. - /// The stream containing image data. - /// - /// Thrown if the stream does not contain and end chunk. - /// - /// - /// Thrown if the image is larger than the maximum allowable size. - /// - /// The decoded image. + /// public Image Decode(Stream stream) - where TPixel : unmanaged, IPixel + where TPixel : unmanaged, IPixel { var metadata = new ImageMetadata(); PngMetadata pngMetadata = metadata.GetPngMetadata(); @@ -266,31 +223,7 @@ namespace SixLabors.ImageSharp.Formats.Png } } - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. - public async Task IdentifyAsync(Stream stream) - { - if (stream.CanSeek) - { - return this.Identify(stream); - } - else - { - using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); - } - } - } - - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. + /// public IImageInfo Identify(Stream stream) { var metadata = new ImageMetadata(); @@ -446,7 +379,7 @@ namespace SixLabors.ImageSharp.Formats.Png where TPixel : unmanaged, IPixel { image = Image.CreateUninitialized( - this.configuration, + this.Configuration, this.header.Width, this.header.Height, metadata); @@ -460,7 +393,7 @@ namespace SixLabors.ImageSharp.Formats.Png } this.previousScanline = this.memoryAllocator.AllocateManagedByteBuffer(this.bytesPerScanline, AllocationOptions.Clean); - this.scanline = this.configuration.MemoryAllocator.AllocateManagedByteBuffer(this.bytesPerScanline, AllocationOptions.Clean); + this.scanline = this.Configuration.MemoryAllocator.AllocateManagedByteBuffer(this.bytesPerScanline, AllocationOptions.Clean); } /// @@ -759,7 +692,7 @@ namespace SixLabors.ImageSharp.Formats.Png case PngColorType.Rgb: PngScanlineProcessor.ProcessRgbScanline( - this.configuration, + this.Configuration, this.header, scanlineSpan, rowSpan, @@ -773,7 +706,7 @@ namespace SixLabors.ImageSharp.Formats.Png case PngColorType.RgbWithAlpha: PngScanlineProcessor.ProcessRgbaScanline( - this.configuration, + this.Configuration, this.header, scanlineSpan, rowSpan, @@ -1258,7 +1191,7 @@ namespace SixLabors.ImageSharp.Formats.Png private IManagedByteBuffer ReadChunkData(int length) { // We rent the buffer here to return it afterwards in Decode() - IManagedByteBuffer buffer = this.configuration.MemoryAllocator.AllocateManagedByteBuffer(length, AllocationOptions.Clean); + IManagedByteBuffer buffer = this.Configuration.MemoryAllocator.AllocateManagedByteBuffer(length, AllocationOptions.Clean); this.currentStream.Read(buffer.Array, 0, length); diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index ae8946173..3f6d721f6 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -5,7 +5,6 @@ using System; using System.Buffers; using System.IO; using System.Runtime.CompilerServices; -using System.Threading.Tasks; using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; @@ -16,7 +15,7 @@ namespace SixLabors.ImageSharp.Formats.Tga /// /// Performs the tga decoding operation. /// - internal sealed class TgaDecoderCore + internal sealed class TgaDecoderCore : IImageDecoderInternals { /// /// A scratch buffer to reduce allocations. @@ -38,11 +37,6 @@ namespace SixLabors.ImageSharp.Formats.Tga /// private TgaFileHeader fileHeader; - /// - /// The global configuration. - /// - private readonly Configuration configuration; - /// /// Used for allocating memory during processing operations. /// @@ -70,54 +64,22 @@ namespace SixLabors.ImageSharp.Formats.Tga /// The options. public TgaDecoderCore(Configuration configuration, ITgaDecoderOptions options) { - this.configuration = configuration; + this.Configuration = configuration; this.memoryAllocator = configuration.MemoryAllocator; this.options = options; } + /// + public Configuration Configuration { get; } + /// /// Gets the dimensions of the image. /// public Size Dimensions => new Size(this.fileHeader.Width, this.fileHeader.Height); - /// - /// Decodes the image from the specified stream. - /// - /// The pixel format. - /// The stream, where the image should be decoded from. Cannot be null. - /// - /// is null. - /// - /// The decoded image. - public async Task> DecodeAsync(Stream stream) - where TPixel : unmanaged, IPixel - { - if (stream.CanSeek) - { - return this.Decode(stream); - } - else - { - using (var ms = new MemoryStream()) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Decode(ms); - } - } - } - - /// - /// Decodes the image from the specified stream. - /// - /// The pixel format. - /// The stream, where the image should be decoded from. Cannot be null. - /// - /// is null. - /// - /// The decoded image. + /// public Image Decode(Stream stream) - where TPixel : unmanaged, IPixel + where TPixel : unmanaged, IPixel { try { @@ -135,7 +97,7 @@ namespace SixLabors.ImageSharp.Formats.Tga throw new UnknownImageFormatException("Width or height cannot be 0"); } - var image = Image.CreateUninitialized(this.configuration, this.fileHeader.Width, this.fileHeader.Height, this.metadata); + var image = Image.CreateUninitialized(this.Configuration, this.fileHeader.Width, this.fileHeader.Height, this.metadata); Buffer2D pixels = image.GetRootFramePixelBuffer(); if (this.fileHeader.ColorMapType == 1) @@ -489,11 +451,11 @@ namespace SixLabors.ImageSharp.Formats.Tga if (this.fileHeader.ImageType == TgaImageType.BlackAndWhite) { - PixelOperations.Instance.FromLa16Bytes(this.configuration, rowSpan, pixelSpan, width); + PixelOperations.Instance.FromLa16Bytes(this.Configuration, rowSpan, pixelSpan, width); } else { - PixelOperations.Instance.FromBgra5551Bytes(this.configuration, rowSpan, pixelSpan, width); + PixelOperations.Instance.FromBgra5551Bytes(this.Configuration, rowSpan, pixelSpan, width); } } } @@ -678,31 +640,7 @@ namespace SixLabors.ImageSharp.Formats.Tga } } - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. - public async Task IdentifyAsync(Stream stream) - { - if (stream.CanSeek) - { - return this.Identify(stream); - } - else - { - using (var ms = new FixedCapacityPooledMemoryStream(stream.Length)) - { - await stream.CopyToAsync(ms).ConfigureAwait(false); - ms.Position = 0; - return this.Identify(ms); - } - } - } - - /// - /// Reads the raw image information from the specified stream. - /// - /// The containing image data. + /// public IImageInfo Identify(Stream stream) { this.ReadFileHeader(stream); @@ -719,7 +657,7 @@ namespace SixLabors.ImageSharp.Formats.Tga { this.currentStream.Read(row); Span pixelSpan = pixels.GetRowSpan(y); - PixelOperations.Instance.FromL8Bytes(this.configuration, row.GetSpan(), pixelSpan, width); + PixelOperations.Instance.FromL8Bytes(this.Configuration, row.GetSpan(), pixelSpan, width); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -746,7 +684,7 @@ namespace SixLabors.ImageSharp.Formats.Tga { this.currentStream.Read(row); Span pixelSpan = pixels.GetRowSpan(y); - PixelOperations.Instance.FromBgr24Bytes(this.configuration, row.GetSpan(), pixelSpan, width); + PixelOperations.Instance.FromBgr24Bytes(this.Configuration, row.GetSpan(), pixelSpan, width); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -765,7 +703,7 @@ namespace SixLabors.ImageSharp.Formats.Tga { this.currentStream.Read(row); Span pixelSpan = pixels.GetRowSpan(y); - PixelOperations.Instance.FromBgra32Bytes(this.configuration, row.GetSpan(), pixelSpan, width); + PixelOperations.Instance.FromBgra32Bytes(this.Configuration, row.GetSpan(), pixelSpan, width); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs b/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs index 878fcc53a..6953b0e10 100644 --- a/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs +++ b/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs @@ -3,6 +3,7 @@ using System.Buffers; using System.IO; +using SixLabors.ImageSharp.Memory; namespace SixLabors.ImageSharp.IO { @@ -11,18 +12,19 @@ namespace SixLabors.ImageSharp.IO /// internal sealed class FixedCapacityPooledMemoryStream : MemoryStream { - private readonly byte[] buffer; + private readonly IManagedByteBuffer buffer; private bool isDisposed; /// /// Initializes a new instance of the class. /// /// The length of the stream buffer to rent. - public FixedCapacityPooledMemoryStream(long length) - : this(RentBuffer(length)) => this.Length = length; + /// The allocator to rent the buffer from. + public FixedCapacityPooledMemoryStream(long length, MemoryAllocator allocator) + : this(RentBuffer(length, allocator)) => this.Length = length; - private FixedCapacityPooledMemoryStream(byte[] buffer) - : base(buffer) => this.buffer = buffer; + private FixedCapacityPooledMemoryStream(IManagedByteBuffer buffer) + : base(buffer.Array) => this.buffer = buffer; /// public override long Length { get; } @@ -36,7 +38,7 @@ namespace SixLabors.ImageSharp.IO if (disposing) { - ArrayPool.Shared.Return(this.buffer); + this.buffer.Dispose(); } base.Dispose(disposing); @@ -45,6 +47,10 @@ namespace SixLabors.ImageSharp.IO // In the extrememly unlikely event someone ever gives us a stream // with length longer than int.MaxValue then we'll use something else. - private static byte[] RentBuffer(long length) => ArrayPool.Shared.Rent((int)length); + private static IManagedByteBuffer RentBuffer(long length, MemoryAllocator allocator) + { + Guard.MustBeBetweenOrEqualTo(length, 0, int.MaxValue, nameof(length)); + return allocator.AllocateManagedByteBuffer((int)length); + } } } diff --git a/src/ImageSharp/Image.FromStream.cs b/src/ImageSharp/Image.FromStream.cs index 499f5ac19..d3fd35d5f 100644 --- a/src/ImageSharp/Image.FromStream.cs +++ b/src/ImageSharp/Image.FromStream.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.IO; +using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp @@ -675,7 +676,7 @@ namespace SixLabors.ImageSharp } // We want to be able to load images from things like HttpContext.Request.Body - using (var memoryStream = new FixedCapacityPooledMemoryStream(stream.Length)) + using (MemoryStream memoryStream = configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length)) { stream.CopyTo(memoryStream); memoryStream.Position = 0; @@ -711,7 +712,7 @@ namespace SixLabors.ImageSharp return await action(stream).ConfigureAwait(false); } - using (var memoryStream = new FixedCapacityPooledMemoryStream(stream.Length)) + using (MemoryStream memoryStream = configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length)) { await stream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; diff --git a/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs b/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs index 45463c76f..9a56390d8 100644 --- a/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs +++ b/src/ImageSharp/Memory/MemoryAllocatorExtensions.cs @@ -2,6 +2,8 @@ // Licensed under the Apache License, Version 2.0. using System.Buffers; +using System.IO; +using SixLabors.ImageSharp.IO; namespace SixLabors.ImageSharp.Memory { @@ -98,5 +100,8 @@ namespace SixLabors.ImageSharp.Memory AllocationOptions options = AllocationOptions.None) where T : struct => MemoryGroup.Allocate(memoryAllocator, totalLength, bufferAlignment, options); + + internal static MemoryStream AllocateFixedCapacityMemoryStream(this MemoryAllocator allocator, long length) => + new FixedCapacityPooledMemoryStream(length, allocator); } } From 481241de1647352f4c2b26d1b63b5b8139051dd2 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 10 Jun 2020 18:33:15 +0200 Subject: [PATCH 099/130] do not use "await using" --- src/ImageSharp/Formats/ImageDecoderUtilities.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Formats/ImageDecoderUtilities.cs b/src/ImageSharp/Formats/ImageDecoderUtilities.cs index 933a571cc..6bb9116cd 100644 --- a/src/ImageSharp/Formats/ImageDecoderUtilities.cs +++ b/src/ImageSharp/Formats/ImageDecoderUtilities.cs @@ -22,7 +22,7 @@ namespace SixLabors.ImageSharp.Formats return decoder.Identify(stream); } - await using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); + using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; return decoder.Identify(ms); @@ -46,7 +46,7 @@ namespace SixLabors.ImageSharp.Formats return decoder.Decode(stream); } - await using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); + using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; return decoder.Decode(ms); From a21255d75f8d73001247124bb4185f5e479548cb Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 10 Jun 2020 20:23:51 +0200 Subject: [PATCH 100/130] FixedCapacityPooledMemoryStreamTests --- .../IO/FixedCapacityPooledMemoryStream.cs | 13 ++++++ .../FixedCapacityPooledMemoryStreamTests.cs | 42 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 tests/ImageSharp.Tests/IO/FixedCapacityPooledMemoryStreamTests.cs diff --git a/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs b/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs index 6953b0e10..74864d45e 100644 --- a/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs +++ b/src/ImageSharp/IO/FixedCapacityPooledMemoryStream.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. +using System; using System.Buffers; using System.IO; using SixLabors.ImageSharp.Memory; @@ -29,6 +30,18 @@ namespace SixLabors.ImageSharp.IO /// public override long Length { get; } + /// + public override bool TryGetBuffer(out ArraySegment buffer) + { + if (this.isDisposed) + { + throw new ObjectDisposedException(this.GetType().Name); + } + + buffer = new ArraySegment(this.buffer.Array, 0, this.buffer.Length()); + return true; + } + /// protected override void Dispose(bool disposing) { diff --git a/tests/ImageSharp.Tests/IO/FixedCapacityPooledMemoryStreamTests.cs b/tests/ImageSharp.Tests/IO/FixedCapacityPooledMemoryStreamTests.cs new file mode 100644 index 000000000..0581a6ee2 --- /dev/null +++ b/tests/ImageSharp.Tests/IO/FixedCapacityPooledMemoryStreamTests.cs @@ -0,0 +1,42 @@ +// Copyright (c) Six Labors. +// Licensed under the Apache License, Version 2.0. + +using System; +using System.IO; +using System.Linq; +using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.Tests.Memory; +using Xunit; + +namespace SixLabors.ImageSharp.Tests.IO +{ + public class FixedCapacityPooledMemoryStreamTests + { + private readonly TestMemoryAllocator memoryAllocator = new TestMemoryAllocator(); + + [Theory] + [InlineData(1)] + [InlineData(512)] + public void RentsManagedBuffer(int length) + { + MemoryStream ms = this.memoryAllocator.AllocateFixedCapacityMemoryStream(length); + Assert.Equal(length, this.memoryAllocator.AllocationLog.Single().Length); + ms.Dispose(); + Assert.Equal(1, this.memoryAllocator.ReturnLog.Count); + } + + [Theory] + [InlineData(42)] + [InlineData(2999)] + public void UsesRentedBuffer(int length) + { + using MemoryStream ms = this.memoryAllocator.AllocateFixedCapacityMemoryStream(length); + ms.TryGetBuffer(out ArraySegment buffer); + byte[] array = buffer.Array; + Assert.Equal(array.GetHashCode(), this.memoryAllocator.AllocationLog.Single().HashCodeOfBuffer); + + ms.Write(new byte[] { 123 }); + Assert.Equal(123, array[0]); + } + } +} From 2bf18d9c00eb6e0e1130df9baf9114d58484a697 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 11 Jun 2020 23:48:36 +0100 Subject: [PATCH 101/130] Only throw for multi SOF when fully decoding. --- .../Formats/Jpeg/JpegDecoderCore.cs | 5 +++++ .../Formats/Jpg/JpegDecoderTests.Images.cs | 1 + .../Formats/Jpg/JpegDecoderTests.Metadata.cs | 1 + tests/ImageSharp.Tests/TestImages.cs | 1 + .../issue-1221-identify-multi-frame.jpg | Bin 0 -> 2263840 bytes 5 files changed, 8 insertions(+) create mode 100644 tests/Images/Input/Jpg/issues/issue-1221-identify-multi-frame.jpg diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index f8151141c..b4f37cd7f 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -812,6 +812,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { if (this.Frame != null) { + if (metadataOnly) + { + return; + } + JpegThrowHelper.ThrowInvalidImageContentException("Multiple SOF markers. Only single frame jpegs supported."); } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs index c91aad7e7..50198b9c4 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Images.cs @@ -32,6 +32,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg TestImages.Jpeg.Issues.ExifGetString750Load, TestImages.Jpeg.Issues.ExifGetString750Transform, TestImages.Jpeg.Issues.BadSubSampling1076, + TestImages.Jpeg.Issues.IdentifyMultiFrame1211, // LibJpeg can open this despite the invalid density units. TestImages.Jpeg.Issues.Fuzz.ArgumentOutOfRangeException825B, diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs index 9b6643f7f..e37b26cdb 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs @@ -38,6 +38,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg { true, TestImages.Jpeg.Baseline.Jpeg400, 8, false, false }, { true, TestImages.Jpeg.Baseline.Snake, 24, true, true }, { true, TestImages.Jpeg.Baseline.Jpeg420Exif, 24, true, false }, + { true, TestImages.Jpeg.Issues.IdentifyMultiFrame1211, 24, true, true }, }; public static readonly TheoryData RatioFiles = diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 4b5dffdfd..fd5296c37 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -229,6 +229,7 @@ namespace SixLabors.ImageSharp.Tests public const string IncorrectResize1006 = "Jpg/issues/issue1006-incorrect-resize.jpg"; public const string ExifResize1049 = "Jpg/issues/issue1049-exif-resize.jpg"; public const string BadSubSampling1076 = "Jpg/issues/issue-1076-invalid-subsampling.jpg"; + public const string IdentifyMultiFrame1211 = "Jpg/issues/issue-1221-identify-multi-frame.jpg"; public static class Fuzz { diff --git a/tests/Images/Input/Jpg/issues/issue-1221-identify-multi-frame.jpg b/tests/Images/Input/Jpg/issues/issue-1221-identify-multi-frame.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7b9d3d0ba0ad4152dbc9822a23ffc4243e5d056 GIT binary patch literal 2263840 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�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 Q|ILel425*_`y>j@ou!@?u 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 liVbRF^oT7YN%$ATztemZe=EuG#)5h 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�y5qG0WIRaH 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 z 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 z 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%0A?kZ?%ExuetOl5 znJvYerMsLz9XevBlWWZJM!~a>%i6Ux;R#PA3b0<@lmU}%aInON+mLw2O6T=+*6T~2tfwP?OJtzY@>e~JnN#c|V2UYD-HkTCa z&2~3Rz+j546Wv|jOcy><;|uFu95UPK>e7#tzX1AB2QtI#S8FBHZdC*(Imh8lg4Xj- zw|mIf&4`iD*V?XKh(*dxWe`8@9+c_elkDc>Pdj|k$m}ugKpJsgzuErPGVZar7(Jm|)#|^&KjD7C8%~+ZiyOknF42SQ7{U`#IR`)ZB?dNRACfu*4D^N=X zw2HTmM13*_N3}9zXJcmj$@3re_N0d5MblACAZ|Y@p4C!!0>tkucCsR!&BojgqL$|e z5$DY^V+qg-W3-m@{iYGUSYVG&rDjQOsOk$E6XoYWTFz0p7a{Usn|e>Z4-5d|J%wGq zf)|k^f=?*QK2kjgtyhN5dsL1SFj*HP7z7`!QS*GKdnpf@DEq{F^u1>7v+NpXK26d2<2?uIT6XcQkGE4&BtUlU^zA?zNLn~n&v=oC zewg;CAXy-lr-*G2$2A3-!jPMrnF|Nw9+hHgZLBO(8~#)t2A{a3f3-J#$mMZyleSvI!4vDy^NQmt;$OZNG2v2K4rz3o_ibf`kxx#EuSo3Wmo1 z!tBXvpCEDU~(9~diyBAj>Rfo;TrD0pabsdNL zG~X_w94;4n|P?ez!gXCk*I`LYT zD{VC47Cq7@-N!*tPS&!%>Uf2TWH>zbtI;*x z<-e5iD+cE{#wyjl&)Mf#ra-wE`r^63bkLtPK0w+4+0vjgi)-YJw>`MvX0dYTP+4xI zGQ>~a#cW)YCg)5le+e`JTT_bWKR5e6Ja5O%=~4|w?%LTQRNU@11>2Ab*?t*y~s` zs+sAUdd96Ah1y42_uqyyM{%q}8w?HHV!nOTVwy<@l-%)}_V0%)C7!ni2H%)gRW>@Q zAKM4~6Nc_I_!nyg<7fwu%D+!6ri9xNTWAN0{F(m%f^Xj&pMrLF({jjp?b^RmEE+k+ z!N^neuYksX5=X61W6>;}KHZ#-)wsA_pmnTGFbL!FyLPSE5ac(dd6L|tUeQPy?OKs= z4$M|uEEIFzwO~+JBy_Chun(nG$l{)hj%nZkFe?xdS8YnG+|aAs)U*ImMHB#0OM~e~ z52XMl6j4A0M9Jw=(Lfckjs-1PqJS$fRp+I2IzF{Ek@Eb{y~T5qe8+25t5`QOCf>9i z2ClK2uilI5n*C`c`zSjy))_?p54J z-mObSkIUZO1!nQyr&2=Vff^FtN3&v9mWo2$hc(E|j0RVXQ|)ybpp<5}qfth8F{@7J z&`@40AlOMCrCzwYiaSQ#>G)Ta+v|)X0UPigDfgP$y0;JvfJ zr`)tGc<2pyIQ%=Nk82NzQ_?4IVyI%ydE%$Ig;VDvrEvN+{Hrj5`4!b%E!?PPQIXcX zm+v#zQss@AU7?JQD>8dwLfsZ8ni^tGE0V%7WrOCb5+=dLbP@o^ilZ_dbgY;h`^F1r z+OwyLO5(R&K3$DqhQ6=S2gNmM2u{nx`aR zFbmSUYpY3Z@~k+lc?Xubps2*io+Zc4+OaMp03Cv~?q+SpD>iP0vq7

    x0)EQYsex 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 z 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

    BdOF=lm*3ZeB?h9X?e!+<%YhSz6>0GMTIx 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

    _7EAb2Vv-lZ*ZL3SG>DHk%M2azp^)s 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�qpSx9E5|q-dsh|VJqB^E zBFi2IFfq`6b@n~ifOMk^G;5usf&T#Nt~*Zf9;0P=ZY|g37~}r{*I3GE*<RuAo?(HROf;PIJmmKk3zJ>7WE6qUM#=A4ix84WX4%O7^9}k;OgteNn2amw? z_r)f6DzVtfvhlX8hn2wXj^B-E-TX<^Z8wOHH+98WO(sCWR(TQi(MRFNxu-@x!59 zum}3r%KG+^b9drjG8l8T>=@uzbEN6|g|IPg-ra^edwODyR6k`CpZJIIIjpY-*c-@M z91O7p07ZKL0D?Xv+nWWuj^%z)^X<+L;a?tnSBiMA#20FI2F?nMeAx7^(?W*!=E6Bu ze5C^@xWFNOg>ChEe1`u3R;GP%tNdot?N~HdA##3ZJ^S%pPldi9TI+>g-a#yH_#S#! z=HHJex`f3VtH|f?Z5?}jweNoe?`|gY6~0D8g;(K*-&*3WL$S~GdVLSRWW8%RO~@g3 zkCYRN@!u5uMtwD8y7R&a&+A^rt6M~LSsBJkDee6$^P}U8mlm3A<9^g{yVT>}v!-K0 z7m@S_hCVb{YwSEmd-277 zPk0kr))!H9w~&mSa=?$mze7GB8LaemY2S0W&p6FvIGNVN@@#u`z3|TLjt^7CY}?$& za7t%5{42sQd_&~id3*EEO78TXNrW5E$%W4~#t3(ad_e}4aLX!##dCH(JFvek1+y;j zKLcI^@t4LLg|sryV&*;H#f~@}SI&P3JWZ-_O1pGi5hdsoyd9l@ZBqe_=&B|`VoTKOai#isISlaZxib9YqNP$lp(Re z&V8{JW?Oq{us_Rz%B>ODa7~FDvvQ7MJrNiPvGB(*``=H@lx7NJJSop65dV#in2dT%f zuQAqqJuJGXkOtGduHnGPxS&0W_J@J|MHTP@;O<|$fO>Y~y}Cb=0Q*Q>U?0-Hcla-% zD1f}5I-~rjJv-OZH@;oHv0MxeLf1Wv8t8n{qo_H7F(@C;#iT2Ootfi3F}`w_;0{-`HoQvoQ{js4w<5|JsK2g@*h*5 ziu1HSW4dH4M*oka+X zRrs58b0fn0m4_J5%g6NMxos=rex-GJuwek{k@I~k4)4SFP~FJDbz%q&yYGAU70YSb zJFLd2 z2O)KRdiFv#lRI#)ob>e=^sk$IZzaRbv6(R$C#HKIoLAUG!CI38aDG+lRD;JIu~~oc ztv|M|&C|dbMga;300G|>yeg_^J&zgirkGydDCArqQrO*`*HfwKE%w1|56H`q4^N=4 zchNo_TET8rl~4C@G0(Ma9|SRfK6tjbK-m2#uZm0IHjU03!rFB9@mnjB0uEL)fsac1 z=E64q#}L33GQ5Mv(Od_Hyd@g4iFiTN1HZj`xkMJ;UUn+OgM1fg@mpH)wr_#09;5A@%RhN5UV0&Zn6&Sr65sP6*sLp>X zz}2;ApmvJqC`X{{j+|CBdh`;Nj@?z5dYpCZ#YO3qqIO?yVBaH?8AZHtKf$fUmshQG-mpdbapJTgg zv%k%m{$8MDbv^y5t#txTy<2eFc~g#mrFjc@zT0a^9YV%1LBRm~*EezT0bWcZCvua6#Ys`d5pK&l=q8p_TI=MO|x&5izTg^8McRi!X^4V?VsW zA9&ZuxBmbWC%d}e4o>9q@W338UQgros_pRtGCaRC=0y*NI0w;qHQ?6c3K4EHXQd2@ zBk7B;6^Ri*lodir$nB5sR}XRV3^P5vIZrP<_QChB629?`&Gn&?85k8GFHCmiSDs($ z_kv*?<&H7|;eD}RGmYZ6&1yQHjXbU$k8wW}WZZtuC_Z6qso)GBO5^o!9Nieism4k# z%G*FEzAMUAOs(Zh!^xAt?^_X}Z!H)CvEYpJ!0lci`pt=P)!6iD<Rv9qju_eG zS12*a!7H2(ZVhu%UCAI8@}0sV!i@4d^!n71#~X%<+%5?%&>l0>@BmdhA1}JfoIOnIeb&+W@T*u_Xt@9AU zmz}Nj^re?fyRwTjt^*zl`t~)&QlzxzC}xQ=TaxZ`AMoLO`Wox)t~|D8ae~Ajrac96 zF^RHd?7dDsyVpgh$kN6N{{RO7_rUh;S3<8U+Q_*^=<1{|6~6h%QMWlg2d5tO&E8)| z@%eGZ>5fL<@|+A-=yBH={V6l$vc&mpeg_?eXLW1X-E2K@ z0|32y_5-#l#7EKt&-vn!@^U03DhzGu{zU`JcE%JCy(>3lG9x2KaNsD$IT*)ke1~?$ zZik;x+4_DIts#$MILoNyo_h1fJ+Ve)Bjx*}f-#D>roa)vU+0Ycp~CwC&m2tY;bNBQQ6OKu?#8RtL6{{Ysim9??D*p_z^Ode@B5y?~k z0M_D_qLFQXdX1OI9-YDbDFzX?CdKWO+K8G+Tgr4}xc%Yn*YK=HI(dqdG_JTfTm#NN zl`Bgukog1zSuyhM_5T1psj5UO5%4~2^y)fwtG0;6o(_yMeTI1J>GY|#fIG>N*nkD!EB6&x`n@`z;Gvv78gmmkpaPj-eGC767uI9zvc@Tyxd z9-T^=v(9TWNXjcnPC9ittCIkTa^XnqKhH{{N6(vx)mUO+P;^W<}IC|{Mh+NYW(~Cur=?yWR3E~ypKU&u=rt;#}}H? zR?!~|#(9UZ!Oi&}nLaSQd&|dS`ObE(F~@rIDK0G`v}CjcAoQ)T73#qeX2Bve!+mRl zH#cBOJ&N$S+z9or^rtMPYH1(D*_~U>mKyHI?IE^cjARb~09wpzCy!Tqg&t&5jJovO zj+m(@(=`Kl_qOqY4hG|%PtvJbT}*E!TaS_~VGpH!4H($@$w-dx?Q9t&0a8u?$3QCB z78-S?*&oeEAG=R_RFw-y9P*jfi3*@#55}e%R130M#}NaAU5A{=n%Ok#XxeD;=kmk1 zwLMm5w|z|RoSF*oxYixIw>FJ7!4JKQ-WIB87xBe#es3X&@ETnXd`KB^HP%)YSN4gqx zg8u+aUCYta(DbV}MZ%kju@boXhpi?0+Rr3EWlxy>@z~V~)9q5K+{R=IF`j^XPz2Uf z*;vCR++)uYV+W=x^Xd#W3w@+{O`b8=igVgqtU@$|2p1clKhmn|T48|0BxB6a2nQGj zfF`@WF91t$0?GHiu~6zS4gB!M3;AIpF4VysPeN9$|T|)ZR;F-WxVYHFj zx&W&?+bEb^DPS@ARoiQebh9lYkQe<}^{3sy*^bsp0)zVEt7;m>#CL+m7=YTi+%b%M zPy=VxEFsU9t0R$uzul;;MXXW%l~c}HxhMKoVrlk~hL&k}EWHjp`c{qgnY6Hp;rUb% zfG9c5l~}|95DQj*pT*LW5pR1R+2?K2e-m{4t1Te9xz!KZdGf#;I$%?^J=S;8KiPJ? zg9DlXTb(J5>e}fNWtW!(;2)(v;@ahI67Kl|GJ+LH@nWn(_HZ|v!}o|eK7`h7yI$O? z%^=>;k`+CT09m$Vo6DYM45y-w*sGevQr$$i77Kz17(J?$mYY4CsM5uR>go+vp6Ty( z2@R3TN6>Vj1iaOZalV@(WTrlEO4YWVrGM2~J7K?OGHYh$TSbBwxg}We4k{TmyKA`-tlP*9jidZ(?xO_4 z*xKKK?T?qX+)xHxrQMay(rI?%pF{6cs+&z#O$Q!KXOrA}RTTRjx-`tbUU9j{Z>3*z zCH0~NlO{fQV;TC;1!*qz5pE$dYzx=i4wSl-xsEHhZKyhoRI_RqnMAq7oA?BF6)o|! ziYV=`Kxp3|F#Z|>%Xe_e_ie!YnCfbksgm+#Q2ziVL#{ev zudG+QTT-N+{Q;q$&_Nf|Kp_Llpes}Bb zP~J^+B8@FuA&(2vfHbXi^98FRZSuY;ME2GtS{w-n`ouibonLgD2Fb`70Qyxc%XtQ$ zCGD#I^Njxh`ltgwZ?t``Ic85W4>^PMV~6#tlWEbaBV9M#`?%=UpEjMR$1Y`*?j28Mt3NKD zs0(j`KBuWU^q>WJdCVr~Z&1>@=Zw#cB!3Dn~lt0vVa zNi_S;RdL_>Py{QgS!lNSf0#-BMPgc9+uvR0cku}+C^^O{H2X%> zXKC$}eE$H!{m?yV0jOX)huR&;Kt5hGin%RXa&F3dK zCyoAXr0fer0eLGLTCQmQOMElME0M?@D2&9VkJ&L3xQT^gM&(gJQZQ;7M zW`p-|t~W93`Bhyu+TLqfE#hN{v9YmR5sQc}(#qBMWPJQ^DMMmmuwCC;n`tG}j%0@e zr*528FE#-bUnydL3UgV{ERaPR+%k82dQ^8dPLZ@S&->1p#xYR>AXSYbwOMAkCJo&P z`Kss>+u55dG}>PW6x%bW!-T&cVyMqOi0Q><>e`LX-;*Vl6~}LC)PqKNuUT3~d^CGN z82h!Qs9#2BNhIa1)CL2LR4`iJ-rH_f``FLaR#8isJnM_TC6kOFLDGOM#jIOj!!#F1 z$>m5rb5FRw+KnVp`SC6`{{Rh8i%W$iS*+sU8)J1g@*TH|jsBz_2ch(!4OpO_@?W=qb}h9i_v`Ys{^HMGtqTh?d4+!bbbv-k7D97j$vA=1{zj;(#dH$3Cdctsj~r z`-AS(dYWopbTOkC*zh6if%U6a*OTF`pt=Ho@=Zx)VD6-WsgTwwG@j45W{rFdpD^sO|L`uWe1V5o`k^cIF|6x^CFoFOzBcM_K@@b#C@5*AX8f zq&QfQII7`ptY-disodPzCKi?rEb* zW^z(YIop47LJ=`H=V(pE%2OU2u0IhkZv{tMn zkIZmESIz(esXfKEp>-PEHo(K=JqAT;OAO8uC;1>wt?N{;t*nwIhU9>W{;Y}sw;U18 zxZ9}Q1~Zji<#b)_WX#j~&lwX#|IRp7t8f;!LzJLoR% z*)EEyU*Q?W65Bj>#pfPm#Be(8rI$^TcZ*I~wz~fS7VecC)|VCv(%VhGQT!iD0MOGS zjjf`yxqN4Y8+-fJd)q5}c^1o1O~sCP5Adg0UpTTiH=itzo<%`wv+ajcojlBBeKSB4 zE~{$-u#Nck^l$mTKZj~juYp8=*P&3q&Oma*<(>Q65LAQ(wg7xmel5{)Q zrqNm0h|8f-rJa?hWe)Ce-rki??kMb{5VB`Hh6c4^vba=u{GF=!EZOv^?X7I?Pnbu{ z{6@Z*rb8;nC)y%Qd595@ym8yLS-DtDqR!B4L)+IM%BD+6qp|xv#t|1Jk55XbW50&c zXNYbLc>~gebD*)YgG~nN*QA306W*!XMw)y<_{rs$IUj)SPP)2|YZh2OXO99r4h3gJ zYcecSNJ7j<%sprV{-LY+$%}OIlcRUYs_>wO*v$iPk356lHJ7sL=J8g~@3#PZRN~?E z_`b(`5hb(F(ttH2nJnRG{EwCX>Fc_z+g(GY*%^{B-m&@`<=0TTxRN-m(_*ho)Xy!{ z;zdvq-;lkIC<9AgmQ7aP8Lq!~yl0Npon-~Ins7yz%i4PmxU0Th-QJnD?}lHw=~<=+ zw6WTc%-G$IdU^`y15O+Jy++D(ipAZYFk}H zRTqC^5A&$t`c}Fu@n3zW@c{aF`U*>9nQTU@9-jb~+wU>J;~>=yM^0(365{S%g~vFp z4Nl@|r%O%YB7eF7tI@|Kvn{z$o?7y~aw&|b9q*BA9B~ok4*sUCYL@X_>9I(X{`G$E z6+#nfBgyAS<;QAxAN^{vb*Wm(<;@dhuK@>o0L-3wr~5suu2}y7cnp3OD2Crlxnp!j z`El~o+wD^Rn1g}MUl3kQw-!uzTo8I=Gy!fqU+r~h6~(EDWcSTB%So2z z)>G&1h#uq8g@Q{rjQRfnA^re8DX}|GbW=+G-UrS-N78^9FqUW->49+{1-*Wi7oRPj zoGqRlmFVEpA&snAqG++dsL!P}<+Kgv+bM0oaee*h0s|zMF?nM#sp@f#l=ycGb#L`T zQ-PD5*2E=mVpP8S=c@Dqv+eAy@3jXQ*$Q;Q`?LVNPM4^>LAR&_IPIFv)Yighiq=Nj z{{X~)z*fer){wi+VZy_J=dS9fapkl|_TCZZ9AWwaTpZ0iFTo*oxGmgK;on}KiN$iyM6J;zZ4r8wy^59*J~_%#(MYSu4)tN zK5>e|KyBRQ)tUA~ri;zn9X|YHxHXG^bsfi-VWtn4sh|sYX5vj%8q#c)A9oymD%q0X zPM#acEs1G!k3sKQ@WC#bW;Gb2K5F&NSf5elL1(}>KE_lX$5 z6`vxno+YqvIw<((jk%`oI+g5F&5<_VK&a=4SlgRfKX)^qz=6_$H14!Ji)$V6Ns%G> z*p8n{X$_{r@|k?ep8-GpRi|yO!3B%MG1#pG<9_%4N$-z_&?n zG+UlAmm{VsOUvfHwqlX_aVg-_rf;$8K%)6OxGs6kXIvn^A$;F9CglGB4lzKvw6Qu` zULuL5kZfj@S265O^GcimMc+S8J*MS*7559@GJJ z`M0)W=Sdq|)|+h|pP#bwO|u}wk6hB)+R3C%6BpkK=M_Tc%3Dk6JV7dMi@5APCOBuH!xoarDfTZUNKkyt zc%TN~&AK$2(fp8uf$LLRUMx{Lo=+||#y(o2G-G?D$ma_1{nMTZsPqN8y_V+G0MW;e zedq%9?wfRGR*r4aKT*>anxNS0E&v}v;J&*H1B`lA%gZ?DM}CEc9R2D>Hfs*(^RSu?#cOw+WaxPjnHgXc&0PfU+WvdJj6hS~`?EPTlR z$E79h-KX1r$ESbC#F!ZLpbC>{P-)ka-oq{m;{!b^&5PQtqqN+gUqe~rOVp!zEvFu2 zlYPKWD=f9ujrh~9@M0f(-hel5wI8$TG0z$EaoBY=oo6h%MUl?W4 z;n<2}=j7>%&uRSq)-4asCIc^SC^^mTK0&C-z9|$j0}I#+Tm2HouokT<+E+u56#;ZHPG^0+{g2lA3JBI09YgY4nS={oUf-v6+-ssPrD}S0AhUpAC+3u z?BHbkUYw=7HsjK$ymG-KD-d>)4m;+9pxn2eZOm_Idwl1y`c`+HZEY)FTY)G%K6t9l zI%)P$q|LE&@+cJe>@B6cmge{OYQPx%58*%wCFROPB%WUAxac~4DYlmuw-$~imtygf zf2CNt)$W?db)~-GgeiY-rBc?k{UTc!Rb=wW=kxZU247y!omc-h9sAA21!T6%=>E!az(vbg2(#~mmE&V=0m0A|F&5>fKtb;nAV zOpfnQ`%S!yn})zW`1Y#tTw7e($8z5z$H0G2!laV%V6v8ZE;mjw&fHK2rL5MIK_;Iv zVb`m6HC91tBwr|q#9R<6NNw)k!7lBXM-z4DmaMCtE(sv}L<{9_A35FA9@GHqi+jyJ z2oZc&A3Nj?T?;vK}P$ z0)R5C^oJ;#t zW?S1`M9*(J@AC#&`h6;mjE!L%2ZV)w6DRpr`7=OP;VuMzZ{vz4M!hk%{{S^1>Y!q< zV?s8nXY%b!xU0CEQTlHNy`wOacD@>aLH&($8js%0J$BC#F5Cml58_c^s&G<0tWS0~OZ5 zZcM`5x0g4ydDysf#>cgUmn4%vO@C)?ZhNggY@%_H+1hLB>t~rJFz#*OlPSmE9Ag9N zz~Bxm^H<;ph%e#Sp@5D~IrkO%OBpgUCD4usk#MJ^WP!k8{5Ty?PeEVDULs}Q!yP9C ze?jo3Guq*j>~z+%MkULkjLZ%`ZP^2+IQ#&u`!FL5BxB@7+s$#lVG^5bsE?a#AC~wS zUu=4I+I!bgZpzUt(tLrj^5=K3=fA(Dd<-4Wsg!J83e6yjKa^vZ^!ig_gUmY@_jyiM zp5cQC&lvRf^!BFw#}a@t6C88^e_H8ejWfpZBTLJ24;??qu7b(#6Xyj(DZs`D$}1iu z2_k%h3_EneAIhsN2p1|!h2=#=*SZHocXIQ)T!{*U#y*|6s)`DxF^^&ERiT#Lv$2q4 z9mWT>Oeg5Ue(neZy;Z%?Cj>^Tunon4Jao^ewMyy&v`zQU0Q3M=c;t#_1qcIoPeD>4 z47>X&Do%6Klpf2mGT67gN)}8E{{SxB)Tm1nxkzF6zosgzK18fk=O7*raoVg~l-k5F z0F2|F-LYDyriLZZ*%)pK&rEb4l!e(~@}wXt{pB6KDb_w*{6=&B`1`r+DvivhHl9tT z-AGY_IIg(V_e7CKP_gYjbMrGd_iHg(Ztfie1|1WOWP4MknT+6<2Ws@`ih)rjV-tPX z^)vw@RKlGsbX!^)~b% zy>7-vjw83q^aIn@w<32?#2gMzM^8$^L%vkVC2|iQpVGFWDC5cdq0K6`8tq+~^4YP^L5lXNo_xt9 z^7-BJjPM04Y!t3!+85i_mA39Hv}ZhXNfDHy4WlibXWFzgAe(Hsk};I%ezee3MiG>* zIx*>=Y*X7V{#h%>VNA&k9k;5l9+a+t+g~dx8pRd;>r{DUE?RWY}Gp-66+dU5N>8f z9D)v8kL6um_Nk=L4q^MJfw$Y%xGVd}ElEv<{{Y$Rocs2z7CvicFJm6ZNuhjh)O<0FnSUaf8WS8BFX$76EyN+gTT+^3O%So49$9<}iXrxT^- zaz0=>9+>v+`2krb>-XgR+%7Ako_Ss>*ED!oK8NZ~llxL>)^>LHM&X&JINA61@y6_O zGtdF~V>tF5C-$_{8%&DsTgZ|};dV-(4YLH(2Z4A8%5`zy`YSF*TZLY9x_TppbFuT}8( z#``U0k*uzm$GZVe4({Kje>fUX#LZtsh(u>-ReXHR+mH?Kk4hGDVNfg9-{M z>yLkw^Sh;X;W+JWRN%yL#VVf$hxAx}BwAa{keL!ao?(Xbfj zl6rBDEBXAj{jF!xKXj5ae;@AwAfB00IUkLBevkWRs#`2K=v3n-CU8-~@9SRX8;WSu z_)jjc3OFqp`;!NbtzUpbP{GO#~(`kgz(4hU!mVfuXTS7nZPAi zECB72MS8;i)P5MZK&^idnn)WrVHo!3wR)>FgV^%r!_z-U*IX_8$oWt@^G=IggkX|S zt~!3T@Rx-D0BD^LSwHC0hhQ*O7&_N!AI2RrXJ{5wLP+X%=kPV6#Ulri)Ljp<{{Xh5 z`zW1A=L5A`lTn05(g)l}VT@PEmj3`3v=u{c(gk!NV`*XfR{f8}t2^@l0A(lyKo<;l z;8yCqOkP`6bUvQ7)#8w1U_O;veL@eP%EfpDzYw&GXBNpYEz!X0tUX7)O&5(|EwmDM z@T71v?t2Pxaa~P4gqK6ytu-R9Ke_5D8KIhDCd7&lOjnYR7}%Rzi)e>vA5+bH<@4FkC=3P_dHU5f zxwN*32-G$XFuilqu@7u*-Z3^GW{*Eg`J3V&gzfdXpHI{x3%qg04;AkZtN;wNorA> z03#cHJ6G1e9MNL6u~gfGfE(-DtH*g`G{XRJI0CnXKhuqK71rUu@pn=we;+s_ZA9mo;7qd@nV^!Dq0z z?YFHK1yuQ-+u`lqy{V2!QcNkx_4<7)$0zt@4flwfQ#R*r?s3O#W7@w&aRVWPV2`Fa z1E{Q{qS(LhLIuzCtS)pa@;*qi_;75~&9`0{bH9zeW3^?)@SZo-1<%<_0!Jf(^7>cV zzhu(UN+c?Y`Sz`wD+>{{N3a&-ib3sPW6FFb;ij;(Xs-}?Cxt`&HOOoJ9Y)pwjWVaU zKJIJi-?GCHWM%nBLG-FJSlNaX3>F-7(~9QuyIuK$U4(Fbpl?=MHAva3nKai||=cn)nkM>QnU;=m^_2l=z3Y+bF?efdVBOF(? z-fGb@?uEcyDLL*vs}fyu7#nPCNcQY2hIN_~o9J^k9t5|wj8R7%j%tf|iZx|L$y@`xR|ocmPUh;HJ6JThZH^FNj04l9M?98L z5rCpjJA2m>{wKPP3acp@`-iSNb*^UX#kyi=?MGu{B~MPc>MA9SzU*#|hV1N)24}un zYnHi0z+wsM#ap}8eC8ty^K>0+<(of>R=#r1vz~rI#u~Jbk1ZmZKWS%X z``A4zmlwq@c7!B#!zO}0!`6N(Y5rnEEy$C0GQZtDg>td{SdCTWlPa-y9^L-{FG~5D zZ@$sQnOR#3Hw@>{)p=sPaQ3opLO@=6d)J>l&P{I3qk)3i9?^I4K1-RAkcHcj5jYq< zH&z_}J=HG(Upr!hum(6$j{H}h+vt)@wZ=x#&u*Um>REKj)$)KjBk->-wQ0RiN}VNb zj*0wTek3w^fR*`(UWf3kgW{b^T*|KeoRB@bVzZ>v*4{m(8+LLCJ-t1t@#*GuWrc7T zr(>T=&-+@WG`)_f(~n^%*Y70}vJI`AWFMOz-eCmm9x{plMjaa$s{kn<|wXSg5N>GY{$w>I${?dy!^mG(dV zYMl~5gv4-E?Orp-_)-;Bi1{oTPhYQ2J*&*AR@?qXn$X+%(fKj~gUBNTr>#$A;gr-R z5<4_3xC`7LP%4$B<*${NWjHuF=jc7_x$ynmml1Aoti)rdL;WdENz2^>A-pd=yZx=x zXoL`>+Z}74xt7r)!>`Ux)(gi6`d6)9t}Ml~a@#A&_4|BDA`iTsn1Q%gJmGlzrtvXR z#3uypVZijs?V3`tq+&hn+fPj3U~|@#Jf(^ZI{J3w*mtF1TMPGqBey5mk4nva7X1c# z2Zv=}AjvRHdVSr;r{pWMzJ?pCaJf}!2HbV$>Fr)=rOcMlGRUm?#>40bP(3TXj^XZ6 zUvT3edx3%IdsgbA?|&dNTF&ZIy+Fe7?0=nR7@}UIXdEeCIqSuC#_G|b*srikI0N_y zF@p(%U|8czhsK(88`>j3g?`x`F1)Z5|k%u`O3;y7|*_cr7l_}C;&xn zjClcZRaD0uZ5(;RHWN7K-lk6|$B~fSf$5KN?O8@CY|RN}mL&N(Rgpj#;QM_kSSZ7) z?pU(CoDuZ*rn(ljQ2Ty!w_^KuG;WM8`2KKu41Ml8QudEcP1eF8XDcGfBV(O}0B}8f zRFXO_>xEFb2Lt?mwB?LU<=YC0kN`VJ<4`Ff3r4a6ojM=L^y0Cw#)1!$kq`uA ztJg0i&xOWzfJgUFIqBM&35r6&Ka1uA1F+(nu2~vAyLSFzzP^<|Yh8c=R0xXXo_Qk& z1L;mO$ltttkKy*uYKl1A{`4FKAT~P=zyDJX;HVbFS?{u%`Jm7Zr=e;(~oLa2eK_g{P%gM)I(wizI zim4NBjy^UH04MVNsY750n8k#JcC(+}0oeKh(-g6fHCxC#N{* zQmD#TAP#sVKD866kpWGkbLw(t4BL4tsJ$&mr&D=hA4&j6A z?O&(9I=)RWN}l!P`H>2LyTyJbd|=iZ?^?O?{%_f%VZnP3a%mK+bI ze{|sK+6f=Zn5o`u=e0QX3tLlm_gIW$RCESa=_EW$f)z7w} zBzICwk>v(9A4<}=)Nk*iHur1$z6ze0pbZ%B{EJwg4kJInI2Ana1kQB`*KBce#BS{B!E>1*~2B@@3yQfLCD^cMdB*$t?{(oQ2@hcykAt^K~A z6BF|e-&(f~)y|=+h^540E~$^@OuM|A8TMMP^&Nev0w^^rS>w31o;{n01o|IgSCwyJ zw3TF&a>dBwo@sphcp_=%fFn2^Is9s^oN{XtNYO}D2Lzsn6aiY=8-gBaSD1$^YuN7H>#Wr{YhOCRoWr8L9Ckvdg&q@GteUj?fLonrs-uhFn zr-B$yNI-j%f5Yj3g`m$?VY3fPdwgR zfq_p3Gm6pa<+DYU6OSFSPMwe4Ezo9zoPo9AaErg7SUFfO5X znQeq8%T7>=y3aaA70tAsa&%P3r&@_`ZV#F#UoDRdnzf<2yo+e@an8g1=sCq(*iFja z&6QF2i2hVxPLtlpwYP5=UN{1l?&ikdZJn{hCj?@of*BShV8J}GlpS+G6;{GX#GYiE z$@a!QDYlo75Os?pnFuQYZdzJojFh8&N_6bL#0Mh-CqEYnSP%1 z0g}2*C=-0!0O~r5)4rByB#%$DT&sbfda1T8J}f%!5AW$$E$<_oE#E>06}>0|DI${7 z7FHv1{vvu0YIWX`6c$1>LQ8$_bBfTt^4bvtN#^-nxdR_c%+qgm0>PB;-NLRqPz9&b zpuW>FBkh(hfcjP(cGo5T!E8LjeSHOVg_;zSYqR^;IKUN%(zo{7OKfubz5;91IR)5uy`~95iMynb429; z>X^^#R({v}=7QmjVgBl4HAcn_LIL)Bp@YF+r68Zk);G(S^FCk8(ts9yB0FN2Hbek= zkMOOewHMFjUELDNj)S#Sj@Zq0ADX+7^S7LBsl~P4mnyrQi932?fFqwrei7vJ5Or>! zPAcKB)L4mOy4@Z*AK zK9yPi)pK>`Or}^P{tW%xRa+T6$QoH~ywNfH*~d!Me?E1d2;uU#ZQ4gX3INTLHjmEp z#?)dmzsj^NVtW=(Jvxp(2c;}_-)fHP;%Iv91D>^Hpj&rd1_wRx2TB07G!UC_vTRlo zV6y{^R97%t#MwvK(EY*GHD^N=gj!*mS&Ou%<^%Mr&uJg}HHTb-w9p1K$vuppY=Sd4 zoxvT4;a99Lf3oNML62iTGw3S!llFBGM!>Qj{{Y2QwR;rDg^z zZNf$Qj(TI-qVmu7PHk6wZhm9Xu05!d@@+Eo++0cL9DIWq6+(M!x#5!ZFW<+?4lq8I zk0Uw_%`Wdux_>V1&zhsJ(vtcJ?skO$$cN>@#zj+~Z`#(%-{mq7m4NgeDYi#XTV!jt z#Hw(9v~n;l+()Y{0wE66HyPwIXtb5w-cIFl z@*MR1J*p#Qjw5-~IO^Hy=~Q(WSY8NWkjWzF2cQGewIJ5h?=NkHwrrwB9S(8+aamVh zL=Bx*ZhwV9%|mSgkz~D(_X+FPrc_3agpKBBsK@1s0NI*Y#*_AVn-U*R!mwhrmj3`u z6I_kHN$d2fCcK_Ic~{Buo=j{#dRCph*E4C$J)#25_qzj+Y5;>+nqveK>1Yb5`SZaz zqCG|nn>KxhCm?M;^;gQcxVezuCjFxbIssNJto9LScOb-{!_yy1093P($rQ6r0d83O z*0i^F>HF>BSE9Bn3hPT6P5%JeuJRz@BK50Mn;lX9&1)Dem@CdP_)r0I?Ry-bYQ%^K z$iw9(s%SB+3fEGPE&;~FN#qfHEH64^lh{(-K_pQqM*$-KA6fuQ;|#;gu*ezZHuR?@ zmA!<(+(+if!+;M;*lEW90JFP@(T67;DWcZf%@1mDRQ$)Tev|>vIzZPxRC!XvmBw*W ztkx+ATSmjicx-X_iqVogd9G!iSu>B~0~p0sg{|dJGS&^yzux+a0FGODZxY%!n|y;L zFc|$RDcuUnF9zn10H0A)SsQD2kgEXiz#rZERF?KLLvJ*RFfG>vPz5V}ZHld(v{+1I zeP_#kEt5L4ee=hB)6y%ei+?Zxe8b2bZK)-*w6?jCHinl2=l<{EKo+#^M)p++aKOgE zg1G7FQO9Lu_9x7P&y`Okwm(XO100cv--&_kQy8L_@%*_wwup1@ngF>zon<0N_I1NB z=bn`N*iz2j9S(;cAOK4&XYx5X!fsegOeQl}T-6!tKh3LbkK9!p417+23 zZEj(-iXFuDJ&jtqTkB_eCL%N2wPqNv1hGR4aoxU^HPx`5Lw7uf=D^$NMJa56t!r;> zCS{$PX&dmxUWp*OW>jqCbDo10CDo*D3cT|LT#P8K4fkZYd zZ2;#u-RLUpzh<>$(v~p$@%zl0}Tpjs`Qq^c5AbrW$og52!(e zOaMJSDlNBn6Q#A%2)y2n>?k_QOM7c3m$uFPus-*ws210Kyk=%4e}~ln0EJmLo=1}u z1WOs+wBs1XUl%6QU$e%!k%!DZC<6mdyBcNTkfsB4Z08ly+FgCOP!B7HjX}xB7_5Ya zF02`Ch63{3RmX?Q(bXW2DK`zyF^T|^Yec(E`f>nHcJqwluolhbUm`^+>(d{_S~jLB z?Tx~ziDDRB8lE#e5JxUD#Qda=lmTQw8V~I9zh^vgobg$bHlJs88%DU<(Y=2Po(OJ+ zpl+I&>>i+W z2Rrs6ewC3ZHql1%4a_)hKPmuJON+~2wW;~z<%eo-+akBInJ#{J7#^6yN%XtivTYm9|&{Xu|fG%1+g|?U{kQD@c%6t7Qn2uet04>Q$bG38Uwzkcw z>Inp}fFk|@z^&`4^xGKz&PSMH{Dyl_2mjap6fPiwd&Em+3gZ|#`}I>*7kXn8A1Bw> z@TY%e$8UN*%;XR_=cnUVC$zbd{{VX17dZ;)ewY16Xjk{mGduJbXA8KPVq`%bU)lzH7cfLMl>5*4D+dbW+ zK3HGjJ!;bG7S~b3dopH7$qYRxg4Ro^#n`*VN;nw(C<89`;@VA@_f6(W{7N{@S({SS zE^Ic>`?#O|Q1r!9l&rTtbg=o%_~WKATbE-`D;?F$A0%VuP=D3>Pz6Y${?!cOe2$xm z?kYf*Uu2PNBhQh5r{BFLrMS9BWcgw}ImZ70OjH&TEu?Zmc_v6dGLPXMr~QUEriV+-#Eb7!hjih zZ+B>8P`LRzjd9x*(OA8Y+eo#HlK%jCkIRASS&&;#X{e-%bCJT+?~>^R zlHANU3~gLufFFHkw)av=Bm~=@+3!)wb*HYLU@Bv2Iwz(nbnQpYhG}&d*gY|v{VDgY zXf)3{JAW(wdB0r#6afvY$9!bdkm3>sIP|TXDD?QCn`3;b@`2x_RnYHZia0GMO{H>N zk%L*2YL@oeg!dMMz?7;kSLRz#a!mY)l|TOW8)z zo}<>OH<#x9rr3PZ4n61tUiKL+7C$|{(!RA`R=S&MRtl;2RMnU!d32d?u4Kqw3gZ~6 zR<=;Q$ZkOq4vqDo3Xlly?ep!d^`_-4UnEAG0w;nJ+?M=S( z<1j}7+K~^Pu|N>4^ScP8>yd>$>q2{LIc^#<`+TM4RA=(0SdX<|tXKa4yJQ@3_o~H+ z{>{CS-ygot(bNDa0*;(-ZCB)v&QboUj~i;N$Zjsa&v)~mU+&hUUrLJBINWADI2Z#R zg=5Vn>)joI5SZM#pa(Ux+RYr$5^=yar8`~QDAXSS419yVJ{!5N&yxfJ6*{s1018b` z%1gNZMt1RX8^BSF;@+tA$+g({mvq`ms0HYsw z6<+e%?tMXKjeOX#^7hRDY*^fjtvzg=M)Al`cC;^ zf+u%5F&rJfze>GnJTu1>CLO!J=smGO6fEr}y$L**90Pzt^sR|4EMGcwd`NNgV;RL) z)oy;sBQ`PZ$5Wm^Dy6<@nA{`pWb8fY16)gPH`^bT2*y5@R?_C*LxlO9o1E|la4IV+ zSS@cce!Jsg@~(PTgnwjde#sPhUim+upbGZbO9#A2@aG&TX@p$H3#RYVGBz zp3tR%^4JmbXSHPqxr%SINZ>}pt~yW#oZ9R*GPS+5Vnu!r_*Q(j7f&oU_gF}eAZMm& zmNu66Hc1xz%r|_W-t^|KT50yT7F+cdD#Ncno|FLSp*B-oL2dFx_{V;gPH9(2zA_ka z$&5@7ueEAHrulG~cX@FhQ@P@jGpAq8FV+;MqZ zNep`J_r)aXYPXU*A1>JkC)TmF*shY&WVHF#PrAp93ION@?Y^fWvTXdg#F(qa^xIp% zwlCf2&5pgQrkAZ-MiSclffzqHUbO??#Xj3sLg9(Q$4^QQa#`)aw3=A$+hRxe&Oa)m zu~=#ru<4ePA25@>h`{2se2c3)XP#;Hw4UCbD=SgAxm>ES-yj=t$JT&0H5pRHVS`UN zjWg!srYe;85fy982F!{%L;O_)`fHeD)8;#)Zv86d%r?SgTT(ojF@e)G0gE(KBv4PS z00BRhO?jxqm(eI<@N~c##Y1>r_crXlYY)181!~w^+CytRP)rsDdkk0_!66A5)Gyy&A zv%?*%vS2HFepNc8POlZzftqY?_WD&ux1F^3;ht`|F|VyVQiDi=p+a29ytW7UPzIbj zdoHWA#5}IgoDa&Ge>2GKq{5zLNIvI7MXJ85bQ5Rp@HVz_f-21MPZhH~pS*B>W&{iY z&`Y)heJwRGBadju%$+`!v9{7l-Qi%ej-$8Iv*v=*E5x*)4EQ^bPPD&ew6Tq1EIw}j zzy7KKsBWi+%t)8ZMEm~${c5iaSGuH0bu^w_ai6{E=~9t#I~$l|-h-oh)0TKGqMF9q z12KF9?VoA@*PKf}jBo^-xJT)`@UD8s9kET^}*gst+C7&!!Y z#XDJ&&gJ3qepCalaZQsUbUVv&s606(2l~D+E1;e2qo2(3Llx+HS2Y#%Vo2>Ix4=RB zwiMfaPUh|7is)@cCohl7ipFNt&HG_%X#w*e%E1Il)qiue<$ntOMffkQ+G_ezLz3@~-SNJ(RmLi_ZNAv#xgJbqS2FKg?Qa+uXZd=Zg%xBEODYq<704F?QdB!WD(ygIuf3#Zw zWl~7p*@)m^`d1UC$#ERb_Hq(5UBw69Jr5((>0Ne{cD`aOzU6GlcJM-hgPe640>7T= z!pS4`X|rN*84NHk;=g&mgOiV~SGV0HTR;Z~jD2~n8H7{($U>di+y`Dc6`S^H_`>W@ zap-yCx>~UV_M~KhPTxVtUf^`AK*|`#6-EFf9Ah9e$mwQqB~S z4&}z-&+z+W9^I*?*cCRAfw%-7anl3RrG{A0sQwJ@>5tN`URnsE1|zmH^7H*GA;ZAA zZVSxG ziuGHxR)9d!vtm~HP6CoWs%_xiDZyfTa60>Dn$NyA^7$R{#yu#Bqmg{sTocX+>;+*6 z?<57K^W>D7f{w@7Q(7qFA^VP$)%(ISN6nAJ>sCUl$P#{EJPw13>7@CWF)W!Gf*r@F z01DQO#Ez;@J9CcJl7u6akmb7iW7yV>tf|bAuKmh$?d|lhLklZzamd-VjL9enq?J#= z0oygy*=1o0WZ(cuUZ4K4T&;)iTWQF^>6`)o0P3!mIc9<)80`w%v(p*lr)u|TOGApH z5@$c-w{nWdL@R*jLX7_a55J}>qu;f*h2607-8iO87UlC4?Pkt5boy{OqmdT3IV-ISDBUNC zL5y%f9ew`*3dp?CW|*tH7_fN@jBWmP+e;KvHsSlf?{SWuhiaa`d61xN4AGd7Kf7GY5Iyt9iKnK0rd3ru5#+bQ#b8!K4Q4()96imwDwjKz)@p4 zVTD8YbL&|*8eOw1KEkd57#`j0A8}}9W6mPfbqz2FiP|@ASP#3$Ld(;R-kqw){3ZIY z+1SY;MkIM@5iOEA=uSA|yB6^Eoao+iZ}%r3=Zczd4#gZFX=HfteqNowTIl}Ks}F)& z7b*#u`cK495NXiK589eByC-PJKZYsSUm3N_H`#AAqDeU|y^5YO_j8Yztv+83TF(>g z<)-fn4P!)&*K|zE zKrZ2d&-)-8k?YT1*siZa{juKS;cfMs(KG$zOLYsh{W!t>YxDO10Ks=gJ=m5;Bjm!C zKIfi*eFb6v0Ky5Xv~y0IUOWtJ`Ag^P`171`(z+;dg>B@~GQiVc3{m?PrvBQ#64T+0 z?k@|DpELKye?L$^D)eg~+V@NQDY|K6Wx;H`pdzT~G1rcthHLN)cvDtunGT$ear|9I z2SQJ8YStQ8i!C8tK?9(iZQ;5uF`Q?i{`X$ptJ0;$(vHzj(b(~)kj7HxKcGSTS?QKG z>n+vD^BONStVB8wmmqE(I2``~D(o%)0BSD{+$ei{-REdyg#%{c@`JcwXBGVIJ?D+! zKWBw<-aTZ41d+Q z_CKcK`$On9(*2juRhtTMz~cv@9CSUn=CvE+giDE3G^3zZ7-D?_oDbz+%whQL<2z}@ z^IY6-I3hDCWWe?5!R#?x7QeL*#GO7*F)o@gK>)7h3c2HM3F8>(KcKGYaUB-5xf0>! z(I3=xkHs4+h_}f8Q5{19KbN4W+v1jAP)=D0KbN>J%FZF(X59xX@ ziWVo2H_k@>A6YDu(Hw;;dKDxvKTlfzZ>&FUe;Dbrd8w#8NZnTm7P{2^ zv>#NKTS%mTE?ALeoRJ%bLy}dK@)&NNtD=T=N}~54;bS+D)IX!&_)RQfK3vQ;{{VM2 zEPDO5&}l6jjR z)E*B`Ybj@xle3kLf7R*Q==~S*e~vW!22={oQBe0wB~ zcIA$K@an27$Mw&R_J3xY_fnQiuv_?hlgB*Q=J&>58fj2!%Xe=x!z;?pownnhtTXFg zZa0b5KjG^89dt53=Rcz#hrbo{UlhRcOL9~q2{!;XHb+i4`Au>^5WjCnVS&;5@m)V+^k_h^?#(Us)`gE_fG*61!e!XQR zmQlL-WC9=M{6}x|>0i#Kx#Qbi8^nZZvY1t|hvmL=!Oyot?O%6%GWgYH{g(^e$lEwl z9$r_Bb{$7Qg-YW7YP_o2ea4uqm+e6xa{NH}mYP(Pw8~GDf&+Fw-ru0EbHiU7ksYJc z{%!#~NXJi8$8Spc_r{(v&~G$pp@LsBc^DK@2s=jujDITlOU3>$)ik|gM~TdH?gh+e zXviFL5AqyR$MJ+I$DO~Dv7R3&ZESx1cxT4bUjZ?bcj1Ow&+$)>Eg@eaA7Sacjz_0G zKMMT4_*?P)*G-R2)vnFF@TS8d#t*myl5vi4P577bvIs3COFN|6rwU2ukMDK^(z@v9 zk(_zyv!DAWN$QWQ{9*CR*G+fxWO)|^WIs7xn6DwyKWNKsOT-JO>7|z{6fwp@Zr@Q~ zow}#S9UEV|du>W{9Q*dDBLf|X_N@DV6I)u|`L_N|&B6J8QdP0vZapiKw-?4bNbZhR zO{4eo!+tqit4Ko=AXFG9lla$Bd*V1F+ak6jIOHFce}#Tod_4HEC7p~=J=uG8A1Ud_ zvF~1is(gO1vsmJqUGNZcRObiWS8w*UC-3tly-r7#Nc;SFzTM>VZOXVE54V5Hwe0*& zZwg_hkK3GmKl;`AL$ChUIwgQ9D=3OCK0}5l^8BmLwIACS#Q~buc0R$Tr!uw27&C_(SQ75IIre%-n>7O~3>^U0r> z`97QvDv_z*N&~>7#?T*2W@^8{{X{d#}-QJBIa@OfZVn*fB+jo1JHD=Yv0>a z`WuMMo=dheHnTD>ZiIo`^sMURnvMSeA-t+rN=W_P)I4*g`QK!|b}pzJ3VVGxKc#Y0 z{7}(gxEAK+1pffSjCOJQ17Cyp{{XgTp{w4pl*_%2!y`Y*_$p*#p+B_)!y`VP&Z-VX zjCcIr+p2Ke_(^k<_v;Gxu6=iq=ubB+@?d87j)W@&NDCuN{Z<&AIrW zq{5zU>-l7itY`0jU(4FR5$FA@wQHMsRw?8$#;RIC0x9S2>-LJgy=i9C zq-OJ5Eri-IM+&>iI32rzM0k>)+f5@_0G@3039^h zPV2etgiO3_ahm*ZzWC|li>M4i6cxY>a!%jQvj@c=5za~76htr|a23a=T5`{@<4Fa86tBNES@jK7=Sz`r%98FUJnd2K{Hx?~ z8Pk6P{7$-9I%xeQy!h~ETtxd7-_&G`W3R8ZbCUdMR{5^fv$o;>99P1y-d{pNws`I& z#?@&F#v8cBIxD;L3ffEiuPsVAUUP$v53jXwRL9ho@A5ZTNcKLqo8sN(v`Bdff+M#8 zjE}FU;aJ1P@|g_FBR6&h#_Nc-p*qngbCm`eWuBh4H2-+)9Sw;hL0qfeh zo-(rPbu2u49;!TI%)0?Qv%&39{{X^4c{FViyOgmb4ZPrf1Jbc>M*=>`G7mu$>$iEZ7mN|4~K$BWZo>)E&#UQy~!I(eB6%t=~oi|>fy{M zEKeYVzys;Pu4dB47iU<=0TvCPgzO-0AHcg zWIs~5+n5IC-SaVGeqrg-pJf=42}6KzKyEgQt#!SfL%G=_WOnKJeigTGv19XP2RY!3 zWq$)xM)8%_%b>z5T$WW(Sg!}S9fzmVwzQ~VkO*#6fTOQWdt>=lW3sFHL|}XKf+|+I zp4bdFM_iH6`w!(^-&yy$_WrwA=Q>ogv$W>SGj15j#{;0EPcGh1E>;bUeeOu@^sH~U zOxuv-2Z9G2cJ``Xe#bsrNVhR%fgFax{{YZx-f1l~w%^r}(PN>$omx~x`4o=5 zFe?&k`!j0ZR$Mng!+=kE!n*V4xNFUYUF62kPw*7TC3TQ7<7Wh(*sm`ijB}s5zpv`% zkcp`NY>|Y8WO2J_UV|9x>57HaM(q&jjkg)~6x)?{Wr0+&#t9A74^S!UITI#T0^kgB z#~o{l>0_*pSOZGP9Jm7mcVcQqRYVGzJBQ4`XCFaQsZdluQID8%4J2#j<|JeHxl`%= zDtVQ*0tID+7~&)o#zOTT)!ArQR)HgjoGHeC+8qzpxciAMSgJ({3)P7|y{Zo|rO0Jb zwK^};*WS6Tz92o8OPN_(GVB!e&m4CGyu(tI-8s3G88OCNupI?DO=fM)Ap4om&F@)P zQk#X`{O8kvDf1l#c4tWd+FCuIOx3#&^+7V=sQ~OXO$KKHw-Bp=-}3eqwWnLPz}iy* zNC%z{YdN%$P~6bAhDitdIogYyw?U6@dgwmfk=vqK?P)L+0y}zEmyvI1k*rD;RBa%3 zJ*%43?jg%SzuwLeV2pZJbB?w)Bwb(kfwA9jJZIJ<0SryDWd1i{p$t~ zjD0cbN8cwP4Y|%U*Vdz&P5i&Ehe0a5b8p#|90ByjTY@)oBiek-9-Nt5gLQvB~}Ffq{Uhw;gfPsz|AAC=d6xgP(fzOQ>Lu z-DKUj%^3r33CHxV4*ethTPf<_!MD@CYZnI;Zni5g*^=SB)E_<$ahh_=EN}CC+0NW> z20e#LWNrvCyKG~~82PcD!`7XYiHHD_IrOIXOk-06J9ump$G>WHnNU3Bal08~>Nv*~ zfTr&;TWb%Sk8iCo?vb|4*=E80-vP3Fk6Ov;pcYZc+>&rlL)bUC98^oOV)C7M&r!(- z+v!O1uLdZ_-tC^FK7yXR0v22WoS&c^f00vWtblZq?2Qaa9hac~9lf*fQo3dKJehJg zH>eotjsSK+iN3;_YRM!mEM<{F+6r>H$194J1Y{qxF4FCsHw+sb{sYp4nY!3aNcod) z)*XA~j+puil`YN0gXTMcmPh-P?|jz^WoN+J-j#%AOfXEZjJe(HGwE3c+#IGdNl~>hpa zEA+4Sr16)N57;Gr;ACUczbQ4Tt|ZpvC+>Fl75)9-Hbp!pT^f}h{{V+Xe=7KynR{GQ zk7I^&GRl*=CJ6cK*0SbgyDf0bu?J7-S`u8FfpH?oxEu|=KPu;Sn>od?h8c0c8$kXV z{+FR055+4zNnR*XR(6Z`s5v>T*`avhj`r0^W;n>`YRoq5k!)AM-8>BPznHR+ z2W$$tBp3Eutu5hSFZf)X&;}F3V`X&&sQzP&@r-q=_P2UXyoPyTCPnM)O;M3fSrn78pS-i-u<-3s8N6))53xu)p-GHxVJUnsRqXk(H_p zvc87X$@1OwAB|tPNs~`)Ht+@~AB_h&srFH`eXL?W00Zk-gxc9J*cI?&$^88)TPx_L zooyx_SoQSBN~NesuwF|dTKUB>&S(MeYL|AKdMs)=_Z4jGv_dQIh30nOQL`-GI+Zp=%|wUZs-0_8{)# zr?qHV&GuN^b9s!sbmUd$)1bAI3F5(52QE8M1_ajk2HCX@q@;yL-ngxaT1Xi#Crqqk zCvVe=#)NE-?3UAHKRr5PuEDB3{Hdozy8s_E9{8?+9FoM>38-zTS^h=tp078P{5(ck`OR}RQ~{NeLjCQuwOr) zr{P$Z&i9Kw{{H~I!F+JI_NA8EJM@j?ZK{|7k9q(}^_RVq$y}l@-Z=Z!4w5D^PV#)N z*xScpT@?QSVu=BbLf~`nQt4L^JPj$piH}cAS2!5<`l~?kr0QKzo!nNzzP3o2;yG-5 zt6LK!3v4eHLJvdfTq51#;qRR`qx2)3d*XlzC;NO$Zz=LYJRYF`0EKAj@lL5EQJvvN z8@2^gvqbVRi@W>2j%cQwSp z)tAaRQm#&FZ7Ra*+BS|yQ!`-p=~C*^nH)jo%Gyc9!=b>0i8&e(=vvr9L~)wr`F^^5u(!^dr7#0;!q^E#b0-kEa8QwP$vg zw#+A!5*+7_!_u!LS5{2&NUN~mD8)p}WT@Y5n zV}pT=8pgf9XzvqFwU=*{Ipd5~+sPn0e6kLVdvSwI(lpy?B6g5%l2A7H%>YromP^ez zT!q}RoNlHq%cKQupMKCXI(4g-@R(vS#KDo98&9=V)HN$hOVj23*3~-oUs~ucqW!{si)fXA%6imLLXpV6M0+G4?sLxC z3M$)LTg!BbaW9wZ0L^GHiq>%zzZnPS$E9=b;y4*>+{-JTGBJ!+gwbj;X-zS4<}X3* zKoC3J`H@R>NlCM@Kf8+8lU0XK+N?Jg`=cEzA-w7BWAkMYOCE9Q&1c$NN-X1sWZuzd zdGtv~j%fjN_>wN}5klHvg$oBOu@A52x0k(JcxBO))qA8NZ}F^1vfkut5q zuWo1omYS`MXAyD$!ask?v2_LeG?7N&v|N(^0AFgJ3 z;|reE&~uOr_za7KvM*m>YSFTGOLr2*v2**rMk@l>`#$d3gsG1!?{U}Csa!;K>!{+J zK0|dQngHtKx!ZLcH^`t9k6M~@Hl+edrm&2rLC;(o%e7b}h_nlaIN6%#?vhw;T6te* zV;JZt1G}<=PqDQ~Zrm;j_vWkFynkw)lat0c;NKm7cZ9W2 zgXusV)}t<`Ya_{NAJ1?=+&Kyzff%Y60iS}|JL#SFH@ zWt))n0hez**|%$$Mgn8x`q6j=<@9me@^RF5sbX7+JnOrM2#7FHdQ`Fh0ANLKE;RWH zO~(XK0$$!Yw2MZ%UormxzuK{q!r{Ewr){d87*&lGZ{E&2s~J(u1%8^06I$m5Ng5_b+KL z&U$8mEypdpUK>5TrB0{Tr~6!XG9{e6A@B9752sCiI$qg+>-*f)mv*p0E6sfW03gOV z=|BY2B)2lehh#C1!>vVWCZh~qO3XaA>Z7pjS}{Cv+e!+6i`BopJ5?)qQY%lkT0y;^ z)byYXtElZE*>>&oe{&scS}Ut(g>G)!5wE9zYNHLzw;SWVApqzx>FH6+HLUTAR2)C> zeLW}wJ7{8_c;o4RgU5D|Xy|>!8L|SE}X#%EX$I88hVm0NBmzZZwkJ)eIjBg@w*>?+cm$VUg)wymeGN3Na@z8>NbmK5!C|%4o1P; zcH)33-dp{;A1)FD#52deP}1#;cJa$|%M9%uHrAG#r9Hj5n8}uIPpI^(&0{J>vr>>1 zf4HDxvy{3ZDQNehJj7)iT>Q=J^c6L_I$uB8V+$S*b5%qvT%=KXQbqR^e-Np!ZcrpG zbpebg9ebZ@%nT`2njf{9`GEc0bQQm(q>`Z2FboVn>FreEiqTA#C4YA=4u8E(xAJbK zj@Bsg0_Tk4fGW+sE(F?pd5(Vaj@b0Acy4tm?YyhT2;GnP)l}1N>~9u3W)SYr{{X6} zPRsqEETm5<*yXw7iU7T)!<(Cho9`(7-gvB=8@9H%GdyNrH2kadtqo@K2`?h@$L~f4 z@zS?VgUxKFEuoc96amgP)E7;*cz%9*AG=PH>Pv|Hh;WiW4A|oWscF_iTb8yMSrGip zO(vr6Z8)#kD#{ zJu199O2wv+m?=@udH}I3{#0?rZ8r8l!;EIHT$}qyBDqHr6ZiQ0qtdbO^w~z84c70F zbZ(fdCUJYD!yLq!J9gku1tNafvi*^{Y37y+)=YmH;QApBF=3S}UV!+wc zG`1{tB>N0&vwn9rGl~v@sia&BcD%8D=-BqF(!lv1diCHgYXv5jJ65&cOmQ|8*F|^s zWWq;qOn@%Wm+sI7F=SwZcotvXE;4;Rs#xchl*M^2=i_X6#{;E0_V(UbjlJUHPBVeS zW2HkhcJ{01&6Rn8+C3-(LUk9~b1O-(#&FAu$%fwc(NB}Ywmxo|6ljwDj_swJ_t17Y z#axq7i&VS&G_mcEv-(g3pJ?(+Fk>DE?>mE8etb8Mvd_wl;~WEBRJM?;OKk=uGY-C( ztmxoddmkc18#B|20Lr^#sX2PTO7+{p|rHq%6+Cq0^&{z=dh~UmY9ibvP`=p9H14AVQn;* z8JRNe_fBvtsGZhLIz2e>(f-AKZClWqSUVx8=g~$u-Q|k?;-%C<2G}kh@*6k1k%0ef_E!?or`bARDEB^@@GE zS4$R?AKIGjv9*98dSbCfjm)#lcmNpx093>EpbJLYTdBX&KI~koFC5l1Nh7@17nx7$ z2TIt2RU;FN~?a-HMAjcF}J^30KI;YaE&E(VxyA&G{oK$5L^ZwCdb+oq%aB0-01BQ-pw@2I85pSp zmFZei!v&e!6K!jbLG;C8YF4RxbrVGU8bQe()BwriTZMuqz~i+{u|++!kxLdXPCMXG1oyfk$nts5yUhEfbg1q0 z>)1TIivlGO51XIqR_^2b2Ar1nK;s`PdSa`ePo{0b(Z9=6^Kc zfG|f)eJTrRo5*y5GN0ckmHaA(nKi}pv<%-YUw0jaUb9A$>PDOQsNH{u7@!NRZ!WCb zbQ^-;D^$?w7S`|;xWJvc;MKi0G9i-I2!*qdaC4mg6@zOM%ywHbd64qQfj}2+qtqm~ zXSauJpTvDf(w#NT?J`?}RO99zn5_r7xzkUQIcET8*15}=<)2pBa70_MbJ~C;)2(E< zX&&SEduit4YgdfzFB1LVdfA2;Ez|9Bk1w$w-l{gbj7L~swXVRwb!Y)+l5IiS7=Lwv zmi#K@Ff^8{b!x!^{pQCt2B9{bFAVy4Eh+7uDxIy}!B4fH^*~}&{_OxsCDpyO`{y2V z!O(wuHLn(afIIOg^^KHhWIAixy)K#q<%{r`Y1$$~j!( zfG9nsq0}V5x_$u1UWe&SxE9h|v`*b~R;|=E4NRmoL>bKo^}> z$V}GYMv-j=f4!eWOuA1x8+$^&RBw~KcB=1oBDZ*NqrhxoY2)qI)~j+)?neZFc7Q6Y z-pMf$Pv!`R?#?m0@T%~puWfQ?zKkok@}|P^zNfMIY-Dy7vvG8@L`~GY0O_9C?LY{r zZ*>%LSpe#KpF%4eW%LqA_}r_zn%+)*{8-xZj|V5ZeoBHZD=3Ww$*@tvDjmM2M0cI2ah|Koo-A zLFL)9{_KAd9cyVVZ43<@%rFPcPfu#22BmWgwwr&##orx`Q;t)88I9Kv$Ov9=c<(?N z+6|AMWVqU9*^s>OK9#JGcLc^+hnAr5gmoWUW|eyen1sspoMP51M)uXMjsW1s`K=8e!aHadNzcwf z-hG7tU4u(>B6ejCWs?X4m^aA8D~(c?Tz@bB%Q^z3gJ| z6GFdtu%HQbNFtu_NjdU@;BCh=`@1_iqKX6?V&@0@xT*fxGfZwI$lvz?92|A1WRBkE zbLY8Ld}4qsSV{I<0xaYVnfXpSR2pTZw)%{hlQ22yinA5GQOde?w5MwF20GO_?QZRv zE(E#Vki#9Q0R?&RlEPTVUrfJ0_ zM~!3J@n;E`7%E`W}aHc?-vWQ89UT6FWX+-?PCnQfCm+` zBf=w1I`~zB^YH6jqiq$7Ij7 zTR0!mw{)xN72a9n`BVK`6I?Y9N{o6PHKw^0#DdvZd`JM3wmmEFf7#1df;+^HC)=Je z+*jw~SX;#u(?=)Ga8&vZJ6F`d0kvUet=r9cAD1R}k=qsdw;$mY@Krqzy5TC#VqlNc zRcR7+xrDlu;amVQ`hC;Vy6bC%fcdjZ5w-2HCd-U5|Q?Fr;aK(gPV9EegwgARI zrAE!>pjG*b{J-J&RD}8KD>zg_2nW#g=h)Q?Wp+|ZY{R%4v{fx*G{tC9I744f$YxM7eR zr)s7D000URe|5@%pRZoj@<* zYLOT!5zY{Nx#O=~);{8ylyyCb=L6EF8ilf*l8vR55zl|=K#rXwk7|?z3<7-*xyMhX zNKrNdxdVbnZ>~BDYzZphhT)gD-TW%U1Yen3Kp{!NiBd{vjJv(&$Dp>YL zOpN8Q2_v>oN{4iQaC~KBF_HRl=qTyR_FD?WCDSeMBl{%d z3Ri%mpzFB(4>eUhJ)}U$Wks4uhu$NQLF@F#r{!8IWmx{tYnA7d-=|7XHW@(sN{0aO z3BvL0F zJONVq*2q*S7<>%($F*|2WVw><{cJB{juKx4>85S*AQCW8N{$E}vC^ntd^WInUKY1R znfc3ewEFJ;g1rU2xt;vg1O*@#;I2NMKN^lXmJ~8ESr2RuzvtSNGYKXqMIJpr!i_bL zl_Qep7?ZXtoSz0XaD~!F-L&l|q4uwH-lV+I1Grz!Qv+c?((6{0^FFW1VM>MtRz&7_X&PSQZiYIl=9KDPsBO5lPN^V1beC zS}gLcJ<bQHA0b%yQ(4q* z6H{5C!*T}FI$-_YeLGjy{{RoKX1>y+y1LsED;$&rHgVtHzE<&7hCD<*P5YT-CysWW zaqcl+QhYUaPdt+~)Q) z{3~e_qP)d&Mm-N){*-)2j^Z5^ptB4@s8`1wMmpBUfjkzLT+t08?&Vwj7)f?=NiEv6f*?>(tN3@s z+N5{F&hp{FCuv=ya`q$g=N^^RE|S`#0=D0~i{=~gkg7TZ+m33j?uG>B;tZ^tz|L|z zb?7+jUqq@>aO7z5xn*W883g!T$jD zSBQKuO-?&Q6s@{1EEAt@I@i&jWOn*^Q@8I71N=LWU#Go%9%G2JtC>Hcw3gwLwe{t>LOS7+z4{0;FeOPI#S`-pljPv^(d zw5`4ac$!usc~{Kn*duQ}*m3&T-oImk$cZ7^>_e8u6ao2j^sN-q^w-}svH5IA3>aYJ zy9()_7h?YanSWgi{>}40KJI=D_=3(~vdtF4$PdfN10bJ&pslI@0B7w)+7kB5f(5$Vmc5;-+#iaP8qGs$s!`K#^n4n`ByBss}}UX*cqmG0RdfRV;Q>>fhBWkum9S{Eis=myg*3Q&-f+52>T$_&yC?Tw82UnYRgw+kDZ_3iHWyO zaAPhMs+3)!fX)dWkJ7e>!dpGrnHw%KoZx2}+C2xS73~du4&a!}H++IW`qb$pmPQJ! zPCz9GU&GfGhxX%_e?cq~Jen_snszqw0&oB;oQky{!@;>;2?B&0w(aVpugW>%y(lu7 z0mkLqjmM$%{Hk>OO|)TG4ZDEegZWoHvr5nH8+}$M1s{MkS+QyIv={>{GW&XwoB@yJ z#wzWXfV9s(IEt%95FdBtKQBS*N9SE!h>E^K@v!89+m45haaQ7Kyzew8w$-Ke%Dq?h z{dNzlM8*FAgl9=fOo;-iL%Dqc9-h?I@aB%B+{qgGjC0RUJu9Mu98cs0=ODMB7^BJ@ za8+^-`QxQJn5w-kr%r~x$r+I8ku|p`=Wa&T;{&(Wpo2(;0w#$FW*mSxIP3i@a2Wni zBybK$J-)v60bqmj)f&&&G!O(OxTZxjv^E>XE%zLfZz$uBf(lZ}Bv z!2+5c1jaV`TdJ>MxTTx}$p8($oh!_(i01hLUOQnKR*3C62PBRvZOof()m#(keq8tU z9`uk2TPmTP5;M=;UZa8f`%~m;TM;lDI^{+&ipE^4Uj2@Mm&zODxyu##PxpWw{Wz&& zcECPaSfm4Do_>cSq2QB{**t;=Qa!zeD06QZjh)Z?BmV%e(~dZ+m7l#8pbi(R_<#h!UV90)W|Y+<8aUPsDl`W!~84#-jq!gl8_QIh~y0a0G^-HqVnXtx^&y} zImzOAB$3wX8BRL%Bzybgrxi4Dx7nQRK3_%0_q%8Dq?$s*gM!251HaeX(vgPA6}NJu z0CimS0)tOx5fyYv6p}#QhU`6Q?XVoB{@aoiIb05r7zv`qed^~@J~)EIWXuNB6pzg+Gi0el?c65=L3WFtTh5DZT>`Aj_`Tor_&VI z3L+r^5uS&!{{UvEcp-uf(ehCI+3abuD(v#)Ap#x14_XqGbkOJ$#wjlDV_41z9RS8Z z$gfJ%?AG4Xaw7cA$zIqW=M~F%c@pAAlRS@Nd;KYBJmmRQjPf}H z+N^2!#yNpWHmEoomnZV{thoqrv~MS_-njG?Dn`-#ulM%u!Qk>KC1kB~V{@*()nPC) zE_3$=;lLh%3g>}4N0yGcAwv#wxW``A10zPLk@DPQBfqENS_TP7^W5xgatA|!jE>cl zr`*$-kUy8zhszn-a69_ul`vFudH^#Y-0IohXge(ridx1~*ho*RNK ziNG72FJLq4?SW2<$`k(exae6=AoeFe(x6y|=7Ekt2d)bIy((bwF&n;4nIoVS`Aycs ztRrX0e8G@ZV;RRMujx-^K{xIlGFxc&?NW&Zw+Vt9BPs{*k^cbJ=}uwt?MT7g*b9zx z#~G=YZo?TZtE?*x!Hv{$`>vn@F`A8k(q!QBPb{1Oeuj}PqY^wT^2pyV?D9UCrFlH? zf=n}V7!US%8T6$5v;usztWbi>xPo)n9VmndTsX@E!hw(16pHfsyNCyGPQ%mi6&fN( z5RF(B4bUD3(x$*petbg9gBUJGZ~*C!C}_O17*as!21h=|m7`*%&NeW?_8zp~-M09p zkWTw@7yaIVWBO77%_hj&cVISp^v|X#9piJELHW=SQ{@BO9+bpea7@vH%%>P`qj%|3 zD?Q!D`;{2k@&)OE*NRN&5&^q$ZU^1^W~JMi4$-u5!`BsFSwD0gzEO}p`J|Xa#45JY zpRW~7d$s~kEA3~`j1nIi$n^B~t_MJ3y}-WuucSK5m2QUUBgT z@(nXYxxbA0g@MWFwd-Un-|qWKpl_R=I8r4QI&*j>N}1#P+0H5(hLBy&ZzQ21J8*p~PIycKrm}E) ze~>G4l(hnhAo8>OurYu!Sr?lgD6LtWDfd_V-;G~M?kyHQC@|dJO<4~omm7uM<>Yk! zQ~{sl>GmMp&Hk~t#&}w!3Ws6d|{nL+_0m<~ND>xz=i;H#M zSMGyA8p(J4r5OmjWVgm2{{XF1Nuev>`O*_M>}|&YRa-qr?9vHtEyR9rQ`?G`9aQC+ zerVf(C^^b{#hg(~_H<4TH!$s6R!-4bc`Xo?mxet)l+}XW(oh?4d~kbWi7(?rEwMWR z$NvCYfGIwc49e0;`?*iuBc?wJh8J6V_O#RE&y&@&*CL;1aeF&RvEzI_2dJwS(a9~$ zvfH;K1%@aC7I;mhqF3fdIL~ftdRXjWvHK?Sp@&|eRXe-1631~d{nT6@I5j<=%%jQq zkY|I%0AO3%#TCXQxxj2>ky?7KoYBmmV^JnP@f=`QA%vuoOL2^3ayG)H5BgX={05;c?E?G8x5Ksr`clh0{q4EHi^ zV187_XahpxD6J8n$t^AiH3BnRM%S8o#HoPHd)3`RZst|Ki|;3Y{NMoAf;pR`?8S%UxHq^Hv?a=3(dQ@?5%QFf7-NdH zwPmPwE#mr2%4al(L*5vaUCi%q+U-9#?*(5k+6DIJ1f}I32ZIUv*!v=rAZ@P z!*=?71h6A3*k=?0CAEu0(EXYnvh;DD-nDWqIw2f$z{SLSxjw#?PS)aWI?gC=q4Ol? zze>_ugiCh$wxf^x=kTBoZ5rrW%`9t}z1&zm&_{9cxZ6CdebG-lzDF z1M;j%bgRamZ!hks$miC8HDX9))r|IxNdtu$!Tf4lVZJH<0JP-t%l*~#syZwhpODdy zlg#_4=~eCi(+%O4=xto%*L46~dpk>8L8zhKB!p}oG4-u@?(OX5c~(y?8wWV7x0>o% zq>3SgAZ|F>Yp-Sgs!%MsbW)c6-q{xwIk4;78M?YC*4? z;VfQQe%pFg6KHL2146^+`-poA=mM-3?Qv>l)WD6D@&NnaO0bp@UObmeKK-Bt;~4g- zt*xbrLH__;+~H3_^s6vlPox5}pkh6!0~&MXIJ0KkA;u0n3hKVgXe^AF4j&jj2(E7a z?g{oY4YQuSbgNfdkhOTDK_~SCmeP3stYx&f4jAd&U;`m)kb1s z)uOeO?&EJAKN_}5>49F<1&HT)HO^NfG(@*I3^iC#0Ve=-HD311RPwh$Ab%^DQ;vTc zeU;i>+eSe0)iag@j%v7;7_FYzzU&-{KfV6|>Y%vXpGvcmYoREUDxmHiFneOI+Cy;g z{jtVeWDpPD^sLBlU+n(?WQj8E{{SsN*&V8VK3HP7Ng{m1&&%j&EUN{@z1_nl>}3o+ z2>0zy)a_+yVR&21fq&K<{{TwSy}Tj?SW2XA_qgj-q_(g&TW!YSjs|*~0Ls)YuI@J5 z+kp1YM#kw|);e@h&n2NBF44E}u6e}qX~`AI^3e~gSxdHkpYRyIV9 zmfk;@^**3dBV4m?L=6k$9kErUR+CA_t28G`dxc*uj^01JKo+N#Ia*6d zr4K4~PT!q#^G$hUyZcpyk!OMF^s0J!Xk%-*i9pwRpMU;$ZJbslW_x7#GdwT)6E;+_10=lj3 zy{Ndn0!Z`9X01UZyi(k<;UohI^z^FIX>7|JGemsH``JA|3RSy0e%pI!%Y^Mf5ym8F zf6?PH#V=eO^sO18hVs<3iZ(}p5OJE%g7)?+d1bY>5##S?pVEPRX0uNs4e~$U?LZn4 z#d3q}mLvB|%~ohHrny_JFPj$x4l+KKJ)GKO%_M0IYl4n1tIbn;}gur+Ii4gQnON44&qIC%Uz_j|wxf@sr!y zn{IJD*6@J42OQLMUrBMM810|;TxX6zs@Ar)){;Z1JnTfgZO2*wy=A4_HkbaH{cOR8)&uMpZ(#34t9DLr@XH8VHMvVyIbD99Ag><~jcMkNMqL1^%Rx@u| z764+9<7%FEirBb&r#^JJRfv7xV@=bhkIa#zkSp*9%hI!yx&dn5Tg5U&!v|;^i2K!= z)5{b{^QPqoJIVXMK~KNDjovMdwCDc%?M1eoY^u=TxsAslV>qn9d^dNNx|~v7$M>_3 zOjP&zxV-yBQ*PPTEOZr@r#0Q!{>#+~^3!pI^y%+KmA%E_d$nN^Lx2Z40)Q+}bDLIa z#@L*Egbqm`%CW6}(H<_5$CMA=9sRLZUQ==AEHms0!;F6_jyr8S-pVx?Qb8P+;wWz8^Ji1{zq%_@>hn*tlsFi6A9!@22=$FN z!%v6o_Hpf*z}?MaHlKZFBGp~NLDZgbD^}hA0JW~d-7n03`+C(2yGX7zCbPDeWDCJe z@jx0HYgyeir^?!r<7vmgwtT|q^*d=6$GsTDM*y&WP3t8U&;%&^_6zz(?sp(p#or{ZS!b{Y8 zX1V|@=aT+ZS!3FWPTqReW?T5KB$@E4I1BAjPxh#m-oQtKry>5dUqI=2&3rcbgMdA# z0rvM+vqvOT!dE!?gh=fS;IU` zL$TyjqtqvlHl;t+shq7#`U3@f~12v#Q-_<%|j}XFhz60 z;~$krI?ZD-)8JrTzt$d~m1U$i1~YML#k`Ua9+l9*Z2U^zY^ow<82o4gmCmE&!61L# z&j<=J-!$Da-Y+_DwmWM@2Pqqfqbd!)6zI~_?okMRN0mhVv$U+#xKT8uMe(ttFq zwJ7eOYb&w1N%uxEjkTGG=bf%c&A)`~K3c0iDc7s(SGR@++WYR@CcM39d4n|G(J^!q^(`FJbt1z9k`dca2( zV{wT+iqjc{yQZJdvvDpy{y&vzqRVm1$LHi1Sin%W(Ka1TC}nH%3qC1~R%7y-fQiqHzzI)ckILI~gA(wwUH zmyZp!flGbG#}olaMuSn9z1VCmxdFEhxvq~=x>-qy324*rU}LpL(#~yU6Q4!x?p`psSUBBPRGDq=E-l~9c=#9|wW+Pz{^uyzL-&|^`d2-sGut$< zN^3?W={J$#$^Y*I~+Syv#EK;^nG4l@D_NXR?)>dh3C&6GoQSI$n zR?-{m*SH8@W&mEsfGjq+*3-PHF8Jif7{>yy-QLG}09A*2k@I${dfk+6T-oC(w7TPg zSvQhQ2 zc??oCaV4kD{{VFE>?i|ZBuNw(63xFHFKWxWu`UJ7-@K7}C^brXVd2OSB-o&52&jZqvR3g&f%0cE_N(Yauy*7{bx#W4+4ZMM#pGsAh?#|S-N+vxwe{@x?Iw)d+pHv$G z`^-7VrDa<}l4^1_w4P)Ve@XzU4b{e|-bAwn0FsqG1j_`g=B$I0oMM15Ear;F&_Nj8=NxAk#a@xp(&cR+{oek5l@;6BC+_Eb z0D2B;yti{)UZl2>2|TfZ?LZsRTuSn^F2JbA%y`97How2#(s_Vq1P{AWtVyWN1cT;B z&g^l5D$}&~_tC_kb7|w!fD=xX+|4Y{C_6_P6w6!tKP~O$%g9d$7zU|LV&M{LSNC${ zt~lvY%O%@b!7P$;N!kMS0)Qs7ytS6#!yn2M{hp?l_Gm99x4DpES2<5yQ=rruIN5F! z2>98>J?!n{)8UN{$u2TT_7nj4=f0Hb;|=dn=@D$762?cB)89Uod+fWS zX#BiNF^IvfN$uqZBP^>MC)`g;4sxy77R~l$i_DU4c+?G;DGd~+hA1^?C=mR2C7P%R80u+yqJL0ZfT|R!ChZj|gyc=qpYe zxh-Xqc+Z@ez+8TG>Ausb#!a*NV;^`{Exo3xX%w$?{{Xp<)2Yn>I`2=I+Dmb7@ID13YLsajc|PmbDIwn9IP`BfW@D`{BdQe%^peE$GS0O{eLYm0Rj;3}s` z{eK#;tqu{0!TuHg?PXadv_X=`GDQ3`6rE*QlYbkAM=KzqARs9r-Aa!z= z6-P@*3(}n%-HeXWj7}##O7j2i{m8K|+YX-R+3&uu>pWk?!OD%Zt1^yKuHBmhJZG8! z#+`RA87?0_)BICw-_T?=@)c5oL09yt;Z-VDJ~oKt8I1>I34bowFxgQJc+qLo#cWB; z_Y7dFrl3j8+lwoZ?OM^P(kF@p_5H-m_kEDDdyAuvc!xJ^=Z)UuP7d?jU`NH2q=@b_ zOea3~m$wUPI%Nkud2yd8bKfRWnfAyLWI#6@535dAWNL0TF{&+>xInTefsiixFf9=(hIu0#8@hJUIfuxHHJlWSw6q)EF^=(d{vyZ`GfwHd43J+b=5qluzLe)Q6XbfowPWI@(?49%ZZ^ZD6bcpE7_3Y0;Jde5 z9oB=2A4h2mD5CC1#2Hls7ltgbniTnX<|QjzzDCa665h@u&IlFXZ;&Sn#!KhU-P`pq zIdfRsK5O!kDfBRYL_~dd8)ki88AI`;{QcpuRQNg&&qcvKZKSdqX%ZH!NY9P0v=w0? zWyO+;56ee>q2yXp6_hUMa>g^;md<(gzsOL880eEo={-6Y4;sY zTx+|J%L#%vK1bFBZoRFHQlcquguXx+#4oF?*CuT|GdQBioSCZBcaXXLaRKeo^v52Rzj}ajx)V@+{F&wOF(ICW7r8{KDD((<1nr%uL zk>qRaC%Yd0sDyoW?IEH3T@9%8rTa0SGn|K?ko^R!w-x<_zN=NxIIRF}LnwPAFJ~1F zS1z9vZfSyQLTDrKryuF&?_avS^>B0J;RE#9VOEq}_J}WiWP&w1JJzzJfWl6VfBI@; z|G zGOl4a8z_?WO_+Ki7bxP?xW=J-G=lpYA@?m za5-dMe%s{|p!BNi^Msp$3PFs!X24m#7TOl6@JGt@PzU~GS0x<#i-Vi_7mEtwe1JQ? z0Faw&Q(oP4ud=(`;Pk>N=0M5Yw!(p1hVEgf^FqZ&eAY(s{0HDZ8s0CxCCR9ijnQQ% z#_GMq7!4Q~5vs$rOuE3(992X5q?nt8W>R3ZN&IRx>&K<2yUFk#xVl3#-l`~>?ISvs z=-izVDB(HaYN{SbV<1P1)fnMXxDqh`k&_0mwk-j`fSKV#$)W4|S0|ZiVKpoYFrHO~ zDyPNz`qCf)AV3WHPoFj?N}`5(_%=ZAj(|jeodDO}GjsW=;fSE9jh=F1$Ka>uV{EmRJt8eBEDe<#fCkA0wn4|OqRUz%$d6qFZb|Q%RxBq6Txsq z0ZWJt#C5V5pI}qJfzG)OwxS%@eI>o>Sl-uCE5X@=6E7Xn{;DH>=L25H(avj%`|_tQ z_aWwUy2rsu@`2mF8Vg0{YVS97Zxp4qB9?l#o4I~uu{5#`z9_K!*MN){tLB=PPh7Ma zA!?Mhq6lxiC3I4#CHgw$%x*8ew)I<2i1h7-O$cpAd6}l2)oaOGk;v{X7#IHmsM6^^ znSupOcb`FxY3f&uJm**?QRESu+`#8TM`;K3^;zC`cuvLId_99^tWLUy`B45qfES6+ z2ssRWtqk`Qff9FmKbHG2+ZtSwzU6Fk(S{?PT%kbH5{;2eWGzh?5(1F80~>M_Rq}+% z>wEV;p7_2FNVA$^R0a)GWfU?PGPwr_cW_zoM%>@q&4%Wt8p;1b8;ptf5JV`HmKrpL zHIiG$B|eOu3NHrwynQ%iS;0RQ$MqJw)l=NrcE+<|kr8F}-m&}-AgJ|F?A?q8$%L}+ z9-wn0o0OC9_%Xc&w-J6Cf%-Jn2+t`7WPr|+t8#wgu}$|M!6OJ}R-TM2)Nbiw_qv-N zD41XzIn?!?^=n4_`!dvFppH{r9nljNe`kCJ8rR@IrcaiwTUdj-U;GEadM6?ON|3e4 z$6I{RBngSxm3_c^yGPS^I7tlz5=f^`atz)waZDsD(S2_VfbE72g7wvxrd?JlB=}9Y zYr4QkDvT%Z2lt;b?*Ia@P?rNDM`ViMUwBdX?8ojoqK0{S@ZQG1%^MScZO|+?S*2>L zB*HfhYnEg5W$z>{Qrmr2Xf1tzy0%KX`Jqxd3+Gu0A+T<_E?ciPR9}MdgeuKYWNLIu zCg{5SjKWTn%8kx$ZwNKuzyq!o!dCn=#5-i_4gaUBMxk2fNMAy30$R{` zEf$u7;WvSLZp`jcib^)lBFEzNF~F9J{0yWQt%uCl^V>jOCl&?opIOpYlhU1wTPewi zAzY}TwhZT>($H$Q4Fh<<1j&{2APE^cbjza&x82`s7kt zj>Vgx9(iD7pU&HioqAcW!g!pu3zs^}{(m27fBm~L?!uKek@+iGvVv?^oMMH)(y15V z;V6ZrAMuL>1i0JxXQmT1`Bf{{>@r-5_|uTkIG3pY*5}&aqEHM*r+I4VN~spnP4_NQ zcZm?agXIg(D>m}#!w70`YMhySE*EaqSHaEwPwPxru^@S_q!I8=h;btnlc4i93@L{5SEfa}il(0i6*r)eJW z(V`s23b{G%BeQgtGZaP*2ZTPcFg37gP=Tl3cWLS-(42kreL3H2A}_;9z?w>Plwf== zST^DoGVNQ>o_H(|IEPj%QeNuLznl~d{7oY>A-!tzfx|~F!`>^ZmGFb|L7tIsI zd2C$Zzn13>_I}Q%Wc@4E0D$M#E-y(U_Q1J38Cf#N>rowEOR_@A52fCpxqkq@nfVyY z9qGgRdGV)U!8Q{Jd3+oDr@4>S;dL<#vaJe?ML21!DE-ZQ1Ejb95lcpOxx0 zWTc&?P-$(qpKWbpzxu}I_s#0zy%O|g?KvG={xjoI=ka^|kD zNqJZ%rK6)Rf<%U}gt%^;|Hn~y_X<7%BH~FD9;B3!<5^1*`G|t}C zJ(V{m1pIuHTQufRm^|axQh$$CG54`+Xw3#Nj+C85TLau-+~;V)|JO`(efgGLd* zf=5VkE#p&N1+ z7)XYgf*4{d-BN~W7#1g}=YqFC&pF#g{_`4;+|@sSXcO$>-54uNM?Z6oS_IN`{HBbCv# z#2TzRh|NB-Ndf#qk(s001(on&1r*QeZq6s9pdCPWyHy)B^pyAuEt|F$=^8`l9QOSf zgHGGbqHdki`CD?bBM|8<2vzN6%^QS?0Uy zIRie>*`faFqRadj9I@K6cXk+yIIYKj4n8@Sy=lNW&N$Xh^69=-Fra%1tzs^zw-X%g z)3M*KwE1l8#|y%@KM=&6@)Lr?eiH|RPD>i-gvpb)XYSf@VwL~CjKxC!q-em$DGmTJ z{P_~YxZ zVVZ3i#r`P$uT(iPakF*xR0fy4{e6$i{e+Qh%hebiXxGgSA-!aA!2^&a!k5K~!@BJ$ z^)dL-uSC8LkgVUwKmeU#=qMxlNHx-9zX$-(1Bay>!zn30{9-@e@!DPq)RJUk+#3`X zCw|Jvwc}2JK@p{D0SHTcz)9II^tF;&&1*_w)*t}L3MWt5^+Yg!;O4B+(x+5y35kAe z1>DC|U!!iOpGzU3XJH~c?!p?W^uLx^V{J4Ak&C)&k`%~uOOZAFfL9~`0TwRzyq;k{ zmzL|j3*{nm_4&M)%K8Kn=KY9C1-#bCvRjpM=Y-C$cGU>HMqj~#AmoUzd#0#%#=TwLJ&D2K^Uu&wc1<^&s<(JU&f*@bY6{6Iy&SwxHI=ne7;iiq1zHz z);gZ;Q*td!iNizSx>V^M=-wuBq7|=U?ch-rHrvvX9HhV!A##Kv&FL6vE7lfrP_ud; z3d1RhQ{Jk@0Jg)PxxA;5{=7|;V4SNP_p44vQO{&96@#VQTLFT@d#W!?Z2KoiG1|P1 zaMR$*D!d7_(Bcv55@mvL{Mx)*I6@x&DEmvnM(cytN0oFbt8ccf?wBMpq%N8^z^>VI z(ru)sJ;HQih{`u#?5fn-=oNFh&r6pjF=`7poX>8W|W__d^{ki6~=IAy|O1NO^1F=-ue1D3lW>SnI!2M(k(1YdE3 zki5TIwR}#vF82+5c4hw{nVCq%H zsk8T`U3knk4Bo-W!X<|%9=TCJ=3_9@YKaFN~8vkGsVuD zp5EQ>$Cn@x1;klVwNwfAa50PGXR1fzzbb#5`!mIg_%ceb>}LmhRZ?ep`hSlH))~(T zK={_%#d<26z4eid?>+p7hkn=83kjW6^JOxzplFYWr7~|quOMf($KN*nd3RmeC-D6! zFRBX#wYuu|G3AVmE(|9lj_>8CnYsF;OKOxwv7beXl&h0+PW$8brr))Yp)>Jlco8WQq?O@*3chOdboz8I04<4NDqB1nhf&lyTwqLczlk$tbYO43;#7A_f;UD}0|{dEGRj9W`$T`0oE)6p=vH2^29XbPp6nTMn-4#U@}ZeH37Bn2 zR{3rrWI*1pfJ1+0AS1=LwxJ)BcA0ji8l*A$@<6$Z$Q#C70( zHZwLwV)78pQZs$TUYOuf66|p-R!QA3_%8tYvAHdcbJOL}!yO+_E1q*R=fvYPpPT14f2K!#B>3Hn)quO={o-b;QdRa*X|O5`renR#ffaW zFDKC0#e(A&^}c#~GoYn52*%^V$CqZN?_isIgF{QCtth{_#N+aibI^%@m?7r_I_a_Aas$~dg9d!>05$b4IPUALd%ZN%* zfZDwa=f%K6V6d;$`>0EL?!p9380=GXOXwPDYvjyL)_lOj%k~>WPU>v;)})86qgSQvn*X{Gr({#sjJkPiYxvnIh&?kz z3(>T^g?2irN0ve?-IyCMxrrQT-oX9?XpxH3fq-J=ttOR(n0_wSM#8RKI2JTXnBqPk z&d_*A5rNc9UZ&i_h?s+yt(SmPfvCMjv86}qvhh`fR9Y<-6LmM8CV`}rB_aa)?VBf> zZWe0rUR*@kM~(UhJVaeZYglOsJAe0NXmXV$|LrJkg_hs6DL>KC0wU}+!uy5r{e;&TT4A2&IGw*@N8F8h`rn<7{4I%kP-+%M@Oj zHxWJ}s8p9sfH3zm&t{nII(~aWYWl>Q_SK7yY=lpH=i+mFO zzw4SmCzSLcaf|y!t|}$H*YEe9idKLGAGlUNjJ70c;ZJ!mO1jd`p znpY9gml?X%#Qs#eOwI67Gmdf9Gyt(;s)qO5;-&sF8HF=x8VH{V}2 zG~`WarCECB3SzX`Rh95JMFSOQE7oO10>Wh0_3!aL@4cTlR}ue7OR`lk4~T``CS~5} ze|i`>Ltl<#jIk}%8_6fBaDsKjtgG;ed4b38JdKE5y9b(&S^(TkyvI#be$ZJh6=_cwl{x|mTEyIWyjZJ*g)PQ?r zH?m*`4P(I1_R>Nvcb|HX_mIz7fr1^i#DB;&-2Jz5?6|3IVTt~S1Wfa0qbn*_&CHzpqa}|dovky{#i+|>5E*fm$nA0Jyb?&bSjYC=+t2W8wYnC zmaKD~AO=?kw0Yu2?BT=QQsJEO;g0?6Y8?))xGkSH4XE$ASfr+ma#HZyv?fEiDtWoA zpMrX!T#uKHBG^w3`COk!-Zu_EOkb5~Fq9Q5rYn54$fuhd4XssU&tWaHQ;h%*D7kr3 zbec*+T?njzGF*;kfFe7WH@{WZ;=+ZsRdBV8nyO}hD$tQC*Eyo={o%APB9T79u^827fxe^PP3_F#5nLhPRTyH) z-fP07!F3TNg_b?TcV#maSRBpmf^4ljWUHL|O zIybI-JpGE6JIri0b+vUs_=8qU2srP|L_n$*E;%Z(rhlC-FGWD$K<8a z$a?~MuHU1+_$72nGRtNmr!pKp`9uaHnp9x=3u_JGae9XqDWHGUA%8uajG2V}7 z##;*8@nFNNH-Go$D%XHxODh*x%F7dH&-EHZp3nwk%9gi{&uf-3>(e|r<1$;esxm!G zM!MKC%jP6Z$&2g%H?Id}-#9XpaL)8xNqrvZwaA){vbzln#H-5Tuzl3wT_6p_Q6h5v z5BICTMlMw^O`=yiCNLh)Qp9hg{apOfg6hGeNynd3cPbiOK3c+zHI&AKwyn!`D&K84 zf1Em`^b{2ghvF(+iw&=4FNl#jDyG#V$4oex#LSn9QRxdBcDz55A7)V3j$>)_M?n=n zu<&kVyw98iFW%frbEe(#p2gPW8Y6}+OTQc4`K!~xKL~`=ByI09uyXzpgGtSI0eB63 zq7X7%JZb-C^W*Y1RC%Ix?$z3iOFoVRrV17Iu5!EO;eZ+~d)I&Jgm*N*_lIR1{R{I- z&O@<CK*C73#aV`JZPnZ0UHsA1%#misqWK|mPl%5w35?EBU5U#&dSVHL`vXq> z&fi+0UW0eU^o{b_AeTW$<`sc`)_8iDADpF0+Fcy^&fy(}a4!CPY#_I*Xp0>#W3EQK z^be@Ct`9fcs6Q1^T)t=Q1fu%*g}z&3-&L~Y!wR8z_o`^a@KeQYbXJM#_I$n9gAnca zNPp*@QYjyJmBVm_r1F)qsyT?vBfz?7W>;@Ir~p?gFKcQRYpnfBUsT6ff#xTjhXy4> zo{PV?6I)k0nzRigmG-71qR@1CF5(9iR-s59Lem^=vI65%#3ZRT zAYu6zC7S*z9MY>KVY>ijdo{a#wVHAAmKoo{p4rq{nD}1(erM)fy6#8bJ-bj$WGrMJDyqYu`4lGtU#wEh zh3Yypiyo;ioUKFLTzA|NDIW9;hRR%PLO8zzzO!m}ZZwii7?I(6w$`szDL;jD$SMX$ zPEx*AD_vWAXg+I)ZEuf`vo)}_-Mk!+Iffm?MyPN$`DI9DnSyrdT=KhPOf0y7&2?Dp zj3NOz25+bk6U`%Qrta|?Rcd8b9T2kKQonn zepF_%BrtC(DKar35|280Od6b-|NTY&tI1na$u7x;2kw^>6X)vUzO=>Lc8D0p+4SEDldX?LPlBME* zHIJB3aZ(UdwMo)kGFeZ3?tnBG?tAe_Ve05{9RHLBd-Z(iB-X=p$#A%HF->QomN6Qj z0qk0`^qU-~^1Zm#6Xz>vZ+vb<-id>XO?4ruh2(yIQJ$dDTk*+}KWhj|P5yAaG(aGW ztk3~7UPV2-TRcN=M`H9ZMeBc=*Zu-?E%ynE+y=ZoS)aOCG5)A?SNiM3e>iiTwo%Mx zg@#~~U_;Ay>WG4-I=MY*Ime2f0bAGCa^F)T;9})%HTmSG>q@=ZsTWm5;ZEKxe?!X+L^KuHLR;^oPF=eH1`zgoQ@sc;5uMo2 zmCz*k5ApcoVv+Y*l>6~HgT^K*Z!qKPY*|^9{kD4PZvC-5(1??V$@v2roflG<$vZHu zjT2o%+c0zbyIDMKu>bwU-IJK1lS49kd-(~!Ho^duqsTNnV^eFqWQhL8gX#5>fpoc3hZ30e} zy_v&RvucAHpG}Y*N|xHa=%JlwS~Qb3hH;hRPmN5#d>ZCF5c2!F%Bk6`!QqN1@gI6p zJ(WUaVIWomu+kSpP|Sh-7d3y1LV0?Lj;;g*b2cvo=u8xQ?Fp`Ilrs879rFK~iA33ReGp=|bNcS24SvO;~|#&We4D!pEemeae1?HahYXsx|o0@uREU z_wbU3N-ZT`3;?wCW)7LpZ9;`dcbMpfwJlbW=1XpfS^sa4WG;K&Ov(t!v(e)fV4FVu zT*qAI(ARwVbuSVQtoc_#wK!L4@bqiPf$d>Ww|xinvES|0HX`37Fsn_YUX-s3V`OkA znRA?ed(PFL5D^fc!-1V$_xDwF*Ks;OmHM3DFpC40tA$PEztG<1osPKne=Y_L<^t;z z6>M>7#h_$Fa0MB#Z3_Rx_|?BHC^RGQ1RMsd&@wk^{QmF@yhkC!Pd&)Zien$X{~9MH z-qC+!=BSb-jeq@H$k|2yv!&`w&STu>p*QhZ*A4S6#VJ~%`0hTHO9Y+VzZ#okxY^Rx z-8zK~7U;{;JeK5WanMTac$k}#Fwfy8>?f%GKR|lWG5fy?a|ELIDD$28SK{dFBSTt# zRv4Q1$IZ9dyI`(|>I5G$QxjA2T6e+uFxEgA@9V%H38P8z!tnx}XR5^rl`27Zc_L2g z@^pjcN}oURzee`ODGQ6&*mhg|Lw)*AiUsqO0h1V%X51+hPr~B zC;)+AeSVkb!L(7de91neG4#sbWycIinnn?nfnn1L)-S6+%U`p-n~q;BKVf?;38rrd ziWR5K&(wQ>90WV(@#K6%eLO|Y*YkLYEIhuxyvTo&-_`USIGdlm-WMOG|F3Nz2DNoC zgwy1C?eU@5mI?Me9qvk@-$=&DKf&VVK^$QZxclhayzXR?rcW#PnEL%?I@qx--h`d+ z=fFFgJJrxXQ+Y>Jz3yq5LE^LHjkU`F})b2)U+4K>(0YWN~k zFeEO}xQbb3+-!8vdYg`!snHq|IIPaHOd0;@g+)<5gDn2#C4EAxV4TbCOpkW!I+bLWR6I0|WQI^e(3?w&H8HyLN(j)N^=^Ia5 z%w?2o#H)4-UAn@sXw2r~6W1n0lfo7O4=b8DmbLRtNtX2~QoGrS#&TVF2d-@V8A zLQjBbu!;wH@f9(Ph!YmVs<_2*Yf)0h}ZI z<0VF4NAOSY4@um!ELB=D8Q+p^%|gT9qBv^7h-@2>_*FhhpjLDgw@Bub=-VnMA8CQ_LOK%63-YIrRS(}>?lTfCuZLGT?_!M{9>I(Y3~A;Ofh2sMCE(XeDae` zNo^)yV(Z`Sgr}7}q9aG60U$)PU1Mw9ryZ9TTk1vpRaidpk+eflDzsCE8AD85yeh43 zQgl0fCF@)H5xYZB?}*ne?U4g{ZJ(dA&RjX_n3kx*>QXNbMq`qr&$J(n_zD_1_vBU; zl&c)voV-2h=USaVtzgf$6M6oIv+nq>1m&L%*qZ#+Mm7*=rCbBW4`iREEw5|niW2$~ zA6<<*n^d}BzXnQPmF~9i2Dtua>dv=hG_H^?NdH64L}s^(DKN_)zqL=}rnt%2QqA5z zEyo0quV$fuAFf}TG@ixvv&#@W#jFS=_@Hb2~Hg2|g6FF4*(2EXEBV z;&ZnCc%s;-pvt^wxA_a zyy=$iBm%&QWK}90dJ%KBcVm5$UmUBU&I=sqQrU;E2N-nkNm1;)3A4`-I2ISuB5h|7!VsAa6^Bw zC<6h706A~HE5WGZ&Enn{=fu91!Nvne8xdQdZ_fKIy~gcneUq0O4}SV`VNDhXmts*V zXNJCJ%}{JV>KP<(jNck?*^Vdr78=lf1Q&xhiE1ETA>{j`(*)6Zk4>MbQi!|kR@DbPs^RD4DUZQUmv-ID4blmW$@mB1(T_|!7u(I;HwFWy1vxw#5*Ab_ z&~-dM{LYwR`~t{@SeuZideLTzw?Rw}r6U3K$e1@lX*E2?{@y$?$$KVOMXmmNC2pK1eCU+bo!OpoV+3=I2)If>T8jVn-)JzR$FdqemQwetG$w>{E*a6 zn!X4^G~KUm6l2Nn*v%}rAnl7FgZVcZG-CUxiwf`#lda-<*VybqTErQajOL; zA;l!@7WTw{Fqk`|*^}{vaj*NXq-)!Z=SCn}D?3yJWqMyiT&{R~8$y{Yye&wXevC^>9ium*-Pr4tj_Vu~cMvg@^% zmqR|}!fPBH6WlsgZ=zdCWUndbWdFEa$)O`7NW`wHNmUa8w8?bO+5$+6d|u9Qy(UPb zI~%$+SgW%1bMsX8H_}U*keAl1O9+luF84-(l5AsgWGU0IDCzwPo9DF{WhG-!uLReu5Ddy zv+X^=1>80DtKnP(*=ZxBkJep4sQYTW$)aA4nk?BxZ6iw%MQxzHjxMdZMXSlp*a_{iKiSorQ((B8 z`d>l z((AoMGEZ}e-4d?RC#|OV5FN!N)ugnPUHGq|0lOi@ksa|^$X@{rT%nR@i2)nw9C7%s8Mhk1dN@e^nimiigS4}$c24@<^G~T-h$IoZV2`7vZxXA$!+h5 zAQ9^bf>BE0hR;}icNNf(;e?~B6%qB=%zwYsj1MaOn{`QEnvkP&If@OqQ6h_OJq;e` z)Y+v-Ad27aD$-zE?bb*nd%EB0|G+g16=>>OI*X>Op%+ByC9P(G$SNi1NE96FI7n%- zK~uTCUz=0IhJXIt()Xz9kpvRtSA3IHCfUIk?A;-uqUY>g6Fy%nnY@?b7}}3iP1Exr zqDy>&i5`5>IIW~>zu=-x&^#vNzDa^SYuOGDM-A`@4U1?i(2~4Q#b`PcN;+h%e9WfG zuwpP!g;;~ov`67ou^2L&;9D&LV`MciFhJp|RV zG^qKE0h=T(ikuB+?se#a_Bhiwbq~dEtUyuqkldy$t@&jWwXisg9kZl_G-kLP-HSm% zlo~8fx6C3H>Y+sEGl-`eH2Afzok75a?g-d$^roVzW;T!>Q7ymg&Et<#WEYqUFXSp%f>gcW3lSy?2SbK|r$TZ#$FG_+ z(fz7HBpreJPN}0^e{kfM2qyGokJedcP+H^+m+xgSS(=ns$vEB+KgYT;nZX20mlIZx zo_{Q_nPuoZ$ejG~6g^uT=;NMD0y=%CeHdYOt( zd6q6++99CWB7?(G3|{-SJd$H)hfL!G{CpCHLEn3~nY4Vu-8AX+?7sb6&kXFoXo z2QEIekCJC`pq!!E=e-WwF4>YvwQ}&ZxP@-GS;La7(k;cfli)1t40+KCdyRGv!u+V2 zo68CVK6Kevk;U^SpM)P*W-xjZ0l)6I$y_y)uPTlJe7l&?3+AX;9cmMU6&Zy#EX4)I zuijq$vgPIU7kDBzsSX|#9Nixj$YQ(?0marfB!q*0GzZ2?Zn#N4qQSqq;cJJZoHx1K% z+tk&epke6czp!r&_E1)wYuLskJ;vQ4N-!FZZ^7snK2ux1F@n*w^pH7Q@Yu00%q08= zFi?K^q_%B^+k^UY71>N8_z3=ZG%^vEYHRvQ;)tDP0mBiLMGwVw3}PSlU@17Jy!4cJQAjq|7fBDNnpX^XOC)&IfB15kS8`^j=KF8)*qk7&v=Oq^h~Raf~* zKbMf_tUKuirSwsqzr#7+F|ea;c3l_y*nz$@A$=IvYn4&!K(+D`t;NLOI-TI4!IDh(#y_Wqh+ zCf*OFLi;feeIEuAJML1SP0I>*)R9WcC}Cn^p;ajQ#8NOa9q$8jB_U<`b);QrBH0Lz zE9%rrNtMy)%_4uk+#dT^z$adCro_TnKeG18BS<-@p)qM8-b02fQ;cwPH+V$m8*B%2 zC1wxY1xyn*$cL+rLa+Tkrb zx|%JRD5t2lGFpaIIgo$~TSi2c#6*05B~bS-RF+U%t-L!%3}?aN7+9{Wa84`r+(Sc7 z^}FC8I{QUlDmb3>!^Q77ox?u&2?>bT?VWC?3$G=q#QP(NO#ojgVY2Bc*F*+KA+8WfTm#WI>ghVkMmYQacu8tF4K>E1%(k_|d)g?n?AH&iW*3fY~&LaiK zlV0u^-duM{3{SOee;j#Upd1-d7y;y_MXsiuoMJO_iMm9&xWW@2oA_9?r-?C!S}70% z?4qR7wTlDUM!jrOdX(U%?4Eoq&|iMS9j0M>2)MW?a&m2>#}&-j#dm85oP^((i^gkk z3^TY(gioT&OoT^gTmv^kl}os+pu{o2^Y|a4GtfkG3OldO=6HOG2ktV2mzMit%I*Zd z@KB|h09XBRcCsHs>fcPkgu|MBj$!a+X>?H`7j0bg3=azgf4F;@Kp7!i6(wo)u*5joKQwL3DBZgU>V*@4hm8880#NA3n{tfq@!yu2Tu3{FRT#z(z z94NFY;FVF|6G3{|2MFU?#nrNaApZ~L@?5>T7=pVl2U5@-H7@+qTlb6`Ng%;MlHAuJZLo`dX=AWbVL5A|Lef1m{EX=$D7@YPQ{ zE%<1|38_nmpcb1;Sjw237!qycp@G$PJA1Oy9wRofh1E?j3PPl+xZDWUC1SB+{gY^_%x*cvHv$8-p*gPOG=P_XH#~1oxe)$oh@Yu1ElQD%+mIKU zTtlTrS&<8L&3+TX(F&!+wrpu)G3OAhT(Rx!fElSqJH=vGeEH2G0!Bo3h%RxzfU7_s z^?iB2W@UBV@U`NN?9o3GHCvmw`Tk*do}RQR07aBbAudLVYAk<+N@P*W6GV#*3QpO< zC=*}3G-3nn<^lgPe5otb8WU=tf2hUB2dw@H&~+YEMW~|RegU{sNqMd_7ZFwoE5|`C zmqSY!Qi%(g2jzQ(lEV6Kbv}sZ?6D646SOYME#I*)^VG4O;!`y%d^pgbu6fT@J*WnI zB2NNz013k1?0ld}!KuLn!sd&uer9fiHQV1DKNeCnn|8AZyVwX+@(#`nhUCu1%cZ#V z)e_Kf$CqF*1;ptoDN6~bk&hHY4FZBzsjwk9%P;0E7f0NbPlU|M6+f;g)cr8Bd7LfQ zuRp9{*pU)KYg4C1ZLG7fGe^5;` z>G39f=l9>PLsI|M+{yk+z03)4@O6pHNa!~B`vq?Ce4xPZ^ClauN)W7Oz~bwx?<=cBMkU*r8Q&&oq_xm~uV{O->MrnRgZ~LS=9qpFdNSAk4Y$uByEo|ZW>e-*2S(?Tg>c=pO|Np@{?H!aDg2vTx^_;@5&@f5%0K{Kg~>dt(DrHKTp^ z%Ox#%X7=(=cy<7Gx}ZOEQh_@PowS7 zT#}h=4}wu+s2bz8;HxM=-3FFkVeB3P6zYf^YkwXZiKI*qE_6IIr-JUd_hkb9u+Lh@ zc-_4}T$)qpLX?`Bp$x#l?T?D8UK?}cB9h;#Sz2HK3c9*KTt$~BODo9oASgRA7``d{ z%I7xvy9q1NT~i`BJO@@O2rgk68tMeS5n5}iVa|~rGwkowVY)G?mOC&q{+!?f4kF(f z0eCza^hAWQ!0KX5KHKGu<-Ql;*bZN=F~(S+6^E(6GSCQTMu_ox-RM92kdgvrEHbr+ zobx1pUc|=0Ch&hrVIT24=NF>7>$@w?hc&g^7rxxp^<`N5S@o@YE8^sE=FQ&mR{f}i<~!S1M~)zK%4azFDdx==jxiJRCM>V1Jr=#tiF7Bkq*>Vl<9%{_3MtuIdu52 zYS2U7MU`Y|GlmB4y52rHw%^G?#Nr*)7AO5S>X_w(&hkM}^`(RBcY&=>bP@h=M8%4# z%ZO<&atC607M}Szi?^{siFfLpU2AkdJa;jl=j&Ae*(bK4Ra!doljY>VX9~kVkIg`g zy#f+G6{LRWN=*f{p-};Ifqtr+1+x|yXu10fL?m|ByMm=Re?HE@Zq|XAB&1JLr1jSu z8}SWv6>>YXt)!8D zmG_gXcKc2BD2rJyRODhK7(xuH#i%bT_wL?`b{cy!!;=g4V(Z9%F;@kMywXLhOQ}xs0%!EMDe=t z%pfNSGArUc*M59s^~7Xuobs+K^Zwp}=IeE|r=#~=rmFhlJ4&&+X=xR$&Ldry6&dD= z%UBt-m#PDf;i1ZvY0cx0aeyA2J%Y8;<;h^%s7BQ%6GXWIcbfRo9hJt>eKZ=$!wb2o z_!VUJ2|+LR$HYJw;u)3TxVJm=9&?vJ0ZMbtgc<+?B38X zuCR6SE0C3f!g&vLBTS6CufcCN!!#C}xHQ0Q?b_q)qkQjc|6o?HXS_vZe>mQfSE%nLQJ4EDDVa?3gG_8=3Ww+Lu)1pg@9Jq`sgzc! zqq~tzip$d^5+P5u_z7KZOZ9C&WvE)`T;`j>e`);UEMhXz0O!7kEbrh}vHODT^NEup zH6HyE&2^qEYn)yBFPmES`sa>(Q1zSdcahCpDvLbF)uiqc?8<=Hz5f6j?H`_toWck& z@t^vAKB{Mg2! zEDU_{^`$SCv3fZvy3Aas>36b#A68e9Vx~>8?7>|#_0n3H_&}CoW78Yzc-xJX1LITV zaf4o~DNk@`hj@AG4?z>_-aX5p8T5u1bG6CJI_n1wSd?cS|W2K0l{k&_D|?r~7tmn8G66mkM&|sQ47$ zhmts!B2I;ThPtx;^tMD$P)HOQzQfKZOKSF>r&L^f!!Kq=$WuwgVKW7o*Ra+>vOlP@ zhZl8(OxLuq@sD+WLoLQQPHscpncb|h!I6`CSXnMwp0dq7Aj7Dfz8KHuy}qGPEV1G} z$+R8-5j1bE7ja8U;BqtUEmkC7-|d^h3;ZKk|EQ(akgJtX-$W&cfl@YPI9tQcu19ib z%)a@ZQ;cM8<)vlOJ$A%NN+p14R>1dC9A!YVXJOB+vg22(s??^1g2QRlRPwj|Z2Yc# zFWuvfKsxZ>+O=i7PdQ z{Zjx{geEmKN=Gi5d`;}DWkK1Xw+0-~8eVWpS;Ls<#dE;kD20`q;<`e&MB&%v!xPti zY_MhVkmg=v309000jLR>M(5D^6+6y4SFMp@ma{(BA*NS9+0$J{$h$f98h#3J+w#yM z`KMp!zoV6h3(bV@I~4MNY4{<)n$y*=R`8$?*c7&enOu*IiO*RGm*LquOU$-~)M^;E#}VM8k4fktj}{E%g9N zqYEeoh&wlK(yq6|i?+>_o{_VA7uL6DZvY2`03yW-*L&fKsJ?q6Q1i{p`DE=Q8)VpLD` z%cZDe%H(ynJhgR1)IAF@dbh54T4QH)>2ItHyZS#%SIpK9Nt1|o60v#y13YoaguCQz z3)idZi4)yM%X@r;gp)Y*hLRm&>IJhEFwV2~zeT}{S_^aU=(NpYc`HL~E~M$RF54pG zx`;;z8E>s-?V*_$=R8kEn3<5I1yH`Pu-b1u**E#yT_7%wJW#1oOZJ9_5&vGyKc>*< zM*R~?i%9A_)L zv#*+x27M>|rl7W%wpr26v7}zMQ@B5u^WR*2-2CDteL+k6|GC6b0_#>pL&O{zAgO1Dv(M6(hZCX@ev3KRVqor$*FcCFZn_g?P zB}@mBM(z;I@MgMNAtNh$nMmq5hklji_36(i!-bJw2|G*!zdBUAF?(3;@xdQky}`5k zB^{B;7h0(H!_1~`xr-94^G2Mz{96m-GHS1zxRfc4f}~5U9f0ZjD19BpSqAghS5Jb> zObAWnRSTn!ACna|cy^6BZf(ThBv(p6ogH?-i^t_e5KsvLP$UC5>ys4l`>#eZ9IMsb z8ampo9Ri%hR5SvFv{I^bs?^6F8CE^}ZYtPINc9W&wmF9ps&quA4%=!2M?LwQn!4ImJ>0Z4w)pRk< zfn*bKK(A6)Yb>!}x^wuRNV5mq;xXFA6#V5cIQ=gF4Qk>Vi9&g|7+Ee;Xw7BWGuSlp zG8jYIW@&-d@zc7IUQYA2u0p-8BSKNZmwoHDyOd)iLuU3Nr z`L|3fR*$~>txqGNg{?@9hY*OJ_IG=>c{%QjR3Yr><4k#Ah8<$FmWa3B08#UH79e;9 z!9O`I+j$u_)N$5r-euWFz#`Kws7WB*dcn*&!moedywP>~z(2jK0Ne)4vg*0opRXg@ zaLvM20WgIcN?exJ{J3DB^V~k{ECWGq$nYKaadC`Dh=lMD$-7y)_fUu8S?>exGnRoDOF&0cLn| zv*V;3QL+K?RUtGovx939Bk*C)q@QL>AJq)|M$z|a!wC~=YqK$W?L%r@{ln^l3fcx%H8;OWAHS6b#}%a_d&Mv<9S7NUP9?+$JQo z*>|?%$<2h~Ci|+kRU;)QVR|0G#5=WB?O|M;>X^k?8d06Kql^rSrOV|;hAv5a?Kv9vSW0Hiz} zG6_#uB0&12fBb$$>a25B;kmR25q~>;BA8^K;0zUCb}wp%2kAOU9pk_dG{Nd(FXh)z zr(#`i9?yKNQ&NuvIeq!N`feG-xTqNf3ZRnb5zOdt0VfmS|CG7RuBR0O4OttsWLea& zZAiB4sK(%KBh}<++Jy|u6=aOQaFFZk^q#3lWjnVsANx7Wbwbezf>-%|v zFk!?Gkj|yPp}@!&BQ6IK6|o@z(Xd+@9(fsH;L)^}yM98AInvYdSP@LDxZSND^ac>@ z`KXelcaqiy@9L%V?LC`8I~`x9t;eEc6Yz=4ukx&#J3Dp3T4ud#eAaXzrb_k5d3B*A z?Zh2uu2G}4CrpSAnnDAZ%FRF_pJZ_}7|2|rN($`erCWVQ?;wr?wWFZI?$d8mW^bEl zb}2*k=c#mSmW-eBTwS4J_{!KVg{GHK0GXQtkZ@9t_V0GsEp$H#u~Or>+QE2MkURa3 z=g;%c21TvJjg7@gmKycRm7IK^8Fcj_jMX{yUQ%_kpt;qKcj9C{_VaiTm;b(75{97o zrapdc-K2M>7-;dW^m(iBm2FUUo}vkf6*id@i>SAKXLud1zc$Pp=$iNKR2S0a*2}k-1!2Sywk9#gjb(%)n zo&5}WQ*SmDwyj*hDV_5l06sSp)#6&osz4HVLG=4}N|*sT_CG*oG#yXFIjEI>wPe#= z$eN&#qjlY3>#jmC$dAu2c*N-*Yk{@-m-|%eUAJ6PXX_RN5;b^CXK{Tr5hbUMEJiEg zuj_+OOCEh125Hc3#p3L{|GW4$BHB=hhi$SOCJDZdlR5x`->aaI>v6^~>phJrrfaX0-zbHj}AD1yUI_&eeu}lA ztMpK?D~UQeZv2R|abFE3Xo?E>oWF}fKieLCuXV19opwPh(U}31w9+`CFDbx{Xei=eP+ktzS+%#OThoaf zSyHy(&hi+qSrFsFRo0u%Rm67=J2DY_P_EXTZ;lm?*X_#_`enI{lQPZ<4slo>E&K4H zHUrad=~!P@U>VW>y@-+fEV2AOp|p-ubmyci+_Q7-tF%3+&d#;Vb=X19Q_x18vn-Wd zA%Bf^`CPoJ?7D*G{TTJ4e2=%oy}+##kz^*Jle$4}yA`ZxDC*6*i8nwjn694FeoGQ~?1Kid%M>`F9yo`N?6OX?Fc zb{(WuqqOdf@{HMhqs{<>^6<+UKWl1Yoa$7g?L(SE*DD=&zC#2}M~$DlUrin<27#L2 z=wuBPaRQtp=DoQ80raC9aMPF-V~d?W2!W0SO@IFZBCa7p&x16N^Myhb;t~3LKd;+T za*8taG5MS;Ai2LGC-}Z*XQAh>RS6B5=p;DsGHRRl1L@#qlZjV9MNX)QG% z{lKa&&;^)TPGGdTK6xyWctTR;8R~Cv35&BiWJhKAQBU>MHu9=D&n*dj*h9ndI-c$= zcF{ITm|kD?+yk#WF$|u)=W;)nMyhWmCU;_@{Kk{VjO88ZCw;Hh9vQ97^dTD?(z}1G zc{qHLj>GqEuG&eUGr*_-Lx0;RIg%jXlFkh6K~uV*R$;CNC0y1>uGC0%?^GuuIV<%-l8S_NJkTgUm7p%X?{Q-!pHmc+bg{_992)iXL;$%We&TE{+JB zS*o=86znlN1#Z>C?p~`(}l>sr6X4y%({#FUscFm7?VieHGx8j zw=_g7C$az6}9PWri+RIfOw=e4S>s< z>2oe-$kI+y9D)m9K%Z!C3=8U`;wM=rlfk&}nt+=zeOo%mV zRK4s(fY1MjxN+X;@?2}gS@i=!&-4Va9=jdk^*Ye=!*va2vsdwvs~VMi#`>;f2ZRcD zjv~0WpWE5sBVwqyCS7-Pp(`bmG2sq&r+NT$yoIR^>hTw{eZR0Hd%UF>Xg3>=QR>;) zoye3~vr|AL*|LNZPMqKgjF=lGqXc5miy(HGm!hPucxjSVaQwKAge#cSOTIGaukmD` z^8qMw1Rgc6j;vC^CNWoW0xS3Hfqd`Ufc1wM&ruWM6u zmG`bjB>_`R$yM)3SnH7SMvt#4RYz)Q^~~&|8lwF0ICzrCH2_ z#TfLYXCyhzwa!Tgb-h@e`I^KV=%_M99JM$h3`Jxb?ux#+zNf>vGHl z{3>ZQ1SV@P$bLwCRoTEDl3&GARfPs>c(bQ%Uqwnx+g?3V5SfM_41~f{ww~guO;V%` zz4-g@t_e*EJnP;kUx3>o`DKaA*l+Cy|2D;4d3jMKfx9`u*ygAaUn?svjxdyb{6sO= zb8TIaBcKOyWQ;-q%43Z+DWAo3V6ObAIMVxSu)lU_G?iBv-vv-Yz=+2$=dT}S*3DI)fkZVkFmJyDxyA{XHF1h6DzzyrVxvimhYw()3(8Vs zhW!PeZlz$-78=pU6ugLkVmBz@o}T#+IB){<%PV(@V@R`zk3}L-h?pL5M!QJ@v9YP# zFT|w8BCHclxUKRcU+OG<04y3Y{Q&FoWD~Ca2^K`zq_{R<&_%I_#tT>?g_HSt&*uVZ z)99LlK=7DtKWvfNAJ$>I9=yO|u4zKK$xc9zf{#ifl*GAj4_!38RPF<*#7FFqm^}ZG zjofHQmQAh?d4`BzdL3_#_ZS*Jk`$#BxzX2mRkZe>kYaq7vnB^>Bpg)G|6V}pyfq5C zR$NGa7NUUYg`D`wEYiFf>K#?%32+L_NDvRW#|qID8V%nu(rB>?j%UnZv++H0V&0E+v%Y*Y7cl)I^3O^Jf!v0hMvzh zUoK8iQVf4stpE(tF!E7B55RwAg=oJwKWsO)Swd^p+>89mP~pMiq?i|Hexd_KEg|?d zYsATJqCQqPh%BK&IkyHcO$t_di!2`9F7fLLID3~;uM?k6?EyDf`n%V&NV81I(Go2P zns;H00Olc*Yh6oNeIrscZ}u*aUl=qBp+MttcVaqR6DOnr-t+OV<(9N( zf6Qlsa?b{J;)To!J-!!K6cImA(h@P`jJf4IMwDhh6U<{;2x{$nXH;fZ!&GEqLi-Hd zM0%1>K942L5XV58T{`)QcdyHT|LpBxA3J0b^ajZ+4tsg;7XYrQiR}TR+f(Y^YSNQk7o$R!jh(zs1hFW% z6zB8+`(sSfIPVw%hb6egyR(V!tW_%IeEawY_O@`IAJv1IN``y^E`j`aJH=G(&`wKt zj55(}m|Pzf!}(|PvAZLI8CWNU3B6^(p3kesNHU)c2YKIVXN)%jHf#C@{`TEdofn^%J!xuBiTX-f1$k%mZux=moiobkRkid7n+X_&!vBpcF#jhw= zZ4&Ku{6nU3{1Wg7aK^|QX2*ukcYISG=vC6!ha`qk{w$34y`DcZ+1P=W_;g5Un9hjR zc|?lW+h0ROKd{O?zUX~j%zF=h!;+!|LmakcV{jl|5+Z(6#=|iZ$%{_MF7zo;=11*b z*vm=W(rl#ODyuhOJM7om`yrW=H6TR_T|l=BYL=#co8fCu#$8zllc%YFqqO;71_4AX_*JOi?nB!5mbe_7iFIL!}A5(_b-Jd^!nJPRT${Qd?w z<_16BRe<0Oc{Vl`Ly`PPkhQ{GF{qE|Ikxg^KRqGBa_Kg~+EF(ilv5(1Fo zY)Fy5+y6nDMl{Np{ng;0u&;A1Yg|-QNM}r(v@&4|57zX`zM3Oo$fi}ugh?=lfwu<7 znqWSB3C(lQiSfd}kB^cA)dEvJDDSn^rmmu4D8^9(p+Gy$jNoE`#=8gNY=l!>C!(u- z_Hdh42q3Dfx@ieydB$!h0|+xdDMT3Jb`{c=*oZPf(sFc|MbUav9KOZ0P878K(=P$s z5VDV8ZWzZR#oakVV|JgJxUreug8`_|FV}sGQ~0kwOa+;bi+#PG3b8G%5&}l^!hYocV^n$Uc>#fN>2TUlHGfR z${n#>Kpm68?^~5bt6eP9Rzn26MDkLY#!fKzjp}yV&zoBFNz?A|?cqgCn>=4P$Li$2 zo=1o628+P>Tc_uP^18eez&CH+;i+Wl)1#2N7HzdBS{+f;m?o%6ECfu?A{y-J&pqQL zJ4#~YmlsgNUrrZGJ^;`e=`-U$xn6hLL?=X{6*aV3dXrDlQ8ULrBId*)ZGbodE6vv5 zFT$jR$jn?JrNv&cCH0?6s1-XkYH7=%$3MAj7dwUe)2EcaU-ef5E%$*|b{<3xD*!gk zP!F|`zY$eO-2VuHT4WyAU7(|b}cFZ0-=IIH@Qfni|ROl{NMU*xnRy`pbg9Mu)yCw8d>;5@ak0sl* z-P;MykLqvE*jLjChScmrXWXlz*knP(-)E^!A0DKY0;X;BJ=xd@q}me|fCviBOGPll zC;iwh6G4h~(PDRj&mn_5`+{3Orimz@4u<)ruC?(*7QYL`xR)o6b3QPR`90$$D&K2+ zF8(EeYg@hkI|t2Cq@cQAmQZOz+x?A7^B*$d!S>K=}UN zVYaqy*>dQFGg?gIGJUsmR*;At5H&Wu?%6*jRL9nq^nJXgU5^a;$AlVluwkc)cYq#P zd=JvZ6R>jqsID<+H0BaCtZ2FrM#)Avcep+!T5PB@Q94E{PRVFzB1Yc(shU=-(HLJ< z{{mRUbdZH92up9b_C|f}mD5LZ7G~06Ypt`dgpVjwE8A({N$$(c?7Npbi`;d4+@}8e zPQwRWZqRXj|b4qJODXbyvd|FsK z0j^+SbYZ6NP_d}b_N8m*NQObp>Qjfg?T&G)SvtCsg*w0()cVpswwSGWRy)Z}~z!+l8 zN|uq|W7`ID^NO8bzbquqNw=k{5HZ3p!ID1hY-%U-G1^A=j`LfPMU{{=;MM7E&VA@h zHC@Z%1F{Hb=JV2$8~-{e@u#MG^c$F~8BhKv1BRtg9Fk9C)HBG9cW-`5rRIMJnLzY9# zwrc%K`SfZa#>M2!BNEJDe+!J5(X-?5-Q;8ICxgvDewDqV04dDYe$JfpyTi)R6z)5o zRJ7jvxy-thw%-spT;9T)$`>H`524J>J=vIV&Sp)&ABAj`(+AsTsO~>S#+J*XG7IOW z#=o9X7*NVd1UQW)Mf?j1{Sx?PvHHTefk=KZoa7L`Q>k0@Z>=9xA(}?(ar&q^4z=}J zcBgrUg=Al#8JCw*u$z)rey71~eT3Xtn#z?iLgn0dHFv`1aaoe2X6 z`JddgSn3+(uK>C&Pwv01KYQ-Chqf{$grdv_QrOd=>&sVFf<4?TRK-h_$w2GFrX;5? zC+nYrQ4SC=C_$v$um%TMuGi|xxnD&(5=e{)u{Fs5I!)?-ghgvvtkcxg)p}(}h)W^z zopTa&Ro|uSnj@4t#bfLS>2~EQTTCc!o*6VlNXGIpTjDnw@q}#p4hu~)Fw!vJQ91Fm zbjK>&+MC-uEY&CBXUA|(s)?J>$?fGt`TvKgA@l;dxi{-KANt!gwuwqsi~Y8^uEgf@aT_696Y`t8@XeC0WE#d1xn~>)In_I-+@h;Ep56#>i-+Ig}zZ$2J@PD;9 zkLj)y7V0DsTDus1N*~@Y`C#IlGH+y6c> zhu`vie4LV4Q-1kKBqYFoa?h+wqDG@e(K?B!ARV8ICr`P1B@dxCVvmdd^AlzkGtl3J z3KwUZN?W^t3RF_{LvHG`!>fq!JPpH$3QBkggDt?kKw`!1h|4%F4K z6m|AY`Id@Yr_M>BA+TLha`fv5dE8iOuXd`AjIpD+!-0EJaVsAgN%rl215uuuM)o>W z?>jiGA`WR{r3MbP6Nmr$CU5mlF0H1s|23D_jJ|V@0YM2cXsG9Dt$tCiu;IwA=PpR7 zTCq`lpx$h}FxDEH*TT~kdaUx%4Ic+H^U5VI>f8vQg}BI`279xg+eR?se78cPXGRhuLJk zcVfpX`gZesnMhxbuEsMHov!3ISE9(Xar?YA^#$pIc}Tl{=lNj>Ejq`UrU9jnBrM-4 z%{oN-|IFc9Ex@!t`)hCHYs0m_TVneiE>nAbUp=s&e+a&ba}@ag>0isjk;~>X=0p}w zln(3OI=*?jWi86QW`uE=&X2{qn=Q^)%(2#a)*lgC6dCU>^zSU>5x1E#mp_LzlJsn_ z7anffEkEj{Tc;%kIHQbhD}LGk7&%pxgM3KR#nINYp-M513zfHkVxbsIb?6gx;#DVL z=Vl0LB!asnO*wRftCzUF%fZt9zzwz^%kZC8PNYsJseq}wIGp6y}^ z&X7gSHKmwmoGk>x5s$~$2bBiosu}q~-)mitk9E^{mN+IsXz9yfKq+eutT@^$3C1Sq zBIZneyA&+wk*eP6jt+{7Oym#N{jp&xd)i;2M%W&GMiiTNBB)+fea_~fGV$cYgp*Ej zjX^_hml@jWh5zTN>$&t>$*o>;D@l|Aj9kF9@`Tl`cumsY>+}ust|ikOOT*DS(nKnu7U@o?Utj&_mROai(zAJuBvJ;mlkiB z=INKu3`*$pqXcW`Dh%V7iJrGtX|80Si*!&!N78z*46~-P}uWh3_fR-zq9i# zA+HyEk6?x-Uf%3lDlBwsp|G@U#nF>xW9<^gd1Q^J$a}Ru{L}$OL8ESEXi{nbD!cpi zJq*YR3#L6@EcQ#`PYo0RNV9C|&t|BBv_cikVya#)!v}I|$11Ue`enFIHV6mTizHsHM+wWodQ+ccWNDr^}RX)}w|# z`ks(+%Aw6~5d_~zv02$Zo{^0P!Ev&$%g@f(3dNG%C;i|!5yqAK%ky!XEO8aPau`<~ zChJ(LV3G>ovale2M#PCTe@`Xq{eoY{WZw`55n$W8_DO$T7ME1IOnfoyvuCV^Dr}&ZQ!4KiTuJ}kRuRxl*Hfu?U z>OQdCv-mJ(CQSn#rVR3D074s+YX;2B=cBAH|(w<%{;R=X6x<5D8@TNofr#iS@2w~Atc8Ma<;!XrA*HlY(|DMA*lwOpeSnSq zs*g_b*9j+YZ*Og3EbrpQ(?|jmbJ`;Sf+G{WV?`CrPmWqF#kbQ?P2C>+A7B#0MpVcp zYO|*`Z0wu0`C5#K1})hFxsW_X=H=nI+Yuxe*9IW3oB8OhheH{-&J|^L$5@}8^A=Flp<^MuCVq`K=YtvE97PB>k~_cMsQz-%IMUUp$e~^R zmO?E3%h7m`+aWrh+R`L1A%6n{6Ys^wwNZNueWf_-Jhb{}k!%%o^OkmVP9okD4fcO= z|EigVr35qdPBzc+d28>&9mk4@GS!A1KF2sF+l$9dwXd+Ot`E9fj#(TZNdoL`F(>(W zCOAO*`7bsMRN&b=m|)98A*p`~d3WCGH{=9Ub_Oh;$Hk&WQ6M$7@yLIGKgVJuye&lO zvKZ9LlQ32JciG~$Ur0%w(X55=`*;no20>tNE%(A^O^n9@X$0~(3a~nNe!<$b-zGUm zR+(-5swuB(TU+O4q4MJw@e=W|!e7J}PnSAVneiV$jgO|%b_rdxH4K{c&hJ7F(9To) zZNCsh(jkL*80|-*z9fhslIT3!1X8SH_V=7k+>K=d{mco?AYRTSaf9Xq86zT?e7HMj z4F2c4zvGgPqOVtd^Gku{&be(oKn~*Lb805jk1_sK`m|D3+R&j5qVqA~dx!;mDJ)}F zVpD+$*FS%w>Dn3K|M>l*`qR|Ibw&JH;yhG#Ow5zct(vs@HVGo!R3P;CwF(Q&fOLS7 zDWi~RLQTf5)Xli@LkZZG7iO@Ji245#j_QjGNM-RdQ9p?VAxonQL4k1~F#^|zfX2N{ zQ=#=Wlx)+)^$ek$Ul838yytaz^x|r_RV=yQ<}`r{l3v-F|yYzyUPvX zHH3%GsAKcRX06F`-U2=obHhGI8R|mh?Ose;+#fflA|=K@=}P2i?&pQS`drL`d5wSu zFD&GDz|9@IV-A1D$1v3mk@O1V9_24m$D73#5aHwm;`lfQzkT6p zoAw}E#qO4Q;&Ina7O#O%#bkGpOvJBd&hBw?vn`)YfBaSIQRh1o)cB|jWQrEFn3{DD z88T==E^_<~9k&P>OAD6rv{_*H3UFniF!}I>A{3#krTGap_U(wP7K1az?Wm!x$NT+HcB zAzzgwnuuyHr9r`F7xf@vgdZYa$4#49i(0zoyBa*oD4A|6DoxXzl^yXf__rIQ+=h}n zzW>(ShCDYRxbgWcinmsEnpkhAIG3YJO+dHuMx6e-={GloHdC{Y|3VIMnW+0J;Lwi5 z`{8rqpkahS`_wMch57p8R4uQGG~IsRNlT;}w%SlN(%J!LTSf zK%8)BlIHB7BdTxELjAFB>ai_rSJ;XDY5$&SUahwpJ&l-p`888wPFK=D99 z4{oIY=3n1i!eRCze^7rbh2jY8G?S|7=Lk-<#C^CXyB<>e`E}rYs7UKUn>65Y!B7Vl z1{ET10p{8KKXhm%QIV1Mp+@d@W1rmbvxBf zgrMD9nGRa8@4nvpl_A5Pl5ASlaW~@mPJ?t4^p}S)5Z$T3;mg>g8|0 zo32lRWOSPWW*iSaT1d1}0JogM)T&}p-|D=3++xkvMxTt2@Do5q`{=Zh+)Qgj;*Tucj!5{7o-Tdq`oe(prM)W^_PGoBvyhpyaD~r{fX~WG)AP32lmPFx z2A2QNK?Q>@x|a(BZRxU~CmeCtyzlx(hXAH6DYPdcFl=}rPYr0UzB*RQ?MZDzuPpFS z;Qe7#)uRVAuuWrQ&~M9or;$F0I;bc?W;4*)8&Ng55jl4;lYz?C)?&2mmfp(?dAygt zsvG9&A2KZp(@*%^0pr{awzY+M>#tWA7$yT|?M>mT>YTOwlz%kO9d@3)ZS3jKA8CM5 zGf{$GjwMmk`?22OZd+j!BMyCo=Q6G)cW$KWl64l|{U|0`b|!%k)y);LM86(bBlVGY z+*mzpSI$=#mi7SVg6nA;*T&C1r37(zL{PrzW`NvPQ!H!f6kRlU8G5hLNIPy3Hggfg zM}NK`SpH4dA?DwABFY3p0zLEnBN;>cM9NOeYJkxbD%ZMkZ5lohp^MqkY5KFrc|~(p zSS-o94@((aHmFT*d&sH*X~dq4CRlVq?!;eNW>DX`d9cn&5?%T&R6ohK{LEWN9s?`~ z*<0>g(gS|8^$mtmI!V|s2R+0s-}>5dj7mSHhq_CeK(k^TwhV(V9! z8)-t|FeCSVb8ENOsu` zccyR`#Jny%lIzN{tc+G)@L_`TguLgj+x7N>BGQKXZQ`2LHImZs6tn!nN4Qs1;ay0{ z7+P`jpj<0)(&Pc}aVud?V7+9MW zrQsrAA~)C7l^VLU8#}T>B?|k}AcW&0?{=4>lGs>$S(wTGi(poyOyJJ9X`_9yPs5h; zZZ5(tpTpQY+EDl|?p3P|4Ax}vG#`>gIc~12-0IrvQZ8s?Bzu2R-ChjYgvsnGCt(V_ zSRrY>^Le7&n7p;7g`jHYe3<4{)17**U8nQghW*fs?S?fj+Z5sy?)42@uWD#3qFQ*i z5IYkbrV=2@t0=P8JYUDTRya9EZ7vHV!v_3$Uo@ z%YpYSQ;g&Q`nLOVzLzBgaq%Cr{R#Cv_ZAACSSPY9!gJOI=D$jmRN-xm^nUdQWj5dP zI}DG`*n?7hcLMQ0m=pel+oGm)J^vn@CB2&1k44)hLW^u699 zR*MsTA8=GCh$)%?X&s@7C9HIu!17_~ZI#d6$?t1d@;uXh&pfARtJifADe10bA2_Z8 z`?qOg@?c39P=qmp*NXUZ>MbYswJ1GcxpY1?J1nm5i2YmTA>?Cy*(}yc9bVE*Fq`w& zeQ%Oj%sCDGFmNAJ`zj*(IFFPALK|%5VsaC7fBXbZrPKX!$Hz*H1RAM$KODB6=`pD9 zy@;hI4#Xr`OGy)QLv$z4tBCi9!QJQ-kV+DSRo1%Qb*j(MD=txGC5DHo6 zuUgrgCsKbB!r@7P$GDSw2V3mqdHA4VTn*5Ip_5t-vlF8@i~* zx!>FFu9tTtaHg}`>arw2>b}ilK7JlCn;vh1#JCcUjAGw(;rRtM3})ksYnBAt zf8F}2`+AL2t(0?77|exlXDIKobS#F~di!e@@=o+Z_90wBTa0_1wK(CYi*xjy%c;io zQ&^N#XO|*ea>jLp`>8x7rItGs%79p?o(H71EIxXFRq_Yk5!En_4@{PF&wMctX!F*@ z7J2xbQ$rzKg)yaUqkHq#VIMwsPX9)l0HEJrrmr_RyDfIocm2%tH+bbEvu$G+R!-mb zShIAv!zjw7nzTi-Id5{(fl`neUKeCk2Glbo{FplnEW{-qw)%py(4dlvJ!o?_k?4cg#&Qp%;Bl7+!$mX<(D zyQ=aaoTGyWr@?xR_UE=|4(9tmk&3 zBrHYEM^skQF#N%55BJ~9ugU^au4YaI2U0UPJ%a9E3B8E1D)-%a-jd-?ulCq{`&NIJ z+CYGpx>}0xYGizA4dW|PAq_yK5KU26&OrGgV&G6IabfXQbp3R$M7UD9ajds?JRcvI zP1d=Hmy&&3jXfRbGRB>M@`oW{a4UAu3}-m+2?E5Dh=~J&$C&AAY68=&vBOk$d&^1z zb9K?)!!i8CkbQ;3 zB7N$EJ)X{}I5vt~__*Xe^LXE@X|c?ZBt{yrfEWl1Sf@OX%K zQQA&nFcn!&qps2#_dvd9Nec*{7T<#(hJk76)$_RDB?sL$B6oSOT`I67&D$_jS4ki- zsfL5ACV;!IXmaqJ#S>q&+q$h%Z?_AwZzID^R?}~j#qzR?6Nm3TK57e9(gjg3o14cL z9q~VbcE$u^ES+f^smu)cMl! z5rLp0r|@SRA71VHdLEuK^YKG(pUJ3wvEiXAv;dat`weW2t@)`WWc+-u*yS3RKCKkLE zd9DlWC&$@-VHVJe;GKy6RJ$&*BrGaAR`cM*nNTQ}P&+Z?e~EE^b%CH#(i4@v6?t{>xyzq)5)pMv`O`cQ&}87nrN5a82c zG1%OrHf7V1mFq`sWagBZiaLa47g>s`XX{rp-h{QV&z_0s&5@!WmpXRIHZj04|5VP{GLpN4cpyTo>#$sEYL1zjNq zOOis&2Tju?e*!7#oRrB$<%XH@FJkMU8a2}@!icEr0#`7X?(ElG?e$UUwBh`MblB#d zbl5A`{O;T{L-3Cj)QWsGGVm#aLxC^tceMR#lFjxOatt%L5zVUj4?tTNDvR5;fBT4- z+Ln_!#7l{oEa#?|Rt1&7_g0C?fKNs4k1EGV#;_EVK4JbU$F(18Y_P)xWmp3Q?}M+^Yig^6H{<#U=aa zrr@c;>C*?WcNud%d??RfKx%veDPbOd6L+_h^86a+(wgYh2;$uuXpTN^tl+3!DVWfT zpW~4b!K9ec)C@+mFF)hpf9`%$*=dUZ_Ggcia~m0O`4Q8!kX8yRW#leH7R>jmnWEX; zTN5aCSto(S!a3~_7BS((p4OBD`FE_AA0@hOPqlY7v*kguyBuY}5vpZLJq3s(rot_i zi)6MzRU!6bCs8F*@LS78_v=kD^fVCsU53@h<}%$P++OyZ858ykS+~#J z)%=Z*D+A}ii{PxvTrwtTfMA=bRrIh}+QpGJ-x$EZs?N8&M3GX0&-tmZGA!yEAAsn#nRp%wEXFa!0|6ua$FDvbQkQyw16}vTwm6cl+yGoXo8Tz9_kFJ9qB!24 z9H5@MK=YSlL()@-(#8T0ZAx?)UOdMOV9Re?E}OLs4}B#xnrb(0Kje(5=75W2+igw6 z;iZ#e%a7??2SRzl5hHTTp@HitFKLcYSv0g~J^LOasBc;+^<+Yox_IOC6%I$vaII^Up^CurpCiqrm?GNI|#0 z5yY_=%Eg?wb?xkGGI6#i9CpCke?NMZD;Uw&0aN8TAbme7llO}r6o4Cm8=Mb8S=a~w zSsi28+k5WzrI+^@NTb>2xX34yo;M1e4)y>X?H#%tdQ+y7GP@T$)b1Vejt8gZQlq7l zDhQ`8VxCCTl~aIJ<(Olk$LeVe#Kj!4HZ#Cg89e;Ir3Dbk-bpM^KzPUa=DHQqt{g!W z-h}<$!>Of4l$6^@*5^EAD5Xa&jAWg>4*vjJvW4DkT)4qeu#wkj$35vT?cUmNHF(K6 z+%S4$9C8IRJWS^5Agt|xLvo-2+tRb;m%-Fzh^dmU+zj!?-@qQfO0(vGtF^MHjxtnw zb?NjJ$fZ){8v#ae$^ZxOs`oM{o1AqA1a$Vt_=?dkTfMx!0FC7hF^C3TrG`gBqrcXt zH()5<;2%t2W7>oe6b;ozM&ZcMwM`zIEyb!#?4fpj)?AW7>?&b)n_Gx@gs3Ab++{-G zW7nr@f(9_j`=uO?OJv}Cb`=SP4bhHR9mj72>56o&(>Bqb%t*#|{{W913dU~MMv<36 z%M>uGNxfP({{U7O8E?S!$FTgWNQ6Utas}k%1L^+&>*Api#N;|=QlsS0$~o(gQ=Yz^ zxv7*qkF#p0%11dK{{YYF_||etFObx05~_0BdT>9x{XMFDe9AuZHZXmuiS~)rT_Q#d zImh|q+Lz^0W5ySy7V5iyUw{%60ka+k(Siu;kLyCn{&0;L9yc~WmN=yenH9Ti+m4y^ zrvCAyc#eF};wPWOj@3E=FjTl=7BL>)RF1!gYJZZ>JjnrEcRb_rs0s4&hcA}oao6eX zQxO9pXjp)8o_ZDUo}AKl>H{*RcF*?#!2kiAdR3JYLvX!gFXul3jmGKY4Da2Yu`&V9$ykRp~;M`Q{!#yB4M z>q?Gr21@6*Vf6n13S39Y9Tf5Z0M?`3X}Ex`87t)}&f)3&y(-VyZbKxIL_#(JCj$h3 z`nuE-zm;v5I{{ESWd0Qulyk>rh6gCzus?KrkLgnzw{R}u-X@V3JcFELIPLVQAQw_L zAp%EGPf_d8R1sRnzrNmZ25@-&Dpd0XXCERzA&>WczrwPLTloO6eUT!;;!ZG0$>-@) zn`VW~P6$rSIR5}5qL~VUk^HK-1JwOJDn_+K6BuM{^!d*fFPYgy1Q;8Y@yAdIH8EmB zq{H`k<8K)Jsemb5h94;l?M@1%cPJr&>F@n2uKBcJNT+Ez1E&=O9)ENJ#uR=%Y5r(r z-s)A4sqg7e$tYvsZSB&z`}Y3;BcOrSFDQ|bhQKS|>r%xm*l6X;E(s*@^7?U08><2s zjlDLHUtekxHY%kM;AiIP{zW(ae1K}~P!#@{#yzN60=D=geBcxG_6C=9jGa36?tM5P z(vLC*+a!#4CqeY~tgUyT7G;^`1hY9#rCS7X>5i2g{!``$JUIUV^?m}FS-wy>bI8U& zFG{H^$gvHZwqy`aGtX>N=mmvnJhVZA(Sem=!6KcLo$`FS=Q!YV$Kh4sEgLkbIc~$h z(v&MK@8>feqxiVVBaS*$^g0P-kpyha;4d73$I_!{-G;?wKr#t9$;YKa!6uZJQ{|}V z@b#zhAi&yJpcwS(XlW;-0noHO72Kr;0AbW)x1~ml5FTWIJAAmu82l<(9y23IV#H^l z9B1q4Nt~Z1Pq^cNdXK}>x&Hu9AO`|Zn;Apb{{YodqOT7y9X}yN*@z@?{JA*v1MsDH zkGm?bKu;s`qWuxjDf2^t9>Rw?IQf4uQ8LdYLOFkR>yF*2>bONOjC60qgTUf~2L1dy zBLb?&1dm}!w6$PDlRdnCQ~d4scLCEKGgjo5V~w(boE$HDhFFqDZ{Tss8NvEe!S_hp z)C?bG>}v@{zjWFg6UQS(Cg}cBdiB~5(z-Yk7D&Z!0l7hI8x3L63T$Vy;nQXzrrEMvrW$aH>ylsH?FV<&mH}KwKt3@Aayo zo&65p6n6U6h|15s5QZRQYiIoQr0kzDv^F!Y#mRp%c2cqYipjuX_3uk>1+vbYSd7L< zKK}sA9+f4`d0>96t2EllWXS%NdEvLm4KdYiz(c= z$j(RfsO0h`j}qXF@#-qW%W45>fle`$=cl*5MxQ%`lj=Afx*F4Wu@RA*ePaoXMZ0<3 zjjfKIzbfXAke4KG&+h(Tn}hjRZFuk-a9rh)hJUVVtHvb-*8@EdulQ8B-Rx+cjt1vK zk9U+tSq^yV(~9L*-ZzlBTxS{29eCosYfxpD8C8Zj9X+|`xS6bnoW+Jw#&Os10=a7T z{<|BT<-82{3_1+`(d;;`%SEwx&zQrLm^rRTRe~kC!+eTHaGY{Gn(J;@%^Ue`xF~K9pzbS~ zzlKIZa)aga*Cg_BS=4{ax8MdOQJm$zP`!HqN4ILRBHbCWxE$b}zKziS6)Y&6G>jN1 zA0gwf^r)IY^pUeBJp8`fe}~y>EOZQHi4M?NcI{K>N3S1Bc4Tke{EXcIZoGD>U5IUs zl};1}J${4os-g2C z!yUj4y-&4KG3POEEJ(=p!2Xo<0};#5H(EL8}qQu zoximQjNvygYOFe7Eq>48c3btFZ74x?{=X!Cf5w@Qu)|6DADurCb%)e%Ci(G#NfqSq zUD~+W8QV57j@7HI+(|w4!`zH2pO+QP1(q4)k)gzGj(gYoEt6q=oi!8q>o>&n)N(1@ zMRXuZ3xXpgdVMP~A62)1_?boKD}Sr!r8`i#v?0FDoMd^4*FKbLuN&E{k$&n-e8WDK z^wi^RkDISlWy?n#$nSIIwm;R8n#;4kF=tS=LjM40`A?w5TZUA)hCADc_ZYGX?ND0Z z4MyHe2x18wgcVW8PPMu?3vBY4rH0vlX!+--N{YhQe9LnryJwT`jBqhi>SyeBYAtQ| zJNx4vm7k^C-otSdUr)dsraFE#xq~+qE~dTvP2y)~8~asBVZDar$2SQdD#PBiF7GXc zyW1mqk&-yiBNb3wi>tlyN)FNYeKB1E8h^B8GF*v-WkwXA@UB(tX0a078GPA4iF#)> zveKVD-tJAOpunoPQb4enrW`L;_4J?%7B?VSMlt)~M(URG=g;v7vqAEOA2{GuYeNk38{{XE!W{iE>%}J%6HC2BuIsWj*dUVAAYD*sLc#_?Z+5Z5#2R|)Yi(E_L zaOC#KN|~aT+7yB&4Bx_gW4&N1*~@h=oClRIIv-DJ=mV&{`#q|CspQpsAe8J8;RXfsc?PM2Y zX_KI-^-VVYBKyMN%0}P9wcrr9`c9@pG7NcMn4k)pT2F1|MqN}eIqAkLJo&Rck!kA9 zBmMmL`c;8xXQ0Fdv5!vs91&rg->{$zd7!&{l()BDoexUak|)l< zKu(NnCJ8PtowwY5pJ>K0nth7ER#cWu%$@oJKn#{JbpZ>m=<$SqO0}iU_CnTH%o&eS zfmJnVVU8Wa_HD*UJv}PLhxUDhes`7o{_cI~0h8%%8p(Gq2JYkhDhms1HIM94GYK1( zZfjmiV1$`>WwH)WPs*Gw=G1j5XHH^-44+@622(lPi%XliVOZ`kiJsjt(xsN>=3BLl zoD;zODnB|;wM}svaW({F(ygr1K(fO;VZs^yUZ>HIxU}OWLngfxTqwRWvJlDTE0oUo< z70yQzOB`^|m{1%gZt8C}qOIMS^7r*#!_u!HwwhIf?SyUs!vWTUOv~#ldui?Bv-xB_ za(h(4E-j>cS>X={90S&|&|0>olE0DPF=~}jyt7!qb0L|#Rpa#zNR(4`|RIdC5 z#|EUimf9PDU3riWeQJ5-k(LXjh;56i5z{rBb9NEtySh)Ck1HLh0{H&X)8ucm$C$=5 z@1E62Sgqa4+T0uB;I~}^85k!#*EE_;(F68xnV9CY z4n}Ov3_6rZgAwDTeKGjbU9FSaMQP^wv)iAS0|N)%sx(rhvP-CNnE6yyeF!Gjef#o$ zT#kTH9E{z9?%vALzFpv81L|vH((c;bWQ6fH0a55Hj~43rwt+tHM$bxirE7Pl!k$Zq zl0ohFHpWTdgj?X1lRt$eycSDu63WI&iQwn@RMxXBmoufp zfwzs_C=Nzbiry(2RlWmcLxK-ACXX?K8E^jp<&+#I2d}kNO)AoM^KGt(FPsmhThXpA zQ_M*ISkDh392|R49E`BVrn*!{-R6Emvt+uuvPor+GO;7flNi7rm8)+m%W_amBSZZv zMV@=~Hp-*PKgEwq1CflrHn+CnW1k=axfFM$v9`Mp37$`rvg4?#`cIW=pSzdJS&jiB zpwx_?Yx4|&Rx$G6^`Mhx{w*%tte0Hw=tn{AT>ZV>ypM7AAKj{vhO4q$MRBL?f=tMt zeLl4c*;zEg-%oDCj8Ft_B9T_?P3E*`=3aud@2&1*bvJM3TgnFjV-<^WZ0&NER;iRu zSoF(RB)o{0>7JRXu5A!oC8e6<%^WAvtZ$b3_2iI&3iQaT zYjZp@!uIm{l5(Lj*zrIa7YJdng5S--LQ5d6t6Q5`;*WVM@{DKFvMyx%4aBydUTzbf zoKx)Jz0{(P;wHh9JY%LP0_DHi#lu38?2r4|#^YL1#r>mjQ&xj&ryYAz*;p;m@(X5G z##bFNQcWM&wMVy!zR~7mKkQ?*04?Rko|NJn0kIQ|dgif}(Og^d$T=goHMb_1w=BWV z;yL5mnRa2C)wh8XpO=ojPzH6Rw>x0-hJU%*wp!(Ur(31z$OQU!rhSO7m*$e~9tiD$ zQC?YFOQ`R<<}yA-A4&j%(^zJR&21jg-3NXurR~huaK&>Jo<GdIDsPpIWD7~w2-%vF6pD#xWFBGHE5-# zo3apm**av^>r1ACQ!T0ywTB7^6afX8zetKsLlhY2jt@$p1p0JoXK@~5$$G>>_v(mb#m0M32 zb4DYT$JeE0+uyC#!L^bgktyNx?LZi>E7~kV^~7%{Ob(TC((SyawU88FynEGMns%jf zu$3wkjDLF-75@O4rd@0cgl?SB0^Y}}rSjZZ{HR6?^`v`PV3f7Q`@>^?INS85MK#66 z`U{{Vh<)0raXr1g%iAV)by@)1y|uN}f<)32$I9PMm6>mQEtHR^Pm6)n0Zh|x5^yf1 zf0Si*W2IBFx3g(-i-DZ)&L{%*p)I7gKj_kIV18xC@~ZdE9k!bsagFFPyFGL5T2hNW zQPiY6c6EN4$F)H$x@@kic#K*+s)5pgDT|4n&wN0{Ovq>YaV)<0H%p^cXB6=40&BYA8NLUvfLQtZNPou(-mt; z3N|O5@a`gKr|a>_ZxxeLf=_q2-C|KoZ!c)vVr3%uu+_-ngrg-y4Tl za`?S9d?M>pLGjOLS0yVNYpTBHN!{w&Z0cd@(a@x%|6C_FAWVM{Hr)252j z>9-XbQ}yjvr(2k(h}_BLp~>5f@;g*zmr;%><{n$~f_*3gt=0XK+Z$OIVEzs|)KD2G zw0oPsm>>c?e+@)l-Ddk5kt1UPk8D!Gr_XN)F*ahj`@sJI4k!VaIyHktkSxEw>T&*Y zPD`teDH__~?pFJl>57}ln#mEZlh28|9+hHgBbLEX492IPJNi%sOI=Z3Llcd;#yu+f zvc31(EzTJ}`04ppI>jB$z>-JX$KA(FR>iHoy~HAWnTGFPoC*Mj;t936#ByRUuWVLy zx?E!MTINre&~eh6saww*gt3<*UY~_rw9*CiZ8WT2P6yJiU`}KJs8f|+yhT%$p}o6n zXkyOXZ9jI4T{3jOn%*}H8g433fck*n^c^ed<8^Hm3vJy8iIza_5dZPz7%!*ji@(J|p{>=OET*n3mJo z%q1JLa;im7b}wx0t?dc@)AjGgE6cJx!;dWh8+~gYMsykQTO_wHasH|#9W$TGrn)xv zv59S*w*CO=SD}*0Wn4#vA9VHy-iWOyy(Kn+tIId|RmR|F!{^4nZK7mGK6U!mS^HFz zN3qY;bB}82gIsMgDe{x}m+4uO-doLfB-209#y)1N14l);w~zfMGspxm_53O|)rFSJ zcwf(mXK=?#qo+!uPbLx>&UZCxJ6=r(k!cuS?zrnf8FC9?G|>eGuX$m&)oN*4J|4-tTeeM&y_jud)AH2liq2| zEw}F`K8G2uVmp)eA2N7%7x(+Ma@$aX*70r=q&*k0%>aM@)&3V^wii|=@sE;NaHF1{ z)rW0%_wLp%zG43MG19jzKFe=;9jmVAA9cD4sd;;GV|<=WVVyIT#}t;wGT5zYacVD8 zC?@&35JyZ^htpDR+J(HHbVr7dpagWRSIn0mX}3*{+Nsn^# zxOSijV6{lDOg5)`oP5XlN7Aid*~KNt_IC&LHx3v2t?K1sO)7q=p$v&Os&5+G0A(ZwtJk!Yb z@>@*bygZRW6_Bm9quoYw%a1SGwlvuHUdcSIgpdy1c&s0_T6rdN7w^6gL!-3jPLVQKn|_ByLux#7oN+*PRV67zI!+jipvHFEe^ zTSOzCE$5Ff6ai&*nU9xps7i7P#yG6k)ghnEjpO0|==xTV_LR`*!pCaw{)e?<`44WZ zb!tIq4Ndg)6Lz!tfrrb+FyY4BNGAmvU0s&8c;79t8DJx_7yD!Lf%Tg$;bamGJdRkXRj zi6AHEP(ePQg#c(Pt-B*y%d!;c2lAlarN*Aq-JlAmr*m0Wv%>^J1?FE)#-VkV3;3B^ z8@}@O0)QN}RZxmS(h*tuT) zg#dJ@)>?OzWyh0nGqC$r3ANjMn4TdRDi0iE6`gRlmscsV3xymE^sRXj)Na|u`T6qH|-Y@<+=h!D)oiLHrFl|=W{<) zB7hxn70Jg*gMJwNDjA@aB!!WHM&OZJSN1{e#log0Uwm;=JP^nGkii%LP!4x`&<8Oa z-%ESt+o>+3aa)?Y-anX@=rMRUN#xc^P^XF?>S%%eY1z&28CbqT`-7*#!0DI5_ zuW#LMW1mQma&&M-XUrZcjnt9|3gEUmsT)vzM4Jl$BXjyzeZ`c)+TP($nwTVmozwxj zAzRCpVw)mvcMdvxR$bFxT}^K!W6Ozh1eohgj#-^U-3^MJKA%d}zMZ176QJE2<7PjH z@Sq0AYaF)nTC`bWN6(yMwBw%C$hJB8z{05Qilr@_KVxh4ICGBue+q>zA-$RWnM5Wq z02u2)8K!vd%13n`$k>pro^e)e4w?O<9-k6qrRo;bFZO+`eq3Dc z9WhlcYy>jO9&auM<#?b7F7HxlmrgKd74QA(wKEyw`!oj#F@yB&RT|>bXrs1@UF{j+ zv5eN5z>gd&5X!K?UX%e=19|qpHeZcMt{~E{*(a)p}Dz94UBka!205)mfr5$5Zp!-#r!$zR;}fNIg3V{5l6~J zRWZWyd6y&1XCE�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%0A$Z&J+#8%n|krLKDD@PTJ0L{JS(sn80;#Z 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

    /// This can be used for storing global settings and defaults to be accessable to processors. - public IDictionary Properties { get; } = new Dictionary(); + public IDictionary Properties { get; } = new ConcurrentDictionary(); /// /// Gets the currently registered s. diff --git a/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs b/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs index d1581a00e..80cdfd153 100644 --- a/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs +++ b/src/ImageSharp/GraphicOptionsDefaultsExtensions.cs @@ -71,11 +71,9 @@ namespace SixLabors.ImageSharp return go; } - var configOptions = context.Configuration.GetGraphicsOptions(); - // do not cache the fall back to config into the the processing context // in case someone want to change the value on the config and expects it re trflow thru - return configOptions; + return context.Configuration.GetGraphicsOptions(); } /// diff --git a/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs b/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs index 4f47545fa..7ed73d517 100644 --- a/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs +++ b/src/ImageSharp/Processing/DefaultImageProcessorContext{TPixel}.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. +using System.Collections.Concurrent; using System.Collections.Generic; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Processors; @@ -41,7 +42,7 @@ namespace SixLabors.ImageSharp.Processing public Configuration Configuration { get; } /// - public IDictionary Properties { get; } = new Dictionary(); + public IDictionary Properties { get; } = new ConcurrentDictionary(); /// public Image GetResultImage() diff --git a/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs b/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs index 72ec35538..21f26cd01 100644 --- a/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs +++ b/tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs @@ -1,7 +1,9 @@ // Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. +using System.Threading.Tasks; using SixLabors.ImageSharp.PixelFormats; +using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Tests.Processing; using SixLabors.ImageSharp.Tests.TestUtilities; using Xunit; @@ -168,5 +170,18 @@ namespace SixLabors.ImageSharp.Tests Assert.NotNull(options); Assert.IsType(options); } + + [Theory] + [WithBlankImages(100, 100, PixelTypes.Rgba32)] + public void CanGetGraphicsOptionsMultiThreaded(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + // Could not get fake operations to trigger #1230 so using a real image. + Parallel.For(0, 10, _ => + { + using Image image = provider.GetImage(); + image.Mutate(x => x.BackgroundColor(Color.White)); + }); + } } } diff --git a/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs b/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs index 5f673b9d2..03fa6dfc2 100644 --- a/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs +++ b/tests/ImageSharp.Tests/Processing/FakeImageOperationsProvider.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using SixLabors.ImageSharp.PixelFormats; @@ -56,7 +57,7 @@ namespace SixLabors.ImageSharp.Tests.Processing public Configuration Configuration { get; } - public IDictionary Properties { get; } = new Dictionary(); + public IDictionary Properties { get; } = new ConcurrentDictionary(); public Image GetResultImage() { From c49d6b78ff064767657245b6a6e0501a8c2c233e Mon Sep 17 00:00:00 2001 From: Turnerj Date: Wed, 17 Jun 2020 16:44:03 +0930 Subject: [PATCH 110/130] Added Third Party Notices document --- THIRD-PARTY-NOTICES.TXT | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 THIRD-PARTY-NOTICES.TXT diff --git a/THIRD-PARTY-NOTICES.TXT b/THIRD-PARTY-NOTICES.TXT new file mode 100644 index 000000000..eaf9f73f0 --- /dev/null +++ b/THIRD-PARTY-NOTICES.TXT @@ -0,0 +1,32 @@ +ImageSharp uses third-party libraries or other resources that may be +distributed under licenses different than ImageSharp itself. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention by posting an issue. + +The attached notices are provided for information only. + + +License notice for Zlib +----- + +DeflateStream implementation adapted from SharpZipLib. +Licensed under MIT. +https://github.com/icsharpcode/SharpZipLib + + +Crc32 and Adler32 SIMD implementation adapted from Chromium. +Licensed under BSD 3-Clause "New" or "Revised" License. +https://github.com/chromium/chromium + + +License notice for Stream Read/Write Extensions +----- + +Licensed to the .NET Foundation under one or more agreements. +The .NET Foundation licenses this file to you under the MIT license. +See the LICENSE file in the CoreFX project root for more information. + +https://github.com/dotnet/corefx/blob/17300169760c61a90cab8d913636c1058a30a8c1/LICENSE.TXT +https://github.com/dotnet/corefx/blob/17300169760c61a90cab8d913636c1058a30a8c1/src/Common/src/CoreLib/System/IO/Stream.cs#L742 +https://github.com/dotnet/corefx/blob/17300169760c61a90cab8d913636c1058a30a8c1/src/Common/src/CoreLib/System/IO/Stream.cs#L775 From cc4b52400d52fbe1d83e8914029b58e65f236b48 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 18 Jun 2020 20:26:18 +0100 Subject: [PATCH 111/130] Update shared-infrastructure --- shared-infrastructure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-infrastructure b/shared-infrastructure index 93bd7d17e..b0d4cd986 160000 --- a/shared-infrastructure +++ b/shared-infrastructure @@ -1 +1 @@ -Subproject commit 93bd7d17ebb029d995d7fa69d4b4e850ec861c1e +Subproject commit b0d4cd98647996265a668e852574d901b27f22d6 From f69d5e99f4db2d0f463959bc399e148254f0b402 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 21 Jun 2020 15:31:43 +0100 Subject: [PATCH 112/130] Update GitVersion.yml --- GitVersion.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/GitVersion.yml b/GitVersion.yml index f2a251c55..516f9f496 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,7 +1,9 @@ +# Use mainline mode to match our development approach. +# https://gitversion.readthedocs.io/en/latest/input/docs/reference/versioning-modes/mainline-development/ +mode: Mainline continuous-delivery-fallback-tag: ci branches: master: tag: unstable - mode: ContinuousDeployment pull-request: tag: pr From f49ec126427f7ac5f0cb6bd3254b200d8b3484ac Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 16:58:31 +0100 Subject: [PATCH 113/130] Use MinVer --- .github/workflows/build-and-test.yml | 43 ++++------------------------ Directory.Build.props | 6 ++++ Directory.Build.targets | 1 + GitVersion.yml | 9 ------ ci-build.ps1 | 6 ++-- ci-pack.ps1 | 7 +---- src/ImageSharp/ImageSharp.csproj | 4 +++ 7 files changed, 19 insertions(+), 57 deletions(-) delete mode 100644 GitVersion.yml diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 19cfb5d7d..8884eece7 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -52,31 +52,15 @@ jobs: git fetch --prune --unshallow git submodule -q update --init --recursive - - name: Fetch Tags for GitVersion - run: | - git fetch --tags - - - name: Fetch master for GitVersion - if: github.ref != 'refs/heads/master' - run: git branch --create-reflog master origin/master - - - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v0.9.3 - with: - versionSpec: "5.3.x" - - - name: Use GitVersion - id: gitversion # step id used as reference for output values - uses: gittools/actions/gitversion/execute@v0.9.3 - - name: Setup DotNet SDK uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.1.101" + dotnet-version: "3.1.x" - name: Build shell: pwsh - run: ./ci-build.ps1 "${{steps.gitversion.outputs.nuGetVersion}}" "${{matrix.options.framework}}" + if: startsWith(github.ref, 'refs/tags/') == false + run: ./ci-build.ps1 "${{matrix.options.framework}}" - name: Test shell: pwsh @@ -112,31 +96,14 @@ jobs: git fetch --prune --unshallow git submodule -q update --init --recursive - - name: Fetch Tags for GitVersion - run: | - git fetch --tags - - - name: Fetch master for GitVersion - if: github.ref != 'refs/heads/master' - run: git branch --create-reflog master origin/master - - - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v0.9.3 - with: - versionSpec: "5.3.x" - - - name: Use GitVersion - id: gitversion # step id used as reference for output values - uses: gittools/actions/gitversion/execute@v0.9.3 - - name: Setup DotNet SDK uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.1.101" + dotnet-version: "3.1.x" - name: Pack shell: pwsh - run: ./ci-pack.ps1 "${{steps.gitversion.outputs.nuGetVersion}}" + run: ./ci-pack.ps1 - name: Publish to MyGet shell: pwsh diff --git a/Directory.Build.props b/Directory.Build.props index 2afb2eaa1..dd6c9aea1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -29,6 +29,12 @@ true + + + v + normal + + + diff --git a/GitVersion.yml b/GitVersion.yml deleted file mode 100644 index 516f9f496..000000000 --- a/GitVersion.yml +++ /dev/null @@ -1,9 +0,0 @@ -# Use mainline mode to match our development approach. -# https://gitversion.readthedocs.io/en/latest/input/docs/reference/versioning-modes/mainline-development/ -mode: Mainline -continuous-delivery-fallback-tag: ci -branches: - master: - tag: unstable - pull-request: - tag: pr diff --git a/ci-build.ps1 b/ci-build.ps1 index 17c6e6603..d45af6ff4 100644 --- a/ci-build.ps1 +++ b/ci-build.ps1 @@ -1,7 +1,5 @@ param( - [Parameter(Mandatory, Position = 0)] - [string]$version, - [Parameter(Mandatory = $true, Position = 1)] + [Parameter(Mandatory = $true, Position = 0)] [string]$targetFramework ) @@ -10,4 +8,4 @@ dotnet clean -c Release $repositoryUrl = "https://github.com/$env:GITHUB_REPOSITORY" # Building for a specific framework. -dotnet build -c Release -f $targetFramework /p:packageversion=$version /p:RepositoryUrl=$repositoryUrl +dotnet build -c Release -f $targetFramework /p:RepositoryUrl=$repositoryUrl diff --git a/ci-pack.ps1 b/ci-pack.ps1 index a4e846db9..09f45347e 100644 --- a/ci-pack.ps1 +++ b/ci-pack.ps1 @@ -1,11 +1,6 @@ -param( - [Parameter(Mandatory, Position = 0)] - [string]$version -) - dotnet clean -c Release $repositoryUrl = "https://github.com/$env:GITHUB_REPOSITORY" # Building for packing and publishing. -dotnet pack -c Release --output "$PSScriptRoot/artifacts" /p:packageversion=$version /p:RepositoryUrl=$repositoryUrl +dotnet pack -c Release --output "$PSScriptRoot/artifacts" /p:RepositoryUrl=$repositoryUrl diff --git a/src/ImageSharp/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj index baf4a2ce1..8e435ef80 100644 --- a/src/ImageSharp/ImageSharp.csproj +++ b/src/ImageSharp/ImageSharp.csproj @@ -19,6 +19,10 @@ SixLabors.ImageSharp + + + + From 423ec37b910c81a67331acae67d151a7bcb89dbf Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 21:28:40 +0100 Subject: [PATCH 114/130] Add source link --- .github/workflows/build-and-test.yml | 4 +++- Directory.Build.props | 20 +++++++++++++------- Directory.Build.targets | 1 + src/ImageSharp/ImageSharp.csproj | 1 + 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 8884eece7..92a80d407 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -107,5 +107,7 @@ jobs: - name: Publish to MyGet shell: pwsh - run: nuget.exe push .\artifacts\*.nupkg ${{secrets.MYGET_TOKEN}} -Source https://www.myget.org/F/sixlabors/api/v2/package + run: | + nuget.exe push .\artifacts\*.nupkg ${{secrets.MYGET_TOKEN}} -Source https://www.myget.org/F/sixlabors/api/v2/package + nuget.exe push .\artifacts\*.snupkg ${{secrets.MYGET_TOKEN}} -Source https://www.myget.org/F/sixlabors/api/v3/index.json # TODO: If github.ref starts with 'refs/tags' then it was tag push and we can optionally push out package to nuget.org diff --git a/Directory.Build.props b/Directory.Build.props index dd6c9aea1..d980a67b7 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -25,16 +25,9 @@ full disable true - false true - - - v - normal - - + true + snupkg + + + + + v + normal + + Copyright © Six Labors diff --git a/Directory.Build.targets b/Directory.Build.targets index 4045d7523..cc14bbdbf 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -23,6 +23,7 @@ + diff --git a/src/ImageSharp/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj index 8e435ef80..64a496141 100644 --- a/src/ImageSharp/ImageSharp.csproj +++ b/src/ImageSharp/ImageSharp.csproj @@ -20,6 +20,7 @@ + From bdc79e1688559632c3401ca7f8b262d5cf8a901e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 21:38:25 +0100 Subject: [PATCH 115/130] Add deterministic builds in CI --- Directory.Build.props | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Directory.Build.props b/Directory.Build.props index d980a67b7..52dcd69c8 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -92,6 +92,12 @@ + + + true + true + + true From f8f9fd6452b9f5420ee504886c8e3ac25de57e32 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 21:55:27 +0100 Subject: [PATCH 116/130] Move props to correct file. --- Directory.Build.props | 13 ------------- src/Directory.Build.props | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 52dcd69c8..14c9da79d 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -92,19 +92,6 @@ - - - true - true - - - - true - - true - snupkg - - v diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 87482af6f..bdf1ff49c 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -26,6 +26,19 @@ true + + + true + true + + + + true + + true + snupkg + + From 3532e3c663433b32097d1e91870f7bec1e7d3c81 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 22:13:22 +0100 Subject: [PATCH 117/130] Codecov tests didn't run. See if this is causing it. --- Directory.Build.targets | 1 - src/Directory.Build.targets | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index cc14bbdbf..4045d7523 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -23,7 +23,6 @@ - diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index d7171aa0f..cb7d69b4b 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -20,6 +20,11 @@ $(IntermediateOutputPath)$(MSBuildProjectName).InternalsVisibleTo$(DefaultLanguageSourceExtension) + + + + + false From 164f6f0529fbec646087ccdcbec47061626e92a2 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 22:19:38 +0100 Subject: [PATCH 118/130] Revert "Codecov tests didn't run. See if this is causing it." This reverts commit 3532e3c663433b32097d1e91870f7bec1e7d3c81. --- Directory.Build.targets | 1 + src/Directory.Build.targets | 5 ----- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 4045d7523..cc14bbdbf 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -23,6 +23,7 @@ + diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index cb7d69b4b..d7171aa0f 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -20,11 +20,6 @@ $(IntermediateOutputPath)$(MSBuildProjectName).InternalsVisibleTo$(DefaultLanguageSourceExtension) - - - - - false From faf8e267cfe3c20d7a38afedb17164cf996bfa3f Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 22:28:55 +0100 Subject: [PATCH 119/130] Update coverlet collector --- tests/Directory.Build.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Directory.Build.targets b/tests/Directory.Build.targets index 6428ef32f..b2d2b1c31 100644 --- a/tests/Directory.Build.targets +++ b/tests/Directory.Build.targets @@ -28,7 +28,7 @@ - + From 95a85ced04a33934cde6b7f0cf0bab24e998164b Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 22:41:23 +0100 Subject: [PATCH 120/130] Revert SDK bump --- .github/workflows/build-and-test.yml | 4 ++-- src/Directory.Build.targets | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 92a80d407..1ba89fd68 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -55,7 +55,7 @@ jobs: - name: Setup DotNet SDK uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.1.x" + dotnet-version: "3.1.101" - name: Build shell: pwsh @@ -99,7 +99,7 @@ jobs: - name: Setup DotNet SDK uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.1.x" + dotnet-version: "3.1.101" - name: Pack shell: pwsh diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index d7171aa0f..ab87edd9e 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -20,6 +20,17 @@ $(IntermediateOutputPath)$(MSBuildProjectName).InternalsVisibleTo$(DefaultLanguageSourceExtension) + + + + + $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) + + + + + + false @@ -51,7 +62,7 @@ - + From 126d133132ac1ffba4c7585c1ec579e263f2c701 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 22:46:00 +0100 Subject: [PATCH 121/130] Update Directory.Build.targets --- src/Directory.Build.targets | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index ab87edd9e..ac2f772e3 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -22,14 +22,12 @@ - - - $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) - - - - - + + $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) + + + + From 28cc97dcb8f6bbdc2f582d4dbeab0e45c851211b Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Jul 2020 23:00:42 +0100 Subject: [PATCH 122/130] Remove condition --- .github/workflows/build-and-test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 1ba89fd68..2a81965d3 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -59,7 +59,6 @@ jobs: - name: Build shell: pwsh - if: startsWith(github.ref, 'refs/tags/') == false run: ./ci-build.ps1 "${{matrix.options.framework}}" - name: Test From d884a10c6ba8533d3fe85a9422daa6168b8994dc Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 3 Jul 2020 10:36:32 +0100 Subject: [PATCH 123/130] Add coverlet workaround from docs --- .github/workflows/build-and-test.yml | 4 ++-- src/Directory.Build.targets | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 2a81965d3..1e4aaaa85 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -55,7 +55,7 @@ jobs: - name: Setup DotNet SDK uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.1.101" + dotnet-version: "3.1.x" - name: Build shell: pwsh @@ -98,7 +98,7 @@ jobs: - name: Setup DotNet SDK uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.1.101" + dotnet-version: "3.1.x" - name: Pack shell: pwsh diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index ac2f772e3..0baceca35 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -22,13 +22,24 @@ - + + + + + + <_LocalTopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> + + + false From 9657ac0760a67764ce98149ccd759651dd2cf70a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 3 Jul 2020 10:53:51 +0100 Subject: [PATCH 124/130] Final cleanup --- src/Directory.Build.targets | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index 0baceca35..1eeedecd2 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -20,15 +20,6 @@ $(IntermediateOutputPath)$(MSBuildProjectName).InternalsVisibleTo$(DefaultLanguageSourceExtension) - - - - Date: Sat, 4 Jul 2020 18:38:52 +0200 Subject: [PATCH 125/130] Adds LoadAsync methods that accepting string path. --- src/ImageSharp/Image.FromFile.cs | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/ImageSharp/Image.FromFile.cs b/src/ImageSharp/Image.FromFile.cs index 3237ea743..a078f2db9 100644 --- a/src/ImageSharp/Image.FromFile.cs +++ b/src/ImageSharp/Image.FromFile.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.PixelFormats; @@ -89,6 +90,17 @@ namespace SixLabors.ImageSharp public static Image Load(string path) => Load(Configuration.Default, path); + /// + /// Create a new instance of the class from the given file. + /// + /// The file path to the image. + /// + /// Thrown if the stream is not readable nor seekable. + /// + /// A representing the asynchronous operation. + public static Task LoadAsync(string path) + => LoadAsync(Configuration.Default, path); + /// /// Create a new instance of the class from the given file. /// @@ -114,6 +126,25 @@ namespace SixLabors.ImageSharp public static Image Load(Configuration configuration, string path) => Load(configuration, path, out _); + /// + /// Create a new instance of the class from the given file. + /// + /// The configuration for the decoder. + /// The file path to the image. + /// The configuration is null. + /// The path is null. + /// Image format not recognised. + /// Image contains invalid content. + /// A representing the asynchronous operation. + public static async Task LoadAsync(Configuration configuration, string path) + { + using (Stream stream = configuration.FileSystem.OpenRead(path)) + { + (Image img, _) = await LoadWithFormatAsync(configuration, stream).ConfigureAwait(false); + return img; + } + } + /// /// Create a new instance of the class from the given file. /// @@ -137,6 +168,29 @@ namespace SixLabors.ImageSharp } } + /// + /// Create a new instance of the class from the given file. + /// + /// The Configuration. + /// The file path to the image. + /// The decoder. + /// The configuration is null. + /// The path is null. + /// The decoder is null. + /// Image format not recognised. + /// Image contains invalid content. + /// A representing the asynchronous operation. + public static Task LoadAsync(Configuration configuration, string path, IImageDecoder decoder) + { + Guard.NotNull(configuration, nameof(configuration)); + Guard.NotNull(path, nameof(path)); + + using (Stream stream = configuration.FileSystem.OpenRead(path)) + { + return LoadAsync(configuration, stream, decoder); + } + } + /// /// Create a new instance of the class from the given file. /// From 80d265af2d548885ab7b362a12f9a8c421a1790a Mon Sep 17 00:00:00 2001 From: pekspro Date: Sat, 4 Jul 2020 18:39:19 +0200 Subject: [PATCH 126/130] Adds unit test for LoadAsync(string path). --- ...sts.Load_FileSystemPath_UseDefaultConfiguration.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs index 5f7137e15..cd0879931 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. using System; - +using System.Threading.Tasks; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Bmp; using SixLabors.ImageSharp.PixelFormats; @@ -40,6 +40,15 @@ namespace SixLabors.ImageSharp.Tests } } + [Fact] + public async Task Path_Agnostic_Async() + { + using (var img = await Image.LoadAsync(this.Path)) + { + VerifyDecodedImage(img); + } + } + [Fact] public void Path_Decoder_Specific() { From dd7c3eccca8b488a73bf89c814953d9eb60e05af Mon Sep 17 00:00:00 2001 From: pekspro Date: Sat, 4 Jul 2020 19:23:27 +0200 Subject: [PATCH 127/130] Adds unit test for LoadAsync(Configuration configuration, string path, IImageDecoder decoder). --- ...eTests.Load_FileSystemPath_UseDefaultConfiguration.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs index cd0879931..534cbedab 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs @@ -67,6 +67,15 @@ namespace SixLabors.ImageSharp.Tests } } + [Fact] + public async Task Path_Decoder_Agnostic_Async() + { + using (var img = await Image.LoadAsync(Configuration.Default, this.Path, new BmpDecoder())) + { + VerifyDecodedImage(img); + } + } + [Fact] public void Path_OutFormat_Specific() { From c88608d8c7b995686cd09fc2e4cd2b11008ae540 Mon Sep 17 00:00:00 2001 From: pekspro Date: Sun, 5 Jul 2020 07:23:18 +0200 Subject: [PATCH 128/130] Adds DiscoverDecoderAsync. --- src/ImageSharp/Image.Decode.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index 6b6dc6e21..1dededae4 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -101,6 +101,22 @@ namespace SixLabors.ImageSharp : null; } + /// + /// By reading the header on the provided stream this calculates the images format. + /// + /// The image stream to read the header from. + /// The configuration. + /// The IImageFormat. + /// The image format or null if none found. + private static async Task DiscoverDecoderAsync(Stream stream, Configuration config, out IImageFormat format) + { + format = await InternalDetectFormatAsync(stream, config).ConfigureAwait(false); + + return format != null + ? config.ImageFormatsManager.FindDecoder(format) + : null; + } + /// /// Decodes the image stream to the current image. /// From b466c5b7de13d764270f45e9acd08c61a4682abb Mon Sep 17 00:00:00 2001 From: pekspro Date: Mon, 6 Jul 2020 19:15:32 +0200 Subject: [PATCH 129/130] Adds DiscoverDecoderAsync and starts using it. --- src/ImageSharp/Image.Decode.cs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs index 1dededae4..5330782f2 100644 --- a/src/ImageSharp/Image.Decode.cs +++ b/src/ImageSharp/Image.Decode.cs @@ -106,15 +106,16 @@ namespace SixLabors.ImageSharp /// /// The image stream to read the header from. /// The configuration. - /// The IImageFormat. - /// The image format or null if none found. - private static async Task DiscoverDecoderAsync(Stream stream, Configuration config, out IImageFormat format) + /// The decoder and the image format or null if none found. + private static async Task<(IImageDecoder decoder, IImageFormat format)> DiscoverDecoderAsync(Stream stream, Configuration config) { - format = await InternalDetectFormatAsync(stream, config).ConfigureAwait(false); + IImageFormat format = await InternalDetectFormatAsync(stream, config).ConfigureAwait(false); - return format != null + IImageDecoder decoder = format != null ? config.ImageFormatsManager.FindDecoder(format) : null; + + return (decoder, format); } /// @@ -149,7 +150,7 @@ namespace SixLabors.ImageSharp private static async Task<(Image Image, IImageFormat Format)> DecodeAsync(Stream stream, Configuration config) where TPixel : unmanaged, IPixel { - IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); + (IImageDecoder decoder, IImageFormat format) = await DiscoverDecoderAsync(stream, config).ConfigureAwait(false); if (decoder is null) { return (null, null); @@ -173,7 +174,7 @@ namespace SixLabors.ImageSharp private static async Task<(Image Image, IImageFormat Format)> DecodeAsync(Stream stream, Configuration config) { - IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); + (IImageDecoder decoder, IImageFormat format) = await DiscoverDecoderAsync(stream, config).ConfigureAwait(false); if (decoder is null) { return (null, null); @@ -193,7 +194,9 @@ namespace SixLabors.ImageSharp /// private static (IImageInfo ImageInfo, IImageFormat Format) InternalIdentity(Stream stream, Configuration config) { - if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector)) + IImageDecoder decoder = DiscoverDecoder(stream, config, out IImageFormat format); + + if (!(decoder is IImageInfoDetector detector)) { return (null, null); } @@ -213,7 +216,9 @@ namespace SixLabors.ImageSharp /// is not found. private static async Task<(IImageInfo ImageInfo, IImageFormat Format)> InternalIdentityAsync(Stream stream, Configuration config) { - if (!(DiscoverDecoder(stream, config, out IImageFormat format) is IImageInfoDetector detector)) + (IImageDecoder decoder, IImageFormat format) = await DiscoverDecoderAsync(stream, config).ConfigureAwait(false); + + if (!(decoder is IImageInfoDetector detector)) { return (null, null); } From 39d7e57c22148d20348a469ccc066386a4f2c395 Mon Sep 17 00:00:00 2001 From: pekspro Date: Mon, 6 Jul 2020 19:28:18 +0200 Subject: [PATCH 130/130] Adds unit test for LoadAsync(Configuration configuration, string path). --- ...eTests.Load_FileSystemPath_UseDefaultConfiguration.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs index 534cbedab..77e5679f6 100644 --- a/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs +++ b/tests/ImageSharp.Tests/Image/ImageTests.Load_FileSystemPath_UseDefaultConfiguration.cs @@ -49,6 +49,15 @@ namespace SixLabors.ImageSharp.Tests } } + [Fact] + public async Task Path_Agnostic_Configuration_Async() + { + using (var img = await Image.LoadAsync(Configuration.Default, this.Path)) + { + VerifyDecodedImage(img); + } + } + [Fact] public void Path_Decoder_Specific() {