Topic: Ruotare immagine con pygame  (Letto 1917 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline b2311980

  • python erectus
  • ***
  • Post: 161
  • Punti reputazione: 0
    • Mostra profilo
Ruotare immagine con pygame
« il: Febbraio 21, 2013, 22:07 »
Se ruoto un'immagine con pygame.transform.rotate() l'immagine si sposta.
Per fare che il centro non si sposti quando ruota ho trovato questo modo:
[codice]
image = pygame.image.load("image.png")

newimg = pygame.transform.rotate(image, angle)
newrect = newimg.get_rect()
newrect.left = (width / 2) - (newrect.w / 2)
newrect.top = (height / 2) - (newrect.h / 2)
screen.blit(newimg, (newrect.left, newrect.top))
[/codice]
width e height sono le dimensioni di tutta la finestra che uso con pygame.display.set_mode()
in questo modo l'immagine rimane al centro della finestra anche quando la ruoto.
si poteva fare la stessa cosa anche usando la trigonometria e senza usare get_react(), ma così con get_rect() mi sembra meno pesante come lavoro

Però io ho un'immagine che voglio ruoti mantenendo un punto fisso che non è il centro dell'immagine.
L'unica soluzione che ho trovato è ridisegnare l'immagine in modo che il punto su cui deve ruotare sia il centro e il resto intorno che non mi serve sia trasparente (in pratica con gimp facendo aggiungi canale alfa) e poi usando il modo che ho scritto quà sopra

È una buona idea o c'è già qualche funzione di pygame che fà quello che mi serve?

Offline crap0101

  • python sapiens sapiens
  • ******
  • Post: 1.529
  • Punti reputazione: 5
  • Long Live The New Flesh
    • Mostra profilo
    • crap0101 washroom
Re: Ruotare immagine con pygame
« Risposta #1 il: Febbraio 22, 2013, 21:45 »
non ci sono facilitazioni per la rotazione, devi fare tu.
L'unica cosa a cui stare attenti (e mi pare sia menzionato anche nella doc) è usare sempre l'immagine originale per tutte le rotazioni, siccome ruotando cambi le dimensioni della surface.

Offline Javatar

  • python neanderthalensis
  • ****
  • Post: 349
  • Punti reputazione: 0
    • Mostra profilo
    • La mia pagina su Github
Re: Ruotare immagine con pygame
« Risposta #2 il: Febbraio 24, 2013, 10:52 »
Citazione
L'unica cosa a cui stare attenti (e mi pare sia menzionato anche nella doc) è usare sempre l'immagine originale per tutte le rotazioni, siccome ruotando cambi le dimensioni della surface.
Se non ci stai attento noterai una specie di effetto "vortice", che non ti saprai spiegare, e ci perderai parecchio tempo.... esperienza personale.
Comunuque è un po che non uso pygame, ma mi ricordo ci fossero problemi con la rotazione...
Forse l'immagine non veniva ruotata attorno al centro, ma attorno ad un angolo, avevo risolto così :
http://stackoverflow.com/questions/4183208/pygame-rotating-an-image-around-its-center
Buon lavoro ;)

Offline b2311980

  • python erectus
  • ***
  • Post: 161
  • Punti reputazione: 0
    • Mostra profilo
Re: Ruotare immagine con pygame
« Risposta #3 il: Febbraio 27, 2013, 14:20 »
ok grazie!
per il problema della perdità di qualità dopo ogni trasformazione me ne ero già accorto e avevo già trovato di usare sempre l'immagine originale.
ma se non viene troppo pesante il programma non posso usare solo load() senza convert()?

Offline Javatar

  • python neanderthalensis
  • ****
  • Post: 349
  • Punti reputazione: 0
    • Mostra profilo
    • La mia pagina su Github
Re: Ruotare immagine con pygame
« Risposta #4 il: Febbraio 27, 2013, 17:15 »
Convert() cambia il formato dei pixel, ad esempio puoi usarla per eliminare le trasparenze, se non le vuoi...
Non penso avrai problemi senza ;)

Offline b2311980

  • python erectus
  • ***
  • Post: 161
  • Punti reputazione: 0
    • Mostra profilo
Re: Ruotare immagine con pygame
« Risposta #5 il: Febbraio 28, 2013, 14:43 »
grazie

Offline 42Catte

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Re:Ruotare immagine con pygame
« Risposta #6 il: Febbraio 03, 2021, 22:02 »
Grazie tante b2311980, dopo aver letto il tuo post sono riuscito a risolvere un problema che mi brulicava in testa.
Sono entrato da poco nel mondo python e spero di imparare molte più cose e di diventare un'esperto.
Grazie ancora, 42Catte.