Поиск по сайту:

Как использовать мышь для масштабирования и поворота изображения в PyGame?


Pygame — мощная библиотека для создания 2D-игр и графических приложений на Python. Он предоставляет широкий спектр функциональных возможностей, включая возможность манипулирования и преобразования изображений. В этой статье мы рассмотрим, как использовать мышь для масштабирования и поворота изображения в Pygame.

Предварительные условия

Прежде чем понять процесс масштабирования и вращения изображений, важно иметь базовое представление о Pygame и его механизме обработки событий. Также убедитесь, что в вашей среде Python установлен Pygame. Вы можете установить его с помощью pip с помощью команды


pip install pygame

Настройка окна Pygame

Для начала давайте создадим окно Pygame, которое будет отображать наше изображение и обрабатывать события мыши. мы можем начать с импорта модулей Pygame


import pygame
import sys

Инициализируйте Pygame и создайте окно определенной ширины и высоты.

Мы установили переменные ширины и высоты на 800 и 600 соответственно, но вы можете настроить эти значения в соответствии с вашими потребностями. Теперь нам нужно обработать основной игровой цикл, который будет постоянно обновлять окно:


while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

Игровой цикл сохраняет окно открытым до тех пор, пока пользователь не закроет его, нажав кнопку закрытия. Если пользователь нажимает кнопку закрытия, мы выходим из программы, вызывая pygame.quit() и sys.exit().

Загрузка и отображение изображения

Чтобы загрузить и отобразить изображение, нам нужно импортировать его в нашу программу Pygame. Поместите файл изображения в тот же каталог, что и ваш скрипт Python. В этом примере предположим, что файл изображения называется «image.png». Мы можем загрузить и отобразить изображение, используя следующий код:

Функция pygame.image.load() загружает файл изображения, а image.get_rect() возвращает прямоугольный объект, представляющий размеры и положение изображения. Мы используем функцию screen.blit() для рисования изображения на поверхности экрана. Наконец, pygame.display.flip() обновляет дисплей, показывая изображение.


image = pygame.image.load("image.png")
image_rect = image.get_rect()
screen.blit(image, image_rect)
pygame.display.flip()

Масштабирование изображения

Теперь после отображения нашего изображения приступим к его масштабированию с помощью мыши. Мы будем использовать колесо прокрутки мыши для управления коэффициентом масштабирования.

Пример

В приведенном ниже примере мы использовали переменную Scale_factor для отслеживания масштабирования изображения. Когда колесо прокрутки мыши прокручивается вверх (event.button == 4), мы увеличиваем Scale_factor на 0,1. И наоборот, когда колесо прокрутки прокручивается вниз (event.button == 5), мы уменьшаем масштаб_коэффициента на 0,1.

Затем мы используем функцию pygame.transform.scale() для изменения размера исходного изображения на основе коэффициента масштабирования. Ширина и высота масштабированного изображения рассчитываются путем умножения исходных размеров на коэффициент масштабирования.

Scaled_image_rect обновляется, чтобы гарантировать, что изображение останется по центру после масштабирования. Мы очищаем экран с помощью screen.fill((0, 0, 0)) для удаления предыдущего изображения, а затем рисуем масштабированное изображение с помощью screen.blit().


import pygame
import sys

# Initialize Pygame
pygame.init()

# Set up the Pygame window
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Image Scaling Demo")

# Load and display the image
image = pygame.image.load("image.png")
image_rect = image.get_rect()
screen.blit(image, image_rect)
pygame.display.flip()

# Set up scaling variables
scale_factor = 1.0

# Game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 4:  # Scrolling up
                scale_factor += 0.1
            elif event.button == 5:  # Scrolling down
                scale_factor -= 0.1

    scaled_image = pygame.transform.scale(
        image, (int(image_rect.width * scale_factor), int(image_rect.height * scale_factor))
    )
    scaled_image_rect = scaled_image.get_rect(center=image_rect.center)

    screen.fill((0, 0, 0))  # Clear the screen
    screen.blit(scaled_image, scaled_image_rect)
    pygame.display.flip()

Выход

Примечание. Когда мы запустим этот код, он отобразит изображение в окне Pygame. Вы можете использовать колесо прокрутки мыши для масштабирования изображения вверх и вниз. Прокрутка вверх увеличивает масштаб на 0,1, а прокрутка вниз уменьшает масштаб на 0,1. Масштабированное изображение будет постоянно обновляться и отображаться в окне Pygame.

Поворот изображения

Теперь давайте реализуем функцию вращения с помощью мыши. Мы будем использовать движение мыши для управления углом поворота.

Пример

В приведенном ниже примере мы использовали переменную Rotation_angle для отслеживания поворота изображения. Когда мышь перемещается при нажатой левой кнопке (event.type == pygame.MOUSEMOTION и pygame.mouse.get_pressed()[0]), мы корректируем Rotate_angle на основе относительного движения по координате X (event.rel[ 0]). Разделив его на 10, вы обеспечите более плавное вращение.

Функция pygame.transform.rotate() используется для поворота масштабированного изображения на основе угла поворота. Подобно масштабированию, мы обновляем Rotat_image_rect, чтобы изображение оставалось центрированным после поворота.


import pygame
import sys

# Initialize Pygame
pygame.init()

# Set up the Pygame window
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Image Rotation Demo")

# Load and display the image
image = pygame.image.load("image.png")
image_rect = image.get_rect()
screen.blit(image, image_rect)
pygame.display.flip()

# Set up rotation variables
rotation_angle = 0.0

# Game loop
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 4:  # Scrolling up
                rotation_angle += 10
            elif event.button == 5:  # Scrolling down
                rotation_angle -= 10

    rotated_image = pygame.transform.rotate(image, rotation_angle)
    rotated_image_rect = rotated_image.get_rect(center=image_rect.center)

    screen.fill((0, 0, 0))  # Clear the screen
    screen.blit(rotated_image, rotated_image_rect)
    pygame.display.flip()

Выход

Заключение

В этой статье мы обсудили, как использовать мышь для масштабирования и поворота изображения в Pygame. Используя колесо прокрутки мыши, мы можем динамически регулировать коэффициент масштабирования и наблюдать за преобразованием изображения в режиме реального времени. Аналогичным образом, отслеживая движения и щелчки мыши, мы можем легко вращать изображение, обеспечивая интерактивный и привлекательный пользовательский интерфейс.

Статьи по данной тематике: