1

このコード:

TTF_Font * titania = TTF_OpenFont( "chintzy.ttf",28);
SDL_Color textColor = {255,255,0};
SDL_Surface * textSurface = TTF_RenderText_Solid(titania,"Its Working!",textColor);
std::cout << (int)textSurface->format->BytesPerPixel;

数字の 1 を出力します。これは、TTF_RenderTextSolid によって返されるサーフェスが 1 ピクセルあたり 1 バイトであることを意味します。私が正しければ、ピクセルあたり 4 バイトである必要があります。なぜこれが起こっているのか誰にも分かりますか?

4

2 に答える 2

2

ドキュメントがそうすべきだと言っていることを正確に行っているように見えます:

個体

8 ビットのパレット化されたサーフェスを作成し、指定されたテキストを指定されたフォントと色で高速にレンダリングします。ピクセル値 0 はカラーキーであり、ブリットすると背景が透明になります。ピクセルおよびカラーマップ値 1 は、テキストの前景色に設定されます。これにより、テキストを再度レンダリングすることなく色を変更できます。パレット インデックス 0 はもちろん、別のサーフェスにブリットされたときに描画されません。これはカラーキーであり、したがって透明であるためです。ただし、実際の色は 255 から前景色の各 RGB コンポーネントを引いたものです。これは、すべてのレンダリング モードの中で最速のレンダリング速度です。これにより、テキストの周りにボックスがなくなりますが、テキストは滑らかではありません。結果のサーフェスは、ブレンドされたサーフェスよりも速くブリットするはずです。このモードは、FPS やその他の急速に変化する更新テキスト表示に使用します。

32bpp が必要な場合は、*_Blended()バリアントを使用する必要があります。

ブレンド

32 ビット ARGB サーフェスを作成し、指定されたテキストを高品質でレンダリングします。アルファ ブレンディングを使用して、指定された色でフォントをディザリングします。これにより、アルファ透明度を持つサーフェスが生成されるため、テキストの周りに塗りつぶされたボックスはありません。テキストはアンチエイリアス処理されています。これは、Solid より遅くレンダリングされますが、Shaded モードとほぼ同じ時間です。結果のサーフェスは、Solid または Shaded を使用した場合よりもゆっくりとブリットします。高品質が必要で、テキストがあまり速く変化しない場合に使用します。

于 2014-06-06T05:03:41.223 に答える
0

自己回答:

TTF_RenderTextSolid() は、偽色のサーフェスを返します。これは、黒と白のようなものですが、白はユーザーが定義した色であり、黒はその色の正反対です (通常は完全に透明です)。SDL_ConvertSurface を使用して通常の曲面に変更できます。

于 2014-06-08T16:12:42.063 に答える