59 lines
1.3 KiB
Python
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()
|