Seite 1 von 1
Bilder drehen mit pygame
Verfasst: Sonntag 11. November 2012, 16:25
von mintpc
Hallo zusammen,
ich suche die Möglichkeit (den Befehl), ein mit pygame angezeigtes Bild (jpg)
zu drehen. Speziell hier einen Mauerstein, mit dem ein Labyrinth abgegrenzt wird,
der an der Seite des Labyrinths um 90° gedreht angezeigt wird.
Ich hatte "rotate" probliert, allerdings tat sich da nichts.
Gibt es überhaupt solch einen Befehl, ein Bild zu drehen?
Danke schonmal
mintpc
P.S: Das Bild in einem Grafikprogramm zu drehen geht natürlich, aber
so eine Lösung wäre für mich "nur zur Not".
Re: Bilder drehen mit pygame
Verfasst: Sonntag 11. November 2012, 18:40
von BlackJack
@mintpc: `rotate()` verändert nicht das Originalsurface sondern erstellt ein neues. Steht so in der Dokumentation.
Re: Bilder drehen mit pygame
Verfasst: Donnerstag 15. November 2012, 15:31
von mintpc
Danke, dass "rotate" nicht klappt hatte ich ja schon geschrieben.
Ich wollte den Befehl, ein Bild zu drehen.
Geht das denn überhaupt???
Re: Bilder drehen mit pygame
Verfasst: Donnerstag 15. November 2012, 19:34
von BlackJack
@mintpc: Nein. Aber Du kannst mit `rotate()` ein gedrehtes Bild bekommen.
Re: Bilder drehen mit pygame
Verfasst: Donnerstag 15. November 2012, 22:09
von StefanLawl
mintpc hat geschrieben:Danke, dass "rotate" nicht klappt hatte ich ja schon geschrieben.
Ich wollte den Befehl, ein Bild zu drehen.
Geht das denn überhaupt???
Das hat doch BlackJack schon erklärt.
BlackJack hat geschrieben:@mintpc: `rotate()` verändert nicht das Originalsurface sondern erstellt ein neues.
Code: Alles auswählen
>>> x = ['b','i','l','d',]
>>> x
['b', 'i', 'l', 'd']
>>> ''.join(x)
'bild'
>>> x
['b', 'i', 'l', 'd']
>>>
x ist also die Liste ['b','i','l','d',]. Obwohl ''.join(x) einfach 'bild' ausgibt, bleibt x immer noch die Liste.
Code: Alles auswählen
>>> z = ''.join(x)
>>> z
'bild'
>>> x
['b', 'i', 'l', 'd']
>>>
z ist jetzt 'bild', x bleibt aber Liste (x).
Jetzt denk dir statt Listen und
join() einfach Bilder und
rotate()
Stefan
Re: Bilder drehen mit pygame
Verfasst: Donnerstag 22. November 2012, 10:01
von C4S3
Code: Alles auswählen
#! /python26/python.exe
#! coding: utf-8
"""
Simple demonstration on rotating an Image!
"""
import pygame
from pygame.locals import *
pygame.init()
SCREENSIZE = (640, 640)
screen = pygame.display.set_mode(SCREENSIZE, 0, 32)
pygame.display.set_caption("Angle: 0°")
scrcenter = screen.get_rect().center
print scrcenter
print type(scrcenter)
# Prepare Background and Arrow:
bg = pygame.Surface(SCREENSIZE)
bg.fill((120,120,120))
arrow = pygame.Surface((120,120), SRCALPHA)
pygame.draw.rect(arrow, (255, 0, 0), (0, 0, 120, 120))
# We need an image to rotate:
rotarrow = arrow.copy()
angle = 0
# We define centerpoints for the images/sprites.
CENTER = screen.get_rect().center
ACENTER = arrow.get_rect().center
ABS_CENTER = (CENTER[0] - ACENTER[0], CENTER[1] - ACENTER[1])
#
keepGoing = True
clock = pygame.time.Clock()
while keepGoing:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
keepGoing = False
elif event.key == pygame.K_RIGHT:
angle -= 5
rotarrow = pygame.transform.rotate(arrow, angle)
elif event.key == pygame.K_LEFT:
angle += 5
rotarrow = pygame.transform.rotate(arrow, angle)
# Get centerpoint of current rect
ROTCENTER = rotarrow.get_rect().center
ABS_CENTER = (CENTER[0] - ROTCENTER[0], CENTER[1]-ROTCENTER[1])
# display current angle for info:
pygame.display.set_caption("Angle: " + str(angle) + "°")
screen.blit(bg, (0,0))
screen.blit(rotarrow, ABS_CENTER)
pygame.display.flip()