1

Python

このコードを操作して、左から右に向かって黒から赤にフェードする画像を作成するにはどうすればよいですか。左が黒になり、右に行くと赤にフェードします。

def main():
    f = open("testImage.ppm","w")
    f.write("P3 \n")
    width=256
    height=256
    f.write("%d %d \n"%(width,height))
    f.write("255 \n")
    for i in range(width*height):
        x=i%256
        y=i/256
        f.write("255, 0, 0 \n")
    f.close()

main()
4

3 に答える 3

1

フェードを左から右に黒から赤にしたいので、画像の各行は同一であり、一度作成して何度も使用する必要があります。PPM画像ファイルの各データ行は次のようになります。ここで、値の各トリオはRGBトリプレットに対応します。

0 0 0 1 0 0 2 0 0 3 0 0 4 0 0 5 . . . 251 0 0 252 0 0 253 0 0 254 0 0 255 0 0

これを行うコードの修正バージョンは次のとおりです。

def main():
    with open("testImage.ppm", "wb") as f:
        f.write("P3\n")
        width = 256
        height = 256
        f.write("%d %d\n"%(width,height))
        f.write("255\n")
        delta_red = 256./width
        row = ' '.join('{} {} {}'.format(int(i*delta_red), 0, 0)
                                         for i in xrange(width)) + '\n'
        for _ in xrange(height):
            f.write(row)

main()

実際の結果は次のとおりです(このサイトでは.png形式に変換されています)。

変更されたコードによって作成された黒から赤の画像

于 2013-02-25T00:14:39.173 に答える
1

あなたのループでは、常に書いています255, 0, 0。赤、緑、青のトリプレットです。ループの上の書き込みは255、最大値が 255 であることを指定します。画像の幅は 256 ピクセルです。[0, 255] の範囲には 256 個の値があります。したがって、赤の成分が X 値であることを推測するのはかなり簡単です。コードを次のように変更できます。

f.write("%d, 0, 0 \n" % x)
于 2013-02-24T23:09:53.513 に答える
0

もうすぐそこにいますが、すべてのピクセルを通過するループに赤い計算を入れる必要があります。あなたは常に(255,0,0)を書いていますが、(x、0,0)を書きたいと思っています。

def main():
    f = open("testImage.ppm","w")
    f.write("P3 \n")
    width=256
    height=256
    f.write("%d %d \n"%(width,height))
    f.write("255 \n")
    for i in range(width*height):
        x=i%256
        y=i/256
        f.write("%s, 0, 0 \n" % x)  #SEE THIS LINE
    f.close()

main()
于 2013-02-25T00:47:43.657 に答える