python 为什么PyGame不使用.set_at绘制单个像素?

am46iovg  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(153)

我想在PyGame中找到一种方法来画一条由黑色像素组成的线。按照Pygame: Draw single pixel,我最终得到:

使用以下代码:

import pygame

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
FPS = 10

pygame.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
screen = pygame.display.set_mode((200, 200))
screen.fill(WHITE)

pygame.display.flip()
clock = pygame.time.Clock()
screen_width, screen_height = screen.get_size()

for i in range(100):
  screen.set_at((i, 100), BLACK)

while True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      exit()
  
  pygame.display.update()
  clock.tick(FPS)

我使用ColorSlurp检查宽度。

为什么我最后得到一条4px宽的线?有没有办法修正它,使它实际上得到一条1像素宽的线?

备注

我想也许ColorSlurp在缩放时添加了虚假的额外像素(比如“过度缩放”)。所以我用HTML画布检查了一下,我得到了这个:

通过缩小,我得到了一条1像素宽的线。所以我有同样的行为,但我的电脑实际上可以显示一条比PyGame上的.set_at(position, color)或canvas上的.fillRect(x, y, 1, 1)更细的线。

bkhjykvo

bkhjykvo1#

set_at改变单个像素的颜色。但是,如果您的显示是DPI缩放的,当Pygame窗口更新时,表面会被放大。您必须禁用Pygame窗口的缩放。例如,在窗口中您可以:

import ctypes
ctypes.windll.user32.SetProcessDPIAware()

相关问题