2013-03-28 1 views
2

Моя цель - удвоить размер изображения, а затем изменить левую половину в оттенки серого, затем изменить зеленое значение верхней правой половины и синее значение нижней правой половины. У меня есть значения, которые я нашел в своем учебнике для оттенков серого, но я не уверен, что это то, что я действительно использую. И я уверен, если я программа каждого из этих различных значений, используя для петель или просто что-то другоеКак изменить цвета изображений с помощью программирования JES?

Пока мой код:

def crazyPic(newGreen,newBlue,pic,file): 
     show(pic) 
     newPic = makeEmptyPicture(getWidth(pic)*2,getHeight((pic)*2 
      for x in range(width): 
       for y in range(height): 
        for px in getPixel(pic,0,100): 
        nRed = getRed(px) * 0.299 
        nGreen = getGreen(px) * 0.587 
        nBlue = getBlue(px) * 0.114 
        luminance = nRed + nGreen + nBlue 
        setColor(px,makeColor(luminance,luminance,luminance) 

ответ

0

Я не должен давать полные ответы, JES это приложение предназначено для студентов, но я думаю, что через три месяца можно дать полный рабочий образец, который может быть использован в качестве эталона для других ...

Это должно быть близко к тому, что вы пытались сделать:

Примечание: ваш подход простой двойной петли над x и y был правильным.

def crazyPic(pic, newRed, newGreen, newBlue): 

    w = getWidth(pic) 
    h = getHeight(pic) 
    new_w = w * 2 
    new_h = h * 2 
    newPic = makeEmptyPicture(w * 2, h * 2) 

    for x in range(new_w): 
     for y in range(new_h): 
      new_px = getPixel(newPic, x, y) 

      # Top-left: B&W 
      if (x < w) and (y < h): 
      px = getPixel(pic, x, y) 
      nRed = getRed(px) * newRed #0.299 
      nGreen = getGreen(px) * newGreen #0.587 
      nBlue = getBlue(px) * newBlue #0.114 
      luminance = nRed + nGreen + nBlue 
      new_col = makeColor(luminance, luminance, luminance) 

      # Top-right 
      elif (y < h): 
      px = getPixel(pic, x - w, y) 
      nRed = getRed(px) * newRed 
      new_col = makeColor(nRed, getGreen(px), getBlue(px)) 

      # Bottom-left 
      elif (x < w): 
      px = getPixel(pic, x, y - h) 
      nGreen = getGreen(px) * newGreen 
      new_col = makeColor(getGreen(px), nGreen, getBlue(px)) 

      # Bottom-right 
      else: 
      px = getPixel(pic, x - w, y - h) 
      nBlue = getBlue(px) * newBlue 
      new_col = makeColor(getGreen(px), getBlue(px), nBlue) 

      setColor(new_px, new_col) 

    return newPic 

file = pickAFile() 
picture = makePicture(file) 
#picture = crazyPic(picture, 0.299, 0.587, 0.114) 
# Here, with my favorite r, g, b weights 
picture = crazyPic(picture, 0.21, 0.71, 0.07) 

writePictureTo(picture, "/home/quartered.jpg") 

show(picture) 


Выход (Картина Антонио Tapies):


enter image description here ...... ...... Из enter image description here


Подробнее detailed thread о greyscale.