Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System.Drawing
- open System
- open System.IO
- open System.Threading
- open System.Diagnostics
- let transformImage trans (path: string) =
- let from = new Bitmap(path)
- let cvs = new Bitmap(from.Width, from.Height)
- for i in 0..cvs.Height - 1 do
- for j in 0..cvs.Width - 1 do
- let p: Color = trans from i j
- cvs.SetPixel(j, i, p)
- cvs.Save(path + ".cvs.jpg")
- let rand = new ThreadLocal<Random>(fun () -> new Random())
- let grayscaleTrans (cvs: Bitmap) i j =
- let p = cvs.GetPixel(j, i)
- let h = (0.2126 * float p.R + 0.7152 * float p.G + 0.0722 * float p.B) / 255.0
- if rand.Value.NextDouble() < h
- then Color.White
- else Color.Black
- let grayscale = transformImage grayscaleTrans
- let mirrorTrans (cvs: Bitmap) i j =
- let nj = min (cvs.Width - 1) (max 0 (j + int (sin(float i / 20.0) * 10.0)))
- cvs.GetPixel(nj, i)
- let mirror = transformImage mirrorTrans
- let batchProcess conv dir =
- Directory.EnumerateFiles(dir) |> Seq.iter conv
- let asyncProcess conv dir =
- Directory.EnumerateFiles(dir)
- |> Seq.map (fun path -> async { conv path })
- |> Async.Parallel
- |> Async.RunSynchronously
- |> ignore
- //mirror "a.jpg"
- Directory.EnumerateFiles("input", "*.cvs.jpg") |> Seq.iter File.Delete
- let t = Stopwatch.StartNew()
- asyncProcess mirror "input"
- printfn "asyncProcess %A" t.Elapsed
- Directory.EnumerateFiles("input", "*.cvs.jpg") |> Seq.iter File.Delete
- t.Restart()
- batchProcess mirror "input"
- printfn "batchProcess %A" t.Elapsed
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement