1

コピー/クリップ ブリットされるサーフェスのアルファ チャネルを保持する際に問題が発生しました (サーフェスのセクションを小さなサーフェスにブリッティングする、スプライト シートです)。さまざまな解決策を試しましたが、最終的には、透明であるはずのサーフェスが完全に不透明になります (アルファ マスクが白くなります)。

だから私の質問は、1 つの RGBA SDL_Surface をアルファ チャネルを含む別の新しいサーフェス (RGBA) にどのようにコピーするのですか? また、異なる場合は、RGBA サーフェスのセクションを新しい RGBA サーフェス (ソース サーフェスのクリップされた部分と同じサイズ) にどのようにコピーするのでしょうか。

SDL_BlitSurface はアルファ チャンネルをブレンドしているように見えるので、たとえば、タイルシート サーフェスから新しいサーフェスにタイルをコピーしたい場合 (もちろん空白です。SDL はデフォルトでサーフェスを黒または白で塗りつぶしていると想定しています) 、それはアルファ マスクを失うことになるため、そのタイルが最終的に画面にブリットされたときに、画面上にあるものとブレンドされません。

SDL_DisplayFormatAlpha は、アルファ マスクを使用してサーフェスをコピーするのに最適ですが、クリップ パラメータを使用しません。サーフェスの一部ではなく、サーフェス全体をコピーすることだけを目的としているため、私の問題です。

4

2 に答える 2

0

私は以前にこの問題を抱えていましたが、まだ正式な回答には至っていません。ただし、それを行う唯一の方法は、独自のコピー関数を作成することだと思います。 http://www.libsdl.org/docs/html/sdlpixelformat.html このページは、SDL_Surface が色情報を保存する方法を理解するのに役立ちます。8 ビットより上と下の色には大きな違いがあることに注意してください。

于 2012-09-05T01:55:08.080 に答える