Skip to main content

Section 18.6 Changing Step 3: Changing which data we use

Below is a selection of images that you can use in the programs in this section.
We can also change which part of the picture we read and manipulate. When we are changing several colors at once we can create a new pixel with the desired color using Pixl(red,green,blue) as shown below on line 20.
What happens if we skip every other x and y as we manipulate the colors? Maybe make the green 255 and the blue 0?
Let's try side-to-side copying.

Checkpoint 18.6.1.

    Q-4: Try it: How would you mirror the image from left-to-right around a vertical line in the middle of the picture? Try changing line 22 to these. If you get it right it will look like the women is nose to nose with herself.
  • img.setPixel(halfway - x, y, newPixel)
  • It does mirror, but only the left half
  • img.setPixel(x - halfway, y, newPixel)
  • This creates two copies of the left half
  • img.setPixel(img.getWidth() - 1 - x, y, newPixel)
  • Yes, it looks like the woman is kissing herself
  • img.setPixel(x - img.getWidth(), y, newPixel)
  • No, no effect.
Figure 18.6.2.

Checkpoint 18.6.3.

Solution.
# USE THE IMAGE LIBRARY
from image import *

# PICK THE IMAGE
img = Image("vangogh.jpg")

# SELECT THE DATA
halfwayWidth = (int) (img.getWidth() / 2)
halfwayHeight = (int) (img.getHeight() / 2)
for x in range(halfwayWidth):
    for y in range(halfwayHeight):

        # GET THE DATA
        p = img.getPixel(x, y)
        r = p.getRed()
        g = p.getGreen()
        b = p.getBlue()

        # CREATE THE COLOR
        newPixel = Pixel(r, g, b)

        # CHANGE THE PIXEL
        img.setPixel(halfwayWidth + x, halfwayHeight + y, newPixel)

# SHOW THE RESULT
win = ImageWin(img.getWidth(),img.getHeight())
img.draw(win)