#! /usr/bin/env python
'''Image/Video utilities'''

import Image, ImageDraw # PIL
import aggdraw # agg on top of PIL (antialiased drawing)
from moving import Point
#import utils

__metaclass__ = type

def drawLines(filename, origins, destinations, w = 1, resultFilename='image.png'):
    '''Draws lines over the image '''
    
    img = Image.open(filename)

    draw = ImageDraw.Draw(img)
    #draw = aggdraw.Draw(img)
    #pen = aggdraw.Pen("red", width)
    for p1, p2 in zip(origins, destinations):
        draw.line([p1.x, p1.y, p2.x, p2.y], width = w, fill = (256,0,0))
        #draw.line([p1.x, p1.y, p2.x, p2.y], pen)
    del draw 

    #out = utils.openCheck(resultFilename)
    img.save(resultFilename)

def project(homography, p):
    '''Returns the coordinates of the projection of the point p
    through homography'''
    from numpy.core._dotblas import dot
    from numpy.core.multiarray import array
    from numpy.lib.function_base import insert
    if (homography!=None) and (len(homography)>0):
        pAugmented = insert(array(p.aslist()), [2],[1], axis=0)
        tmp = dot(homography, pAugmented)
        return Point(tmp[0]/tmp[2], tmp[1]/tmp[2])
    else:
        return p

def projectTrajectory(homography, trajectory):
    '''Projects a series of points in the format
    [[x1, x2, ...],
    [y1, y2, ...]]

    Warning: not optimized, calls project()'''
    projected = [[],[]]
    for x, y in zip(trajectory[0], trajectory[1]):
        p = [x,y]
        pp = project(homography, p)
        projected[0].append(pp[0])
        projected[1].append(pp[1])
    return projected

