RosettaCodeData/Task/Image-noise/Python/image-noise.py

59 lines
1.3 KiB
Python
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
import time
import random
2023-12-16 21:33:55 -08:00
import tkinter
from PIL import Image
from PIL import ImageTk
2023-07-01 11:58:00 -04:00
2023-12-16 21:33:55 -08:00
class App:
2023-07-01 11:58:00 -04:00
def __init__(self, size, root):
self.root = root
self.root.title("Image Noise Test")
2023-12-16 21:33:55 -08:00
self.img = Image.new("1", size)
self.label = tkinter.Label(root)
2023-07-01 11:58:00 -04:00
self.label.pack()
self.time = 0.0
self.frames = 0
self.size = size
2023-12-16 21:33:55 -08:00
self.n_pixels = self.size[0] * self.size[1]
2023-07-01 11:58:00 -04:00
self.loop()
def loop(self):
2023-12-16 21:33:55 -08:00
start_time = time.time()
self.img.putdata(
[255 if b > 127 else 0 for b in random.randbytes(self.n_pixels)]
)
self.bitmap_image = ImageTk.BitmapImage(self.img)
self.label["image"] = self.bitmap_image
end_time = time.time()
self.time += end_time - start_time
2023-07-01 11:58:00 -04:00
self.frames += 1
if self.frames == 30:
try:
2023-12-16 21:33:55 -08:00
fps = self.frames / self.time
except ZeroDivisionError:
fps = "INSTANT"
print(f"{self.frames} frames in {self.time:3.2f} seconds ({fps} FPS)")
2023-07-01 11:58:00 -04:00
self.time = 0
self.frames = 0
self.root.after(1, self.loop)
2023-12-16 21:33:55 -08:00
2023-07-01 11:58:00 -04:00
def main():
2023-12-16 21:33:55 -08:00
root = tkinter.Tk()
2023-07-01 11:58:00 -04:00
app = App((320, 240), root)
root.mainloop()
2023-12-16 21:33:55 -08:00
if __name__ == "__main__":
main()