scaletest.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/usr/bin/env python
  2. import sys, time
  3. import pygame
  4. def main(imagefile, convert_alpha=False, run_speed_test=False):
  5. """show an interactive image scaler
  6. Args:
  7. imagefile - name of source image (required)
  8. convert_alpha - use convert_alpha() on the surf (default False)
  9. run_speed_test - (default False)
  10. """
  11. # initialize display
  12. pygame.display.init()
  13. # load background image
  14. background = pygame.image.load(imagefile)
  15. if run_speed_test:
  16. if convert_alpha:
  17. # convert_alpha() requires the display mode to be set
  18. pygame.display.set_mode((1, 1))
  19. background = background.convert_alpha()
  20. SpeedTest(background)
  21. return
  22. # start fullscreen mode
  23. screen = pygame.display.set_mode((1024, 768), pygame.FULLSCREEN)
  24. if convert_alpha:
  25. background = background.convert_alpha()
  26. # turn off the mouse pointer
  27. pygame.mouse.set_visible(0)
  28. # main loop
  29. bRunning = True
  30. bUp = False
  31. bDown = False
  32. bLeft = False
  33. bRight = False
  34. cursize = [background.get_width(), background.get_height()]
  35. while(bRunning):
  36. image = pygame.transform.smoothscale(background, cursize)
  37. imgpos = image.get_rect(centerx=512, centery=384)
  38. screen.fill((255,255,255))
  39. screen.blit(image, imgpos)
  40. pygame.display.flip()
  41. for event in pygame.event.get():
  42. if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
  43. bRunning = False
  44. if event.type == pygame.KEYDOWN:
  45. if event.key == pygame.K_UP: bUp = True
  46. if event.key == pygame.K_DOWN: bDown = True
  47. if event.key == pygame.K_LEFT: bLeft = True
  48. if event.key == pygame.K_RIGHT: bRight = True
  49. if event.type == pygame.KEYUP:
  50. if event.key == pygame.K_UP: bUp = False
  51. if event.key == pygame.K_DOWN: bDown = False
  52. if event.key == pygame.K_LEFT: bLeft = False
  53. if event.key == pygame.K_RIGHT: bRight = False
  54. if bUp:
  55. cursize[1] -= 2
  56. if cursize[1] < 1: cursize[1] = 1
  57. if bDown:
  58. cursize[1] += 2
  59. if bLeft:
  60. cursize[0] -= 2
  61. if cursize[0] < 1: cursize[0] = 1
  62. if bRight:
  63. cursize[0] += 2
  64. def SpeedTest(image):
  65. print("\nImage Scaling Speed Test - Image Size %s\n" % str(
  66. image.get_size()))
  67. imgsize = [image.get_width(), image.get_height()]
  68. duration = 0.0
  69. for i in range(128):
  70. shrinkx = (imgsize[0] * i) // 128
  71. shrinky = (imgsize[1] * i) // 128
  72. start = time.time()
  73. tempimg = pygame.transform.smoothscale(image, (shrinkx, shrinky))
  74. duration += (time.time() - start)
  75. del tempimg
  76. print("Average transform.smoothscale shrink time: %.4f ms." % (
  77. duration / 128 * 1000))
  78. duration = 0
  79. for i in range(128):
  80. expandx = (imgsize[0] * (i + 129)) // 128
  81. expandy = (imgsize[1] * (i + 129)) // 128
  82. start = time.time()
  83. tempimg = pygame.transform.smoothscale(image, (expandx, expandy))
  84. duration += (time.time() - start)
  85. del tempimg
  86. print("Average transform.smoothscale expand time: %.4f ms." % (
  87. duration / 128 * 1000))
  88. duration = 0.0
  89. for i in range(128):
  90. shrinkx = (imgsize[0] * i) // 128
  91. shrinky = (imgsize[1] * i) // 128
  92. start = time.time()
  93. tempimg = pygame.transform.scale(image, (shrinkx, shrinky))
  94. duration += (time.time() - start)
  95. del tempimg
  96. print("Average transform.scale shrink time: %.4f ms." % (
  97. duration / 128 * 1000))
  98. duration = 0
  99. for i in range(128):
  100. expandx = (imgsize[0] * (i + 129)) // 128
  101. expandy = (imgsize[1] * (i + 129)) // 128
  102. start = time.time()
  103. tempimg = pygame.transform.scale(image, (expandx, expandy))
  104. duration += (time.time() - start)
  105. del tempimg
  106. print("Average transform.scale expand time: %.4f ms." % (
  107. duration / 128 * 1000))
  108. if __name__ == '__main__':
  109. # check input parameters
  110. if len(sys.argv) < 2:
  111. print("\nUsage: %s imagefile [-t] [-convert_alpha]" % sys.argv[0])
  112. print(" imagefile image filename (required)")
  113. print(" -t run speed test")
  114. print(" -convert_alpha use convert_alpha() on the image's "
  115. "surface\n")
  116. else:
  117. main(sys.argv[1],
  118. convert_alpha = '-convert_alpha' in sys.argv,
  119. run_speed_test = '-t' in sys.argv)