Image Range-Loop Problems

            
def double_left(filename):
    image = SimpleImage(filename)
    # style idea: the math is hard enough to follow,
    # it's helpful to introduce a variable like this to name
    # a common value we need (identify mid_x on drawing too).
    mid_x = image.width // 2
    for y in range(image.height):
        for x in range(mid_x):
            pixel = image.get_pixel(x, y)
            pixel_right = image.get_pixel(mid_x + x, y)
            pixel_right.red = pixel.red
            pixel_right.green = pixel.green
            pixel_right.blue = pixel.blue
    return image


def double_left_up(filename):
    image = SimpleImage(filename)
    mid_x = image.width // 2
    for y in range(image.height):
        for x in range(mid_x):
            pixel = image.get_pixel(x, y)
            # the key line:
            pixel_right = image.get_pixel(mid_x + x, image.height - y - 1)
            pixel_right.red = pixel.red
            pixel_right.green = pixel.green
            pixel_right.blue = pixel.blue
    return image


def copies_2(filename):
    image = SimpleImage(filename)
    # Creates a new white image with nothing in it
    out = SimpleImage('', width=image.width * 2, height=image.height)
    mid_x = image.width
    for y in range(image.height):
        for x in range(image.width):
            pixel = image.get_pixel(x, y)
            # left copy
            pixel_left = out.get_pixel(x, y)
            pixel_left.red = pixel.red
            pixel_left.green = pixel.green
            pixel_left.blue = pixel.blue
            # right copy
            pixel_right = out.get_pixel(mid_x + x, y)
            pixel_right.red = pixel.red
            pixel_right.green = pixel.green
            pixel_right.blue = pixel.blue
    return out


def squeeze_width(filename, n):
    image = SimpleImage(filename)
    out = SimpleImage('', width=image.width // n, height=image.height)
    # strategy: iterate x,y over the out pixels, compute
    # scaled * n pixel in original image.
    for y in range(out.height):
        for x in range(out.width):
            pixel_out = out.get_pixel(x, y)
            pixel = image.get_pixel(x * n, y)

            pixel_out.red = pixel.red
            pixel_out.green = pixel.green
            pixel_out.blue = pixel.blue
    return  out
            
        

Image Puzzles

            
def fix1(filename):
    """Fix the fix1 puzzle image."""
    image = SimpleImage(filename)
    for pixel in image:
        pixel.red = pixel.red * 8
        pixel.green = pixel.green * 2
        pixel.blue = pixel.blue  * 4
    return  image


def fix2(filename):
    """Fix the fix2 puzzle image."""
    image = SimpleImage(filename)
    for pixel in image:
        temp = pixel.red
        pixel.red = pixel.green
        pixel.green = temp
    return image


def fix3(filename):
    """Fix the fix3 puzzle image."""
    image = SimpleImage(filename)
    for pixel in image:
        temp = pixel.red
        pixel.red = pixel.blue
        pixel.blue = temp
        pixel.green = pixel.green * 4
    return  image