Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System.Drawing
- open System.Drawing.Imaging
- open System.IO
- open System.Diagnostics
- let applyTransform file (trans: Bitmap -> Bitmap) =
- let outFile = Path.GetFileNameWithoutExtension(file) + "-out.jpg";
- use inputImage = new Bitmap(file)
- use outputImage = trans inputImage
- outputImage.Save(outFile, ImageFormat.Jpeg)
- let batchTransform directory (trans: Bitmap -> Bitmap) =
- let asyncApply file = async { applyTransform file trans }
- Directory.EnumerateFiles(directory, "*.jpg")
- |> Seq.map asyncApply
- |> Async.Parallel
- |> Async.RunSynchronously
- |> ignore
- type ColorTransform = Color -> Color
- type UVTransform = int * int -> int * int
- let applyPixelTransform (colorTrans: ColorTransform) (uvTrans: UVTransform) (width: int) (height: int) (image: Bitmap) =
- let output = new Bitmap(width, height)
- for i in 0..(width - 1) do
- for j in 0..(height - 1) do
- output.SetPixel(i, j, image.GetPixel(i, j) |> colorTrans) |> ignore
- output
- let var1_grayscalePixel (color: Color) =
- let x = (int color.R + int color.G + int color.B) / 3
- Color.FromArgb(x, x, x)
- let var2_invertPixel (color: Color) =
- let inv x = 255 - int x
- Color.FromArgb(inv color.R, inv color.G, inv color.B)
- let timer = Stopwatch.StartNew()
- batchTransform "input" (applyPixelTransform var1_grayscalePixel)
- printf "%A" timer.Elapsed
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement