namespace DeathSocket /// The domain types used by Death Socket. [] module Domain = open System.Drawing open SkiaSharp open System.Threading /// This specification is used to note the orignial file's location and /// the changes the user would like to make to it. (including the save /// location of the modified version). Use this spec. if you are using /// System.Drawing. type BrushSpec = { /// The original path of the image which the grid is being added to. originalPath: string /// The location of the new gridded image. savePath: string /// The (System.Drawing) brush used to draw the grid. /// This determines the colour of the grid. colour: Brush /// The thickness of the line on the grid. penWidth: float32 /// The number of rows the grid will have. rows: int ///The number of columns the grid will have. columns: int } /// This specification is used to note the orignial file's location and /// the changes the user would like to make to it (including the save /// location of the modified version). This specification includes /// individual RGBA values to describe the grid's colour. Use this /// spec. if you are using System.Drawing. type RGBASpec = { /// The original path of the image which the grid is being added to. originalPath: string /// The location of the new gridded image. savePath: string /// The opacity level of the grid. /// 0 makes it completely see through and 1 makes it solid. alpha: float /// The amount of red the grid's line will have. red: float /// The amount of green the grid's line will have. green: float /// The amount of blue the grid's line will have. blue: float /// The thickness of the line on the grid. penWidth: float32 /// The number of rows the grid will have. rows: int ///The number of columns the grid will have. columns: int } /// This specification is used to note the orignial file's location and /// the changes the user would like to make to it (including the save /// location of the modified version). Use this spec. if you are using /// the SkiaSharp library. type SkiaSpec = { /// The original path of the image which the grid is being added to. originalPath: string /// The location of the new gridded image. savePath: string /// The (SkiaSharp) colour used to draw the grid. skColour: SKColor /// The thickness of the line on the grid. penWidth: float32 /// The number of rows the grid will have. rows: int ///The number of columns the grid will have. columns: int } /// This specification is used to create a gridded image as an SKData /// buffer. This spec. allows you to use one of the pre-formed /// SKColors. This makes it quicker and easier to develop your code /// when compared to SkiaRGBStream. That requires setting individual /// RGB values. You this spec. if you are using the SkiaSharp library. type SkiaBufferSpec = { /// The location of the image the grid will be applied to filePath: string /// The (SkiaSharp) colour used to draw the grid. skColour: SKColor /// The thickness of the line on the grid. penWidth: float32 /// The number of rows the grid will have. rows: int ///The number of columns the grid will have. columns: int } /// This specification is used to create a gridded image as a SKData /// buffer. This spec. allows you to specify the colour of the grid /// using individual RGB values. This gives you greater control of your /// colour choice than a SkiaStreamSpec, which requires a pre-formed /// SKColor value. you this spec. if you are using the SkiaSharp /// library. type SkiaRGBBufferSpec = { /// The location of the image the grid will be applied to filePath: string /// The amount of red (RGB) the grid's line will have. /// (0 = no red, 255 = red turned up to eleven). red: float32 /// The amount of green (RGB) the grid's line will have. /// (0 = no green, 255 = green turned up to eleven). green: float32 /// The amount of blue (RGB) the grid's line will have. /// (0 = no blue, 255 = blue turned up to eleven). blue: float32 /// The thickness of the line on the grid. penWidth: float32 /// The number of rows the grid will have. rows: int ///The number of columns the grid will have. columns: int } /// This specification is used to note the orignial file's location and /// the changes the user would like to make to it (including the save /// location of the modified version). This specification includes /// individual RGB values to describe the grid's colour. Use this spec. /// if you are using the SkiaSharp library. type SkiaRGBSpec = { /// The original path of the image which the grid is being added to. originalPath: string /// The location of the new gridded image. savePath: string /// The amount of red (RGB) the grid's line will have. /// (0 = no red, 255 = red turned up to eleven). red: float32 /// The amount of green (RGB) the grid's line will have. /// (0 = no green, 255 = green turned up to eleven). green: float32 /// The amount of blue (RGB) the grid's line will have. /// (0 = no blue, 255 = blue turned up to eleven). blue: float32 /// The thickness of the line on the grid. penWidth: float32 /// The number of rows the grid will have. rows: int ///The number of columns the grid will have. columns: int } /// A Discriminated Union representing the various specification types /// Death Socket can use to apply a grid to an image. type ImageSpec = /// Spec. which uses System.Drawing and its built-in (colour) Brush. | Brush of BrushSpec /// Spec. which uses System.Drawing and individual RGBA values. | RGBA of RGBASpec /// Spec. which uses SkiaSharp and its built-in SKColors. | Skia of SkiaSpec /// Spec. which uses SkiaSharp and individual RGB values. | SkiaRGB of SkiaRGBSpec /// Spec. which uses SkiaSharp and its built-in SKColors. | SkiaBuffer of SkiaBufferSpec /// Spec. which uses SkiaSharp and individual RGB values. | SkiaRGBBuffer of SkiaRGBBufferSpec /// A Discriminated Union denoting a type of image. The type refers /// to the graphics library used to read the image file. /// The graphics library determines how the image is read and /// manipulated in memory and the functions you can perform on it. /// When creating an ImageType, pass in the file path of the image /// as a string. If you are on Windows or using Mono, SystemDrawing is /// the recommended choice. If you using Xamarin, SkiaSharp is the /// recommended choice. type ImageType = /// Denotes an image created using SkiaSharp | SkiaSharp of string /// Denotes an image created using System.Drawing | SystemDrawing of string type internal longestDimension = | Width | Height