< Summary

Class:Imagini.ImageSharp.TextureFactory
Assembly:Imagini.ImageSharp
File(s):/home/razer/vscode-projects/project-grove/imagini/Imagini.ImageSharp/TextureFactory.cs
Covered lines:14
Uncovered lines:3
Coverable lines:17
Total lines:65
Line coverage:82.3% (14 of 17)
Covered branches:2
Total branches:2
Branch coverage:100% (2 of 2)

Metrics

MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
FromFile(...)100%100%
FromStream(...)10100%100%
FromImage(...)2085.71%100%

File(s)

/home/razer/vscode-projects/project-grove/imagini/Imagini.ImageSharp/TextureFactory.cs

#LineLine coverage
 1using System.Buffers;
 2using System.IO;
 3using System.Linq;
 4using Imagini.Drawing;
 5using SixLabors.ImageSharp;
 6using SixLabors.ImageSharp.Advanced;
 7using SixLabors.ImageSharp.Formats;
 8using SixLabors.ImageSharp.PixelFormats;
 9
 10/// <summary>
 11/// ImageSharp integration module.
 12/// </summary>
 13namespace Imagini.ImageSharp
 14{
 15    /// <summary>
 16    /// Contains various functions to aid in surface creation.
 17    /// </summary>
 18    public static class TextureFactory
 19    {
 20        /// <summary>
 21        /// Gets or sets the ArrayPool used by image loader.
 22        /// </summary>
 2723        public static ArrayPool<byte> ArrayPool { get; set; } = ArrayPool<byte>.Shared;
 24
 25        /// <summary>
 26        /// Creates a RGBA8888 surface by loading a file from the specified path.
 27        /// </summary>
 28        public static Texture FromFile(Graphics graphics, TextureScalingQuality quality,
 29            string path) =>
 030            FromImage(graphics, quality, Image.Load(path));
 31
 32        /// <summary>
 33        /// Creates a RGBA8888 surface by loading a file from the specified stream.
 34        /// </summary>
 35        public static Texture FromStream(Graphics graphics, Stream stream,
 36            TextureScalingQuality quality,
 37            IImageDecoder decoder) =>
 138            FromImage(graphics, quality, Image.Load(stream, decoder));
 39
 40        /// <summary>
 41        /// Creates a RGBA8888 surface from the specified Image object.
 42        /// </summary>
 43        public static Texture FromImage<TPixel>(Graphics graphics,
 44            TextureScalingQuality quality, Image<TPixel> image)
 45            where TPixel : struct, IPixel<TPixel>
 46        {
 1347            var cloned = image.CloneAs<Rgba32>();
 1348            var pixels = cloned.GetPixelSpan();
 1349            var bytes = ArrayPool.Rent(pixels.Length * 4);
 18205850            for (int i = 0; i < pixels.Length; i++)
 51            {
 9101652                var pixel = pixels[i];
 9101653                bytes[i * 4] = pixel.A;
 9101654                bytes[i * 4 + 1] = pixel.B;
 9101655                bytes[i * 4 + 2] = pixel.G;
 9101656                bytes[i * 4 + 3] = pixel.R;
 57            }
 058            var texture = graphics.CreateTexture(cloned.Width, cloned.Height,
 059                quality, PixelFormat.Format_RGBA8888);
 1360            texture.SetPixels(ref bytes);
 1361            ArrayPool.Return(bytes);
 1362            return texture;
 63        }
 64    }
 65}