Lightningbeam/PyGUI-2.5.3/Tests/45-ndarray.py

57 lines
1.4 KiB
Python

from __future__ import division
from math import sin, pi
from numpy import zeros, uint8
from GUI import Window, View, application, rgb
from GUI.StdColors import yellow
from GUI.Numerical import image_from_ndarray
from GUI.Geometry import offset_rect
from testing import say
background = rgb(0.25, 0.25, 0.25)
width = 300
height = 100
def plot(a, f, c):
h = height // 2
A = h - 1
for x in xrange(width):
y = h + int(round(A * sin(2 * pi * f * x / width)))
a[y, x] = c
def make_array():
a = zeros((height, width, 4), uint8)
plot(a, 1, (255, 0, 0, 255))
plot(a, 2, (255, 255, 0, 255))
plot(a, 3, (0, 255, 0, 255))
return a
the_array = make_array()
the_image = image_from_ndarray(the_array, 'RGBA')
class ImageTestView(View):
def draw(self, c, r):
image = the_image
c.backcolor = background
c.erase_rect(r)
main_image_pos = (10, 10)
src_rect = image.bounds
#say("Image bounds =", src_rect)
dst_rect = offset_rect(src_rect, main_image_pos)
#say("Drawing", src_rect, "in", dst_rect)
image.draw(c, src_rect, dst_rect)
win = Window(size = (width + 20, height + 20), title = "Image from NumPy Array")
view = ImageTestView(size = win.size)
win.add(view)
view.become_target()
win.show()
instructions = """
There should be a red, a yellow and a green sinewave on a grey background.
"""
say(instructions)
application().run()