Почему пиксели в Pygame нечеткие? - PullRequest
1 голос
/ 06 мая 2020

Я только начинаю работать с Pygame и провел небольшой тест, просто печатая пиксели в случайных местах. Однако я заметил, что пиксели вообще кажутся не отдельными пикселями, а «нечеткими» каплями в несколько пикселей, как показано на изображении. Вот код, который я использовал для рисования пикселей: Есть ли способ просто отображать отдельные пиксели?

Редактировать: Вот весь код, который я использовал:

import pygame.gfxdraw
import pygame
import random

width = 1000
height = 1000

screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()
running = True

while running:
    x = random.randint(0,1000)
    y = random.randint(0,1000)

    pygame.gfxdraw.pixel(screen, x, y, (225,225,225))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.flip()
    clock.tick(240)

fuzzy pixels

больше нечетких пикселей

1 Ответ

1 голос
/ 06 мая 2020

pygame.gfxdraw.pixel(surface, x, y, color) будет рисовать один пиксель на заданной поверхности. Также вам нужно будет добавить import pygame.gfxdraw.

РЕДАКТИРОВАТЬ: Полный код:

import pygame.gfxdraw
import pygame
import random

width = 1680
height = 1050

screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()
running = True

x = [i for i in range(width - 10)]
x_full = [i for i in range(width)]
y = 100
y_full = [i for i in range(height // 2)]

while running:

    for i in x:
        for j in y_full:
            pygame.gfxdraw.pixel(screen, i, j, pygame.Color("red"))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.flip()
    clock.tick(1)

Попробуйте проверить это таким образом, я установил размер окна, чтобы он соответствовал разрешению моего монитора, поэтому он идет полноэкранный. x_full и y должны дать вам горизонтальную линию. А если вычесть, например, 10, получится немного более короткая строка, и наоборот с y_full и некоторым случайным x. Также использование (width//2, height//2) будет охватывать ровно четверть экрана. Я думаю, что это точно, и что pygame.gfxdraw.pixel(screen, i, j, pygame.Color("red")) отображает только один пиксель, как и должно. В вашем коде вы используете random для отображения пикселей, и он добавляет их 240 в секунду, поэтому вы очень быстро получаете кучу пикселей в случайных положениях, в результате чего пиксели, близкие друг к другу, выглядят как «более крупные». Думаю, вот что здесь происходило. Пожалуйста, поправьте меня, если я ошибаюсь. Также сделайте маленькое окно, например (100, 100), и нарисуйте один пиксель в (50, 50) так, чтобы его было легче увидеть. Если вы используете windows, используйте лупу для проверки.

ВАЖНО: при тестировании этого с большим количеством пикселей делайте это ВНЕ l oop, потому что для их отображения потребуется много мощности процессора. Надеюсь, это ответит на ваш вопрос

...