Pete Shinners wrote:
I would expect you could do this. You'll need to rotate the surface, and then blit it back onto itself 8 times with offsets. The offsets will be the rotated corners of the original image rect.
Yeah, it didn't work. It seems like it should, but run the following code (your code worked up into a program), and wave the mouse back and forth to change the angle.
Odd, huh? It's a tricky bit, apparently. The only hits I found on the internet were for software patents I didn't understand.
--Kamilche import pygame import math filename=r"C:\Documents and Settings\Administrator\Desktop\batik.jpg" SCREENWIDTH = 640 SCREENHEIGHT = 480 def Rotated(surf, degrees = 0): # rotate surface print 'Rotated ', degrees, ' degrees.' rotsurf = pygame.transform.rotate(surf, degrees) # compute the offsets needed c = math.cos(math.radians(degrees)) s = math.sin(math.radians(degrees)) widthx = (surf.get_width() - 1) * c widthy = (surf.get_width() - 1) * s heightx = (surf.get_height() - 1) * s heighty = (surf.get_height() - 1) * c # the 8 positions, corners first positions = [ (widthx + heightx, widthy + heighty), (widthx - heightx, widthy - heighty), (-widthx + heightx, -widthy + heighty), (-widthx - heightx, -widthy - heighty), (widthx, widthy), (-widthx, -widthy), (heightx, heighty), (-heightx, -heighty), ] # apply the blits for pos in positions: rotsurf.blit(rotsurf, pos) return rotsurf def main(): pygame.init() bg = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT), 0, 32) quit = 0 pic = pygame.image.load(filename).convert_alpha() pic2 = pic while not quit: bg.fill((255, 0, 0, 255)) bg.blit(pic2, (0, 0)) pygame.display.flip() for e in pygame.event.get(): if e.type == pygame.QUIT: quit = 1 break elif e.type == pygame.MOUSEMOTION: pic2 = Rotated(pic, e.pos[0]) pygame.quit() main()