// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Bmp;
using SixLabors.ImageSharp.Formats.Gif;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Formats.Pbm;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.Formats.Qoi;
using SixLabors.ImageSharp.Formats.Tga;
using SixLabors.ImageSharp.Formats.Tiff;
using SixLabors.ImageSharp.Formats.Webp;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs;
internal static class ReferenceCodecUtilities
{
///
/// Ensures that the metadata is properly initialized for reference and test encoders which cannot initialize
/// metadata in the same manner as our built in decoders.
///
/// The type of pixel format.
/// The decoded image.
/// The image format
/// The format is unknown.
public static Image EnsureDecodedMetadata(Image image, IImageFormat format)
where TPixel : unmanaged, IPixel
{
if (image.Metadata.DecodedImageFormat is null)
{
image.Metadata.DecodedImageFormat = format;
}
foreach (ImageFrame frame in image.Frames)
{
frame.Metadata.DecodedImageFormat = format;
}
switch (format)
{
case BmpFormat:
image.Metadata.GetBmpMetadata();
break;
case GifFormat:
image.Metadata.GetGifMetadata();
foreach (ImageFrame frame in image.Frames)
{
frame.Metadata.GetGifMetadata();
}
break;
case JpegFormat:
image.Metadata.GetJpegMetadata();
break;
case PbmFormat:
image.Metadata.GetPbmMetadata();
break;
case PngFormat:
image.Metadata.GetPngMetadata();
foreach (ImageFrame frame in image.Frames)
{
frame.Metadata.GetPngMetadata();
}
break;
case QoiFormat:
image.Metadata.GetQoiMetadata();
break;
case TgaFormat:
image.Metadata.GetTgaMetadata();
break;
case TiffFormat:
image.Metadata.GetTiffMetadata();
foreach (ImageFrame frame in image.Frames)
{
frame.Metadata.GetTiffMetadata();
}
break;
case WebpFormat:
image.Metadata.GetWebpMetadata();
foreach (ImageFrame frame in image.Frames)
{
frame.Metadata.GetWebpMetadata();
}
break;
}
return image;
}
}