6

この機能の考え方は、画像の上半分だけをフェード(徐々に暗く)することです。これが私が持っているものですが、上半分がすべて真っ黒になっているようです。

def fadeDownFromBlack(pic1):

w=getWidth(pic1)
h=getHeight(pic1)

for y in range(0,h/2):
     for x in range(0,w):
        px=getPixel(pic1,x,y) 
        setBlue(px,y*(2.0/h)) 
        setRed(px,y*(2.0/h)) 
        setGreen(px,y*(2.0/h))
4

4 に答える 4

4

ピクセルを暗くするには、赤、緑、青のレベルに適切な分数を掛けます。

何をしているの:

setBlue(px,y*(2.0/h))

あなたがするように言われていること:

setBlue(px,y*(2.0/h) * getBlue(px))
于 2010-02-11T00:19:44.053 に答える
3

ここで 1 行だけ見てみましょう。

setBlue(px,y*(2.0/h))

ここで重要な部分は

y*(2.0/h)

y は下に行くにつれて変化します。y と h の単純な値をいくつか試してみましょう。h が 100 で、y が 0 と 50 (h/2) の両方である場合を調べます。y = 0 の場合、0 を取得します。y = 50 の場合、1 を取得します。色の値の範囲が 256 で、0 が最も暗い場合、これが黒であることは不思議ではありません。あなたが持っているのは 0. から 1. までの値の範囲ですが、その数値を古い色の値で掛けることが必要だと思います。

あなたが望むものは:

setBlue(px,y*(2.0/h)*getBlue(px))

他の色についても同様です。

于 2010-02-11T00:16:23.470 に答える
2

setBlue/Red/Green メソッドのスケールを調べます。0 が黒に相​​当すると思いますが、最も明るいのはどれですか? 1 だと思っているようですが、実際には 255 か何かかもしれません。1 であっても、このコードはピクセルの古い値を考慮していないように見えます。垂直位置に基づいて正確な色に設定しているだけです。多分それはあなたが望んでいることですが、私はそれを疑っています。おそらく、代わりにピクセルの現在の値に何かを掛けたいと思うでしょう。

于 2010-02-10T23:20:44.050 に答える
2

強化されたバージョンを共有し、いくつかのビジュアルを追加するだけです (ビジュアルが優れているため)...

# 'divisor' : How much we expand the gradient (less is more)
# 'switch' : If True, start gradient from bottom to top
def fadeDownFromBlack(pic, divisor, switch=False):  

   w = getWidth(pic)
   h = getHeight(pic)


   startY = 0
   endY = min(h-1, int(h/float(divisor)))
   inc = 1

   if (switch):
     startY = h-1
     endY = max(0, h-1 - int(h/float(divisor)))
     inc = -1

   color_ratio = float(divisor)/h

   for y in range(startY, endY, inc): 
       for x in range(0,w):
           px = getPixel(pic, x, y )
           setRed(px, abs(startY - y)*(color_ratio)*getRed(px))
           setGreen(px, abs(startY - y)*(color_ratio)*getGreen(px))
           setBlue(px, abs(startY - y)*(color_ratio)*getBlue(px))


file = pickAFile()
picture = makePicture(file)
# The following commented line answers the question
#fadeDownFromBlack(picture, 2)
fadeDownFromBlack(picture, 0.7, True)

writePictureTo(picture, "/home/mad-king.png")

show(picture)


出力 ( Corneliu Baba - The Mad Kingによる絵画):


…………………………………… ここに画像の説明を入力_ ここに画像の説明を入力_


于 2013-06-29T09:53:00.223 に答える