diff options
-rw-r--r-- | gr-wxgui/src/python/plotter/waterfall_plotter.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gr-wxgui/src/python/plotter/waterfall_plotter.py b/gr-wxgui/src/python/plotter/waterfall_plotter.py index d32b0ca0a..f83e27e72 100644 --- a/gr-wxgui/src/python/plotter/waterfall_plotter.py +++ b/gr-wxgui/src/python/plotter/waterfall_plotter.py @@ -26,6 +26,7 @@ import common import numpy import gltext import math +import struct LEGEND_LEFT_PAD = 7 LEGEND_NUM_BLOCKS = 256 @@ -37,6 +38,9 @@ MIN_PADDING = 0, 60, 0, 0 #top, right, bottom, left ceil_log2 = lambda x: 2**int(math.ceil(math.log(x)/math.log(2))) +pack_color = lambda x: struct.pack('BBBB', *x) +unpack_color = lambda s: struct.unpack('BBBB', s) + def _get_rbga(red_pts, green_pts, blue_pts, alpha_pts=[(0, 0), (1, 0)]): """ Get an array of 256 rgba values where each index maps to a color. @@ -53,10 +57,10 @@ def _get_rbga(red_pts, green_pts, blue_pts, alpha_pts=[(0, 0), (1, 0)]): #linear interpolation if x <= x2: return float(y1 - y2)/(x1 - x2)*(x - x1) + y1 raise Exception - return [numpy.array(map( + return [pack_color(map( lambda pw: int(255*_fcn(i/255.0, pw)), (red_pts, green_pts, blue_pts, alpha_pts), - ), numpy.uint8).tostring() for i in range(0, 256) + )) for i in range(0, 256) ] COLORS = { @@ -179,8 +183,8 @@ class waterfall_plotter(grid_plotter_base): block_height = float(legend_height)/LEGEND_NUM_BLOCKS x = self.width - self.padding_right + LEGEND_LEFT_PAD for i in range(LEGEND_NUM_BLOCKS): - color = COLORS[self._color_mode][int(255*i/float(LEGEND_NUM_BLOCKS-1))] - GL.glColor4f(*map(lambda c: ord(c)/255.0, color)) + color = unpack_color(COLORS[self._color_mode][int(255*i/float(LEGEND_NUM_BLOCKS-1))]) + GL.glColor4f(*numpy.array(color)/255.0) y = self.height - (i+1)*block_height - self.padding_bottom self._draw_rect(x, y, LEGEND_WIDTH, block_height) #draw rectangle around color scale border @@ -261,7 +265,7 @@ class waterfall_plotter(grid_plotter_base): samples = numpy.clip(samples, 0, 255) #clip samples = numpy.array(samples, numpy.uint8) #convert the samples to RGBA data - data = numpy.choose(samples, COLORS[self._color_mode]).tostring() + data = ''.join([COLORS[self._color_mode][sample] for sample in samples]) self._buffer.append(data) self._waterfall_cache.changed(True) self.unlock() |