我想使用 LockBits 方法替换 GetPixel 和 SetPixel,所以我遇到了这个F# 延迟像素读取
open System.Drawing
open System.Drawing.Imaging
let pixels (image:Bitmap) =
let Width = image.Width
let Height = image.Height
let rect = new Rectangle(0,0,Width,Height)
// Lock the image for access
let data = image.LockBits(rect, ImageLockMode.ReadOnly, image.PixelFormat)
// Copy the data
let ptr = data.Scan0
let stride = data.Stride
let bytes = stride * data.Height
let values : byte[] = Array.zeroCreate bytes
System.Runtime.InteropServices.Marshal.Copy(ptr,values,0,bytes)
// Unlock the image
image.UnlockBits(data)
let pixelSize = 4 // <-- calculate this …Run Code Online (Sandbox Code Playgroud) 我想要一些像j = 1 .. j = -1和i = -1 .. i = 1的东西,我知道Java/C#的做法,但不是F#.
for j in 1 .. -1 do
for i in -1 .. 1 do
//all 9 combination.
Run Code Online (Sandbox Code Playgroud)
请指导,谢谢.
我有一系列像这样的3元组:
[(123, 143 ,136), (177, 284, 248), (143, 182, 252)...]
Run Code Online (Sandbox Code Playgroud)
我想通过总结所有3元组来将它们分成单个3元组:
[((x1+x2+x3),(y1+y2+y3),(z1+z2+z3))]
Run Code Online (Sandbox Code Playgroud)
然后找到他们的平均值
[((x1+x2+x3)/n,(y1+y2+y3)/n,(z1+z2+z3)/n)]
Run Code Online (Sandbox Code Playgroud)
我总结他们的尝试:
let averageRGB seqRGB = seqRGB |> Seq.fold(fun(R, G, B)(r, g, b) -> (R+r, G+g, B+b)) (0, 0, 0) (r, g, b)
Run Code Online (Sandbox Code Playgroud)
我试过用: