diff --git a/DeathSocket/DeathSocket.fsproj b/DeathSocket/DeathSocket.fsproj index fe88a24..1e8d801 100644 --- a/DeathSocket/DeathSocket.fsproj +++ b/DeathSocket/DeathSocket.fsproj @@ -32,7 +32,7 @@ - + True @@ -46,7 +46,7 @@ - + diff --git a/DeathSocket/GridPainter.fs b/DeathSocket/GridPainter.fs index a155da0..7509ba4 100644 --- a/DeathSocket/GridPainter.fs +++ b/DeathSocket/GridPainter.fs @@ -34,13 +34,13 @@ namespace DeathSocket /// is not in use or needed by another program/process. /// This is because it is locked whilst in this function. /// - let applyGridToImageAsync (spec: ImageSpec) = + let applyGridToImageAsync (greyScale: bool) (spec: ImageSpec) = async { try match spec with | Brush b -> validateIO b.originalPath b.savePath |> ignore - drawBrushSpecGrid b + drawBrushSpecGrid b greyScale | RGBA r -> validateIO r.originalPath r.savePath |> ignore drawRGBAGrid r diff --git a/DeathSocket/ImageServices.fs b/DeathSocket/ImageServices.fs index 9949829..d55341c 100644 --- a/DeathSocket/ImageServices.fs +++ b/DeathSocket/ImageServices.fs @@ -191,21 +191,68 @@ assume any function with a "*Spec" type as a parameter will use this "temp" file. *) - let drawBrushSpecGrid (spec: BrushSpec) = + let drawBrushSpecGrid (spec: BrushSpec) (greyScale: bool) = use original = Bitmap.FromFile spec.originalPath use temp = new Bitmap(original) - use clone = - temp.Clone(new Rectangle(0, 0, temp.Width, temp.Height), PixelFormat.Format32bppArgb) - use graphics = Graphics.FromImage(clone) - use pen = new Pen (spec.colour, width = spec.penWidth) - graphics.DrawImage(original,new Rectangle(0, 0, clone.Width, clone.Height)) - let horizontalLines = - createHorizontalLines (clone.Size.Width) (clone.Size.Height) (spec.rows) - let verticalLines = - createVerticalLines (clone.Size.Width) (clone.Size.Height) (spec.columns) - for line in horizontalLines do graphics.DrawLines (pen, line) - for line in verticalLines do graphics.DrawLines (pen, line) - clone.Save (spec.savePath) + //use clone = + // temp.Clone(new Rectangle(0, 0, temp.Width, temp.Height), PixelFormat.Format32bppArgb) + + // The orignial is above... + + if greyScale = true then + + use temp1 = new Bitmap(original.Width, original.Height) + use g = Graphics.FromImage(temp1) + let aM: float32[][] = [| + [| (float32 0.3); (float32 0.3); (float32 0.3); (float32 0.0); (float32 0.0) |]; + [| (float32 0.59); (float32 0.59); (float32 0.59); (float32 0.0); (float32 0.0) |]; + [| (float32 0.11); (float32 0.11); (float32 0.11); (float32 0.0); (float32 0.0) |]; + [| (float32 0.0); (float32 0.0); (float32 0.0); (float32 1.0); (float32 0.0) |]; + [| (float32 0.0); (float32 0.0); (float32 0.0); (float32 0.0); (float32 1.0) |]; + |] + + let colourMatrix = new ColorMatrix(aM) + use attributes = new ImageAttributes() + attributes.SetColorMatrix(colourMatrix) + g.DrawImage(temp, new Rectangle(0, 0, temp.Width, temp.Height), + 0, 0, temp.Width, temp.Height, GraphicsUnit.Pixel, attributes) + + // use clone = temp1 + use graphics = Graphics.FromImage(temp1) + use pen = new Pen (spec.colour, width = spec.penWidth) + graphics.DrawImage(temp1 ,new Rectangle(0, 0, temp1.Width, temp1.Height)) + let horizontalLines = + createHorizontalLines (temp1.Size.Width) (temp1.Size.Height) (spec.rows) + let verticalLines = + createVerticalLines (temp1.Size.Width) (temp1.Size.Height) (spec.columns) + for line in horizontalLines do graphics.DrawLines (pen, line) + for line in verticalLines do graphics.DrawLines (pen, line) + temp1.Save (spec.savePath) + else + use clone = temp.Clone(new Rectangle(0, 0, temp.Width, temp.Height), PixelFormat.Format32bppArgb) + use graphics = Graphics.FromImage(clone) + use pen = new Pen (spec.colour, width = spec.penWidth) + graphics.DrawImage(original,new Rectangle(0, 0, clone.Width, clone.Height)) + let horizontalLines = + createHorizontalLines (clone.Size.Width) (clone.Size.Height) (spec.rows) + let verticalLines = + createVerticalLines (clone.Size.Width) (clone.Size.Height) (spec.columns) + for line in horizontalLines do graphics.DrawLines (pen, line) + for line in verticalLines do graphics.DrawLines (pen, line) + clone.Save (spec.savePath) + + // The original is below... + + //use graphics = Graphics.FromImage(clone) + //use pen = new Pen (spec.colour, width = spec.penWidth) + //graphics.DrawImage(original,new Rectangle(0, 0, clone.Width, clone.Height)) + //let horizontalLines = + // createHorizontalLines (clone.Size.Width) (clone.Size.Height) (spec.rows) + //let verticalLines = + // createVerticalLines (clone.Size.Width) (clone.Size.Height) (spec.columns) + //for line in horizontalLines do graphics.DrawLines (pen, line) + //for line in verticalLines do graphics.DrawLines (pen, line) + //clone.Save (spec.savePath) let drawRGBAGrid (spec: RGBASpec) = use original = Bitmap.FromFile spec.originalPath diff --git a/DeathSocketCLI/Commands.fs b/DeathSocketCLI/Commands.fs index e924dbb..17ebe66 100644 --- a/DeathSocketCLI/Commands.fs +++ b/DeathSocketCLI/Commands.fs @@ -32,15 +32,15 @@ let exit () = Environment.Exit (Environment.ExitCode) [] - [] + [] [] - [] - let ``add-default`` imgPath newPath = + [] + let ``add-default`` imgPath newPath greyScale= try printfn "[INFO.] Adding default grid to image..." Brush (buildDefaultSpec imgPath newPath) - |> applyGridToImageAsync + |> applyGridToImageAsync greyScale |> Async.Start showEndOfCommandMessage with @@ -55,11 +55,11 @@ [] [] - let ``add-grid`` imgPath numRows numColumns pWidth colour newPath = + let ``add-grid`` imgPath numRows numColumns pWidth colour newPath greyScale= try printfn "[INFO.] Adding grid to image..." Brush (buildSpec imgPath numRows numColumns pWidth colour newPath) - |> applyGridToImageAsync + |> applyGridToImageAsync greyScale |> Async.Start showEndOfCommandMessage with @@ -109,16 +109,16 @@ printfn "%s" item.Key showEndOfCommandMessage - let``add-skia-grid`` imgPath numRows numColumns pWidth colour newPath = + let``add-skia-grid`` imgPath numRows numColumns pWidth colour newPath greyScale= printfn "[INFO.] Adding SkiaSharp grid to image..." Skia (buildSkiaSpec imgPath numRows numColumns pWidth colour newPath) - |> applyGridToImageAsync + |> applyGridToImageAsync greyScale |> Async.Start showEndOfCommandMessage - let``add-skia-rgb-grid`` imgPath numRows numColumns pWidth r g b newPath = + let``add-skia-rgb-grid`` imgPath numRows numColumns pWidth r g b newPath greyScale = printfn "[INFO.] Adding SkiaSharp grid to image..." SkiaRGB (buildSkiaRGBSpec imgPath numRows numColumns pWidth r g b newPath) - |> applyGridToImageAsync + |> applyGridToImageAsync greyScale |> Async.Start showEndOfCommandMessage \ No newline at end of file diff --git a/TestCentre/LibraryTests.fs b/TestCentre/LibraryTests.fs index 17abe0c..019743b 100644 --- a/TestCentre/LibraryTests.fs +++ b/TestCentre/LibraryTests.fs @@ -134,7 +134,7 @@ penWidth = float32 (newPenWidth()) rows = 10 columns = 10 }) - |> applyGridToImageAsync + |> applyGridToImageAsync true // true is temp. |> Async.RunSynchronously (File.Exists sPath) = true @@ -152,7 +152,7 @@ penWidth = float32 (newPenWidth()) rows = 10 columns = 10 }) - |> applyGridToImageAsync + |> applyGridToImageAsync true // true is temp. |> Async.RunSynchronously (File.Exists sPath) = true @@ -199,7 +199,7 @@ penWidth = float32 (newPenWidth()) rows = newNum () columns = newNum () }) - |> applyGridToImageAsync + |> applyGridToImageAsync true // true is temp. |> Async.RunSynchronously (File.Exists sPath) = true @@ -217,7 +217,7 @@ penWidth = float32 (newPenWidth()) rows = newNum () columns = newNum () }) - |> applyGridToImageAsync + |> applyGridToImageAsync true // true is temp. |> Async.RunSynchronously (File.Exists sPath) = true