2

を呼び出すとmyIndexedSurface.get_palette()、32 ビット RGBA 値のリストが返されます。アルファ値が含まれているため、透明効果を伴うパレット インデックスを設定して使用することもできるのではないかと考えました。これらのサーフェスは、フル深度 (32 ビット) のピクセル データを持つサーフェスよりも効率的にオーバーレイまたはマスクとしてブリットできます。

ただし、これまでのところ、パレット要素のアルファ値はロックされているようで255、私が試した方法では変更されません。

  • .set_palette_at(idx, (r,g,b,A))rg、および を正しく設定しますが、 の値bに関係なく、アルファ値を 255 のままにしAます。

  • .set_palette(somePalette)RGBAタプル要素に 255 以外のアルファ値があるValueError: takes an alpha value of 255場合に発生します。somePalette

私がやろうとしていることは可能ですか?各パレットリスト要素のアルファ値は純粋に装飾的なもので、24 (RGB) ではなく 32 ビット (RGBA) ピクセルデータを期待する他のプロセスでより簡単に使用できるのでしょうか?

Pygame のインデックス付きサーフェスは、そもそもこの程度の複雑さを処理する機能を備えていない可能性があるように感じますが、そうすべきではない理由を考えたり見つけたりすることもできませ。おそらく、Pygame にはspecial_flagsこの目的のために神秘的なものが 1 つありますか?

Surface 自体を初期化しようmyIndexedSurface = pygame.Surface(surfSize).convert(8)myIndexedSurface = pygame.Surface(surfSize, flags=pygame.SRCALPHA).convert(8)しましたが、効果がありませんでした。

私はまだPILまたはPygame のPixelArray解決策を見ていません。

4

1 に答える 1

1

あなたが自分で見たように、そうではありません。あなたが説明するのは、一種の新しく発明されたアプローチです。4 つの値があるのは、pyGame で色の値やその他のプロパティについて宣言されているからです。たとえば、これを試してみると

S = pygame.Surface ((w,h),0,24)
r,g,b,a =S.get_masks()

4 つの値のタプルが表示されますが、24 ビット サーフェスでは明らかに 3 バイトしか処理できないため、さらにブリッティングしてもアルファは機能しません。数値配列のように、バックエンドのデータが元々インデックス化されている場合、マスク配列を使用して、バックエンドでも結合ロジックを個人的に説明します。

于 2015-02-18T16:03:11.290 に答える