CSC111 Lab 7 Solutions 2014

From dftwiki3
Revision as of 11:10, 14 March 2014 by Thiebaut (talk | contribs) (Solution Programs/Functions)
Jump to: navigation, search

--D. Thiebaut (talk) 17:40, 10 March 2014 (EDT)


Solution Programs/Functions

# fog( image ): creates a foggy image with the top line original to the
# original line of pixels, but the bottom line is totally white, and a linear
# gradient in between full color and full white.
def fog( image ):
  for x in range(0,getWidth(image)):
    repaint( image )
    for y in range(0,getHeight(image)):
        pixel = getPixel (image, x, y)
        red   = getRed(pixel)
        green = getGreen(pixel)
        blue  = getBlue(pixel)
   
        fogFactor = 1.0 * y / getHeight( image )
        red   = red + int( (255-red) * fogFactor )
        green = green + int( (255-green) * fogFactor )
        blue  = blue + int( (255-blue) * fogFactor )

        newColor = makeColor( red, green, blue )
        setColor( pixel, newColor )
        
  return image  
      
# addRedSquare(): puts a red square with top-left corner (109, 117) and
# bottom-right corner (136, 139) 
def addRedSquare( image ):
  for x in range( 109, 136 ):
    for y in range(117, 139):
        pixel = getPixel (image, x, y)
        newColor = makeColor( 255, 0, 0 )
        setColor( pixel, newColor )

  return image
          
# mirrorLeft( image ): takes the left side of the image and mirrors it to the right
def mirrorLeft( image ):
  for x in range(0,getWidth(image)/2):
    repaint( image )
    for y in range(0,getHeight(image)):
        pixel = getPixel (image, x, y)
        red   = getRed(pixel)
        green = getGreen(pixel)
        blue  = getBlue(pixel)  
        newColor = makeColor( red, green, blue )
        setColor( pixel, newColor )
        pixel = getPixel( image, getWidth(image)-x-1, y )
        setColor( pixel, newColor )
        
  return image

# sweep( image ): demo showing the progress of the sweep transforming the pixels
# through the image.
def sweep( image ):
  for x in range(0,getWidth(image)):
    repaint( image )
    for y in range(0,getHeight(image)):
        pixel = getPixel (image, x, y)
        red   = getRed(pixel)
        green = getGreen(pixel)
        blue  = getBlue(pixel)
  
        # the line below replaces the pixel with its original color.  Change
        # the amount of red, green and blue to see some change in the colors
        if red < 125:
           red = green = blue = 0
        else:
           red = 255
        newColor = makeColor( red, green, blue )
        setColor( pixel, newColor )
  return image

# saturate(): transforms component into min or max value
# depending on its intensity.
def saturate( component ):
        if component < 125:
           component = 0
        else:
           component = 255
        return component


# AndyWarhol( image ): saturates the image by saturating the 
# RGB components.  If the R component is less than 125, then
# set it to 0, otherwise set it to 255.   Same for blue and green.
def AndyWarhol( image ):
  for x in range(0,getWidth(image)):
    repaint( image )
    for y in range(0,getHeight(image)):
        pixel = getPixel (image, x, y)
        red   = getRed(pixel)
        green = getGreen(pixel)
        blue  = getBlue(pixel)
  
        # the line below replaces the pixel with its original color.  Change
        # the amount of red, green and blue to see some change in the colors

        newColor = makeColor( saturate(red), saturate(green), saturate(blue) )
        setColor( pixel, newColor )
  return image

# makeBlackAndWhite( image ).
# Changes the amount of red, green and blue that is in an image to make it grey
def makeBlackAndWhite( image ):
  for x in range(0,getWidth(image)):
    for y in range(0,getHeight(image)):
        pixel = getPixel (image, x, y)
        red   = getRed(pixel)
        green = getGreen(pixel)
        blue  = getBlue(pixel)

        #simplest way to create grey
        #grey  = (red + green + blue) //3 

        # best way to create grey
        grey  = int( 0.3 * red +0.6 * green +0.11 * blue )

        newColor = makeColor(grey, grey, grey )
        setColor( pixel, newColor )
  return image

# addBorder( image, borderWidth )
# adds a border around the image.  BorderWidth defines the width of the
# border, in pixels.
def addBorder( image, borderWidth ):
  for y in range( 0, borderWidth ):
    for x in range( 0, getWidth(image) ):
       pixel = getPixel( image, x, y )
       newColor = makeColor( 102, 0, 255 ) # purple
       setColor( pixel, newColor )

  for y in range( getHeight(image)-borderWidth, getHeight( image) ):
    for x in range( 0, getWidth(image) ):
       pixel = getPixel( image, x, y )
       newColor = makeColor( 102, 0, 255 ) # purple
       setColor( pixel, newColor )

  for y in range( 0, getHeight( image ) ):
    for x in range( getWidth( image )-borderWidth, getWidth(image) ):
       pixel = getPixel( image, x, y )
       newColor = makeColor( 102, 0, 255 ) # purple
       setColor( pixel, newColor )

  for y in range( 0, getHeight( image) ):
    for x in range( 0, borderWidth ):
       pixel = getPixel( image, x, y )
       newColor = makeColor( 102, 0, 255 ) # purple
       setColor( pixel, newColor )

  return image

# given the coordinates of the top-left, bottom-right points defining
# two rectangles around the eyes, find very red pixels and make their
# red component 0.
def fixRedEyes( image, x1, y1, x2, y2, x3, y3, x4, y4 ):
   for x in range( x1, x2 ):
      for y in range( y1, y2 ):
         pixel = getPixel (image, x, y)
         red   = getRed(pixel)
         green = getGreen(pixel)
         blue  = getBlue(pixel)
         newColor = makeColor( 0, green, blue )
         setColor( pixel, newColor )

   for x in range( x3, x4 ):
      for y in range( y3, y4 ):
         pixel = getPixel (image, x, y)
         red   = getRed(pixel)
         green = getGreen(pixel)
         blue  = getBlue(pixel)
         newColor = makeColor( 0, green, blue )
         setColor( pixel, newColor )
   return image

# this is how this function is called for the little boy:
image = fixRedEyes( image, 137,221,156,239,  247,235,262,255 )