module internal ImageServices
open System.Drawing
open System.Drawing.Imaging
open DeathSocket
open Validation
open ColourServices
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)|]|]
// To be deleted -- replaced with brush spec.
//let drawGrid (spec: BrushSpec) =
// // The temp. file is used as a way to convert images with indexed pixels.
// 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)
let drawBrushSpecGrid (spec: BrushSpec) =
// The temp. file is used as a way to convert images with indexed pixels.
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)
// Not tested
let drawRGBAGrid (spec: RGBASpec) =
// The temp. file is used as a way to convert images with indexed pixels.
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 ((convertRGBAToBrush spec), 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)