Browse Source

remove MakeImage2 code.

Reduce the amount of possible duplicate code in logic branches. And, update Scratchpad to reflect the changes. Draw border logic will, also, be added but it will be incomplete and produce incorrect results.
master
Craig Oates 6 years ago
parent
commit
970b13899c
  1. 84
      SmoulderingBeachBall/ImageMaker.fs
  2. 6
      SmoulderingBeachBall/ScratchPad.fsx

84
SmoulderingBeachBall/ImageMaker.fs

@ -33,7 +33,7 @@ module ImageMaker =
| true -> () | true -> ()
// This function is to be deleted. // This function is to be deleted.
let makeImage width height colour filepath = let makeImageBase width height colour filepath =
async { async {
try try
validateDimension width validateDimension width
@ -49,61 +49,53 @@ module ImageMaker =
| _ as ex -> return ex.Message | _ as ex -> return ex.Message
} }
let private drawMainImage spec = let private createBorderPath spec =
use bitmap = new Bitmap (spec.width, spec.height) [|Point (10, 10);
use graphics = Graphics.FromImage (bitmap) Point (spec.width, 10);
graphics.FillRectangle (spec.colour, new Rectangle(0, 0, bitmap.Width, bitmap.Height)) Point (spec.width, spec.height);
bitmap.Save (spec.filePath) Point (spec.height, 10);
printfn "[SUCCESS] Image saved." Point (10, 10)|]
(* let private drawImageWithBorder (graphics: Graphics) (pen: Pen) spec =
Need to call dispose manually because of how the image is/can be built-up. printfn "[INFO.] Adding border to image..."
need to reduce the amount of branching code... it's getting unwieldy. let penPath = createBorderPath spec
create bitmap graphics.DrawLines (pen, penPath)
create graphics
draw base
check overlay
add border
add full overlay
write image to disk
dispose resources
write output message*)
let private createBorderPositions spec =
[|Point (0, 0);
Point (spec.width, 0);
Point (spec.width, spec.height);
Point (spec.height, 0);
Point (0, 0)|]
let private drawImageWithBorder spec = let private drawImageWithFullOverlay graphics pen spec =
let overlay = spec.overlay.Value printfn "[INFO.] Adding full overlay to image..."
use bitmap = new Bitmap (spec.width, spec.height) ()
use graphics = Graphics.FromImage (bitmap)
use pen = new Pen (overlay.colour)
let border = createBorderPositions spec
graphics.DrawLines (pen, border)
printfn "Overlay image function not finished."
let private drawImageWithFullOverlay spec = () let private addOverlayToImage graphics spec =
let overlay = spec.overlay.Value
let pen = new Pen (overlay.colour, Width = 10.0f)
match overlay.overlayType with
| Border -> drawImageWithBorder graphics pen spec
| Full -> drawImageWithFullOverlay graphics pen spec
let private drawImageWithOverlay spec = let private drawImage spec =
match spec.overlay.Value.overlayType with let bitmap = new Bitmap (spec.width, spec.height)
| Border -> drawImageWithBorder spec let graphics = Graphics.FromImage (bitmap)
| Full -> drawImageWithFullOverlay spec let rectangle = Rectangle (0, 0, spec.width, spec.height)
graphics.FillRectangle (spec.colour, rectangle)
match spec.overlay.IsSome with
| true -> addOverlayToImage graphics spec
| false -> printfn "[INFO.] No overlay specified. Creating image without one."
bitmap.Save (spec.filePath)
bitmap.Dispose()
graphics.Dispose()
let makeImage2 spec = let makeImage spec =
async { async {
try try
printfn "[INFO.] Attempting to make image..." printfn "[INFO.] Attempting to make image..."
validateDimension spec.width validateDimension spec.width
validateDimension spec.height validateDimension spec.height
validateDirectory spec.filePath validateDirectory spec.filePath
match Option.isSome spec.overlay with drawImage spec
| true -> drawImageWithOverlay spec printfn "[SUCCESS] Image creation attempt complete."
| false -> drawMainImage spec return ()
return "[SUCCESS] Image creation attempt complete."
with with
| :? ArgumentException as ex -> return ex.Message | :? ArgumentException as ex -> printfn "%s" ex.Message
| _ as ex -> return ex.Message | _ as ex -> printfn "%s" ex.Message
} }

6
SmoulderingBeachBall/ScratchPad.fsx

@ -25,7 +25,7 @@ let im_height = 500
let im_colour = Brushes.BurlyWood let im_colour = Brushes.BurlyWood
let im_testPath = "C:/users/craig/desktop/test.png" let im_testPath = "C:/users/craig/desktop/test.png"
ImageMaker.makeImage im_width im_height im_colour im_testPath ImageMaker.makeImageBase im_width im_height im_colour im_testPath
|> Async.RunSynchronously |> Async.RunSynchronously
@ -42,6 +42,6 @@ let imageSpec =
height = 500; height = 500;
colour = Brushes.Yellow; colour = Brushes.Yellow;
filePath = "C:/users/craig/desktop/test.png"; filePath = "C:/users/craig/desktop/test.png";
overlay = None } // Change this to quickly change between border/full overlay or None. overlay = Some borderOverlay } // Change this to quickly change between border/full overlay or None.
makeImage2 imageSpec |> Async.RunSynchronously ImageMaker.makeImage imageSpec |> Async.RunSynchronously
Loading…
Cancel
Save