0

Pythonのpygameライブラリを使用してpngファイルをピクセルごとに編集しようとしています。基本的なプロセスは次のとおりです。pngをロードし、すべてのピクセルをループします。ループは、現在のピクセルのrgb値を、事前定義されたrgb値のセット(必要に応じてパレット)に最も近いユークリッド距離の一致を見つける関数に渡します。次に、surface.set_at()関数を使用して、マッチング関数によって返されるピクセルの色に変更します。

なぜ結果が私が期待するものではないのかを判断するのに苦労してきました。やがて私はこれに気づきました。

>>> image.set_at((0,0),(160, 130, 95, 255))
>>> image.get_at((0,0))
(152, 128, 96, 255)

set_at()関数が、渡された色に対してある種の丸めを行うことは明らかです。これは私にとって問題なので、2つの質問があります。

1)set_at()関数がこの変更を行うのはなぜですか?

2)これを回避し、rgb値を希望する値に明示的に設定するにはどうすればよいですか?

皆さんありがとう。

4

1 に答える 1

1

免責事項、これは実際の経験ではなく、ドキュメントを読むことに基づいています。

http://www.pygame.org/docs/ref/image.html#pygame.image.loadから

返された Surface には、元のファイルと同じカラー フォーマット、カラーキー、およびアルファ透明度が含まれます。多くの場合、Surface.convert を呼び出します。引数なしで画像のピクセル フォーマットを変更し、画面上でより高速に描画されるコピーを作成します。

おそらく、コードの前にこのようなことを試してください...

converted_image = image.convert_alpha()
于 2012-12-09T20:57:20.610 に答える