# From Miller/Ranum chapter 6
# slightly modified by cmc, 11/17/09

from cImage import *

# Listing 6.5
def pixelMapper(oldimage,rgbFunction):

    width = oldimage.getWidth()          
    height = oldimage.getHeight()
    newim = EmptyImage(width,height)     

    for row in range(height):
        for col in range(width):
            originalPixel = oldimage.getPixel(col,row)
            newPixel = rgbFunction(originalPixel)          
            newim.setPixel(col,row,newPixel)
            
    return newim

# Listing 6.6
def generalTransform(imageFile, func):
    oldimage = FileImage(imageFile)
    w = oldimage.getWidth()
    h = oldimage.getHeight()
    myimagewindow = ImageWin("Image Processing",2*w,h)
    oldimage.draw(myimagewindow)
    
    print("\nwait for it ...")
    newimage = pixelMapper(oldimage,func)
    newimage.setPosition(w+1,0)
    newimage.draw(myimagewindow)
    myimagewindow.exitOnClick()

# Listing 6.1
def negativePixel(oldPixel):
    newred = 255 - oldPixel.getRed()
    newgreen = 255 - oldPixel.getGreen()
    newblue = 255 - oldPixel.getBlue()
    newPixel = Pixel(newred, newgreen, newblue)
    return newPixel

# Listing 6.3
def grayPixel(oldpixel):
    intensitySum = oldpixel.getRed() + oldpixel.getGreen() + \
                   oldpixel.getBlue()
    aveRGB = intensitySum // 3

    newPixel = Pixel(aveRGB,aveRGB,aveRGB)
    return newPixel

filename = input("\nenter filename, including .gif suffix: ")
choice = 0
while not 1 <= choice <= 2:
    choice = int( input("enter 1 for negative, or 2 for gray scale: ") )
if choice == 1:
    generalTransform(filename, negativePixel)
else:
    generalTransform(filename, grayPixel)
