57 lines
1.4 KiB
Python
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()
|