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

59 lines
1.3 KiB
Python

import time
import random
import tkinter
from PIL import Image
from PIL import ImageTk
class App:
def __init__(self, size, root):
self.root = root
self.root.title("Image Noise Test")
self.img = Image.new("1", size)
self.label = tkinter.Label(root)
self.label.pack()
self.time = 0.0
self.frames = 0
self.size = size
self.n_pixels = self.size[0] * self.size[1]
self.loop()
def loop(self):
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
self.frames += 1
if self.frames == 30:
try:
fps = self.frames / self.time
except ZeroDivisionError:
fps = "INSTANT"
print(f"{self.frames} frames in {self.time:3.2f} seconds ({fps} FPS)")
self.time = 0
self.frames = 0
self.root.after(1, self.loop)
def main():
root = tkinter.Tk()
app = App((320, 240), root)
root.mainloop()
if __name__ == "__main__":
main()