#--------------------------------------------------------------
#
#   PyGUI - NumPy interface - Gtk
#
#--------------------------------------------------------------

from gtk import gdk
from GUI import Image

def image_from_ndarray(array, format, size = None):
    """
    Creates an Image from a numpy ndarray object. The format
    may be 'RGB' or 'RGBA'. If a size is specified, the array
    will be implicitly reshaped to that size, otherwise the size
    is inferred from the first two dimensions of the array.
    """
    if array.itemsize <> 1:
        raise ValueError("Color component size must be 1 byte")
    if size is None:
        shape = array.shape
        if len(shape) <> 3:
            raise ValueError("Array has wrong number of dimensions")
        width, height, pixel_size = shape
        if pixel_size <> len(format):
            raise ValueError("Last dimension of array does not match format")
    else:
        width, height = size
        pixel_size = len(format)
        data_size = array.size
        if data_size <> width * height * pixel_size:
            raise ValueError("Array has wrong shape for specified size and format")
    alpha = pixel_size == 4
    gdk_pixbuf = gdk.pixbuf_new_from_data(array, gdk.COLORSPACE_RGB, alpha,
        8, width, height, width * pixel_size)
    image = Image._from_gdk_pixbuf(gdk_pixbuf)
    #image._data = array ###
    return image
