在 F# 中如何在没有 window 的情况下绘制到屏幕上的像素?
How to draw to a pixel on the screen without a window in F#?
我在 Question/Answer 找到了 Python 的答案。我想知道如何在 F# 中执行此操作以及我具体需要导入什么以及如何获取设备上下文。我意识到使用 window 更好,但我不想为我正在进行的项目使用太多。我猜也有办法获得屏幕的 width/height。
这是一个最小的示例,它使用 GetDC
和 SetPixel
函数来完成与所引用问题中的 Python 示例完全相同的事情:
open System
open System.Runtime.InteropServices
[<DllImport("user32.dll",EntryPoint="GetDC")>]
extern IntPtr GetDC(IntPtr ptr)
[<DllImport("gdi32.dll")>]
extern uint32 SetPixel(IntPtr hdc, int X, int Y, uint32 crColor);
let dc = GetDC(IntPtr.Zero)
for i in 0 .. 255 do
let r, g, b = 255, i, 255
let clr = (r <<< 16) ||| (g <<< 8) ||| b
SetPixel(dc, i, 0, uint32 clr) |> ignore
也就是说,我无法想象这是一件好事的场景。如果您正在创建一个合理的 windows 应用程序,您肯定会想要在属于您的应用程序的 window 中绘制任何内容。
我在 Question/Answer 找到了 Python 的答案。我想知道如何在 F# 中执行此操作以及我具体需要导入什么以及如何获取设备上下文。我意识到使用 window 更好,但我不想为我正在进行的项目使用太多。我猜也有办法获得屏幕的 width/height。
这是一个最小的示例,它使用 GetDC
和 SetPixel
函数来完成与所引用问题中的 Python 示例完全相同的事情:
open System
open System.Runtime.InteropServices
[<DllImport("user32.dll",EntryPoint="GetDC")>]
extern IntPtr GetDC(IntPtr ptr)
[<DllImport("gdi32.dll")>]
extern uint32 SetPixel(IntPtr hdc, int X, int Y, uint32 crColor);
let dc = GetDC(IntPtr.Zero)
for i in 0 .. 255 do
let r, g, b = 255, i, 255
let clr = (r <<< 16) ||| (g <<< 8) ||| b
SetPixel(dc, i, 0, uint32 clr) |> ignore
也就是说,我无法想象这是一件好事的场景。如果您正在创建一个合理的 windows 应用程序,您肯定会想要在属于您的应用程序的 window 中绘制任何内容。