Borrando un Píxel de una Superficie en Pygame
Estoy tratando de crear un programa de pixel-art utilizando pygame (sí, sé que hay mejores paquetes para usar). La forma en que estoy dibujando los píxeles es mediante surface.set_at(). Necesito saber cómo borrar completamente un píxel de una superficie de pygame, para poder tener una herramienta de borrador. No quiero llenar el píxel con el color de fondo de la ventana, porque eso seguiría apareciendo al usar pygame.image.save() para obtener un archivo de imagen del dibujo. ¿Alguien puede ayudarme por favor? Aquí está mi código:
import pygame
import sys
import math
pygame.init()
clock = pygame.time.Clock()
pygame.display.set_caption("Pixel Studio v1.1")
screen = pygame.display.set_mode((960, 720), pygame.RESIZABLE)
scroll_speed = 5
canvas_size = (32, 16)
color = (255, 255, 255)
canvas_surf = pygame.Surface(canvas_size, pygame.SRCALPHA)
zoom = 12
mouse_down = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.image.save(canvas_surf, "canvas.png")
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == pygame.BUTTON_LEFT:
mouse_down = True
if event.button == pygame.BUTTON_WHEELUP:
if zoom > 2:
zoom -= scroll_speed
if event.button == pygame.BUTTON_WHEELDOWN:
zoom += scroll_speed
if event.type == pygame.MOUSEBUTTONUP:
if event.button == pygame.BUTTON_LEFT:
mouse_down = False
if zoom < 2:
zoom = 2
screen.fill((50, 50, 50))
canvas_surf_scaled = pygame.transform.scale(canvas_surf, (canvas_surf.get_width() * zoom, canvas_surf.get_height() * zoom))
canvas_rect = canvas_surf_scaled.get_rect(center=(screen.get_width()/2, screen.get_height()/2))
mouse_pos = pygame.mouse.get_pos()
if mouse_down:
canvas_surf.set_at((math.floor((mouse_pos[0] - canvas_rect.x) / zoom), math.floor((mouse_pos[1] - canvas_rect.y) / zoom)), color)
pygame.draw.rect(screen, (75, 75, 75), canvas_rect, 1)
screen.blit(canvas_surf_scaled, canvas_rect)
pygame.display.flip()
clock.tick(60)
davy.ai
Para eliminar un píxel de una superficie de pygame usando
surface.set_at()
, necesitarás establecer el color del píxel como transparente. Puedes hacer esto estableciendo el color del píxel como(0,0,0,0)
. Esto establece los valores de RGB en 0 y el valor de alfa en 0, haciendo que el píxel sea completamente transparente.Aquí tienes un ejemplo de cómo puedes modificar tu código para agregar una herramienta de borrador que establece el color del píxel como transparente:
En este código modificado, hemos agregado dos nuevas herramientas: la herramienta de borrador y la herramienta de selección de color. Cuando presionas la tecla ‘e’, se activa la herramienta de borrador y el color se establece como transparente. Cuando haces clic en el lienzo con el botón izquierdo del mouse, el color del píxel seleccionado se establece como transparente usando
canvas_surf.set_at()
. Esto eliminará completamente el píxel de la superficie. Cuando sueltas el botón izquierdo del mouse, la herramienta dejará de estar activa y podrás continuar dibujando con el color actual.Ten en cuenta que el código también incluye una herramienta de selección de color que te permite seleccionar un color de la superficie al presionar la tecla ‘c’. Cuando la herramienta está activa, hacer clic en un píxel en el lienzo establecerá el color actual como el color de ese píxel.