Craig Oates
5 years ago
4 changed files with 99 additions and 0 deletions
@ -0,0 +1,66 @@
|
||||
module internal ImagePrep |
||||
|
||||
open System.IO |
||||
open DeathSocket |
||||
open SkiaSharp |
||||
open System.Drawing |
||||
|
||||
let determineLongestDimension pDims aDims = |
||||
let width = (fst pDims) - (fst aDims) |
||||
let height = (snd pDims) - (snd aDims) |
||||
match width > height with |
||||
| true -> Width |
||||
| false -> Height |
||||
|
||||
let determineImageScale pDimension aDimension = |
||||
(double aDimension) / (double pDimension) |
||||
|
||||
let determineLineScale (lineWidth: double) (scale: double) = |
||||
lineWidth / scale |
||||
|
||||
let adjustLineThickness pDimensions aDimensions lineWidth = |
||||
match (determineLongestDimension pDimensions aDimensions) with |
||||
| Width -> |
||||
let thickness = |
||||
determineImageScale (fst pDimensions) (fst aDimensions) |
||||
|> determineLineScale lineWidth |
||||
thickness |
||||
| Height -> |
||||
let thickness = |
||||
determineImageScale (snd pDimensions) (snd aDimensions) |
||||
|> determineLineScale lineWidth |
||||
thickness |
||||
|
||||
let createSKHorizontalLines width height rows = |
||||
let interval = float32 (height / rows) |
||||
[|for point in 1 .. (rows - 1) -> |
||||
[| SKPoint ((float32 0), (interval * (float32 point))) |
||||
SKPoint ((float32 width), (interval * (float32 point)))|]|] |
||||
|
||||
let createSKVerticalLines width height columns = |
||||
let interval = float32 (width / columns) |
||||
[| for point in 1 .. (columns - 1) -> |
||||
[| SKPoint ((interval * (float32 point)), (float32 0)) |
||||
SKPoint ((interval * (float32 point)), (float32 height))|]|] |
||||
|
||||
let determineSkiaDimensions filePath = |
||||
use fileStream = File.Open (filePath, FileMode.Open) |
||||
use skStream = new SKManagedStream (fileStream) |
||||
use bitmap = SKBitmap.Decode (skStream) |
||||
(bitmap.Width, bitmap.Height) |
||||
|
||||
let createHorizontalLines width height rows = |
||||
let interval = height / rows |
||||
[| for point in 1 .. (rows - 1) -> |
||||
[|Point (0, (interval * point)) |
||||
Point (width, (interval * point) )|]|] |
||||
|
||||
let createVerticalLines width height columns = |
||||
let interval = width / columns |
||||
[| for point in 1 .. (columns - 1) -> |
||||
[| Point ((interval * point), 0) |
||||
Point ((interval * point), height)|]|] |
||||
|
||||
let determineSystemDrawingDimensions filePath = |
||||
use bitmap = Bitmap.FromFile filePath |
||||
(bitmap.Width, bitmap.Height) |
@ -0,0 +1,31 @@
|
||||
module internal ValidationServices |
||||
|
||||
open System.IO |
||||
|
||||
let validateFilePath path = |
||||
match File.Exists path with |
||||
| true -> () |
||||
| false -> raise (new FileNotFoundException ("No file found at " + path)) |
||||
|
||||
let validateSaveFileType file = |
||||
match Path.GetExtension file with |
||||
| ".jpg" -> () |
||||
| ".JPG" -> () |
||||
| ".png" -> () |
||||
| ".PNG" -> () |
||||
| _ -> invalidArg "savePath" "The file type must be a .jpg or .png file." |
||||
|
||||
let validateIO iPath oPath = |
||||
validateFilePath iPath |
||||
validateSaveFileType oPath |
||||
|
||||
let validateDimensions dimensions = |
||||
match dimensions with |
||||
| (0, _) -> invalidArg "Width" "Width must be greater than 0." |
||||
| (_, 0) -> invalidArg "Height" "Height must be greater than 0." |
||||
| (_, _) -> () |
||||
|
||||
let validateLineThickness thickness = |
||||
match thickness with |
||||
| thickness when thickness <= 0.0 -> invalidArg "LineThickness" "LineThickness must be greater than 0." |
||||
| _ -> () |
Loading…
Reference in new issue