【问题标题】:How to use python/pygame to turn off certain pixels on Windows 7如何使用 python/pygame 在 Windows 7 上关闭某些像素
【发布时间】:2019-11-19 14:28:24
【问题描述】:

我有一台旧的 Windows 7 笔记本电脑,我想把它变成一个简单的时钟。我用 pygame 用 (0,0,0) 黑色像素填充屏幕,然后在上面用浅蓝色像素绘制时间。

问题是,(0,0,0) 黑色像素与关闭像素不同。正如您在图片中看到的那样,即使笔记本电脑的亮度尽可能低,黑色像素仍然具有亮度。这使时钟充当夜灯,这不是我想要的。

我希望那些黑色像素完全消失 - 比如当笔记本电脑关闭并且屏幕没有亮度时 - 同时保持蓝色像素打开。有什么建议?这甚至可能吗?

如果可能的话,我想解决方案是更改 Windows 7 设置中的某些内容,或者使用 pygame 或其他 python 库做一些我没有想到的事情。

——迄今为止的研究——

本帖置顶回复称电脑端无法“关闭”像素:https://superuser.com/questions/1155129/how-to-turn-off-make-black-certain-pixels-on-a-screen

有趣的建议,例如更改 Windows 中的对比度设置或下载调光程序,尽管 OP 说这两个想法都不够暗:https://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-do-i-dim-the-screen-brightness-further-than/ad7388af-e07a-4d9b-b71d-0e3f77a61c1c

背光信息:https://www.google.com/amp/s/amp.reddit.com/r/explainlikeimfive/comments/3hm6pd/eli5_why_dont_pixels_that_show_the_color_black/

【问题讨论】:

  • 您应该了解显示器的工作原理以及背光的工作。然后你会看到没有什么像你命名的那样off的像素。
  • @KlausD。除非他有一个 OLED 显示器来显示,但这不太可能,也不是你需要专门通过 pygame 切换的东西。
  • 好吧,假设它是一个 LED 显示屏,有没有办法让 python 关闭背光而不实际停止后台代码? (我可以让时钟在晚上关闭并在白天重新打开)
  • 您链接到的那个项目似乎是针对特定 LCD 面板的,而不是针对一般显示器的。由于您在 Windows 上,我会考虑使用 Windows API 以编程方式控制显示器的亮度,使用 PyWin32 之类的库。我没有使用过那个库,但this 表明它至少应该可以做到。当然,这只会改变整个显示器的亮度,而不仅仅是“黑色像素”。

标签: python windows windows-7 pygame pixel


【解决方案1】:

虽然 LED 显示屏无法打开或关闭特定像素,但可以控制显示屏后面的光(背光)。

这意味着时钟可以在白天打开并在晚上完全关闭 - 尽管很遗憾,它永远不会像问题所希望的那样部分打开。

打开和关闭背光的 Python 代码(睡眠也是 windows 的一个选项):

def backlight(argument):
    if sys.platform.startswith('linux'): # expecting "on" or "off" as the argument
        import os
        os.system("xset dpms force " + argument)

    elif sys.platform.startswith('win'): # expecting "on", "off", or "sleep" as the argument
        import win32gui
        import win32con

        if argument == "on":
          win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SYSCOMMAND,
                               win32con.SC_MONITORPOWER, -1)
        if argument == "off":
          win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SYSCOMMAND,
                               win32con.SC_MONITORPOWER, 2)
        if argument == "sleep":
          win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SYSCOMMAND,
                               win32con.SC_MONITORPOWER, 1)

【讨论】:

  • 干得好!如果你至少需要在 linux 中对背光进行更细粒度的控制,你可以看看 xrandr。
猜你喜欢
  • 2011-04-17
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2013-12-17
  • 2013-02-26
相关资源
最近更新 更多