2011-07-24 11 views
1

黒と白のピクセルでPNGのみを使用するゲームを作成しています。しかし、白いピクセルの色を緑色(#00FF00)のように違うものに変更したいという時があります。SDLのピクセル色を変更する

これを正確に行う方法を教えてください。

EDIT: さて、私は解決策を考え出した。ここ

がそうするための簡単な関数である:心に留めておくべき

 

    void setColor(SDL_Surface *surface, SDL_Color color) { 
     Uint16 *pixels = (Uint16 *) surface->pixels;   // Get the pixels from the Surface 

     // Iterrate through the pixels and chagne the color 
     for (int i = 0; i w * surface->h); i++) { 
      if (pixels[i] == SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF))  // Search for white pixels 
       pixels[i] = SDL_MapRGB(surface->format, color.r, color.b, color.g); 
     } 
    } 

は何か、あれば「Uint32の」へ「のuint16」に変更32ビットサーフェス、または8ビットサーフェスに「Uint8」を使用しています。

このコードの速さはわかりませんが、仕事は終わりです。

+0

[This(http://www.libsdl.org/cgi/docwiki.cgi/Pixel_Access)は、どのように行われ、すべてのビット深度、アルファなどで機能します。 – Valmond

答えて

0

これは、色を設定しようとしているものによって異なります。

これ以上の情報がない場合、すぐに気になるAPIは「SDL_SetColors()」と「SDL_SetPalette()」です。

しかし実際の答えは「それは依存している」です。

+0

私はSDL_SetColors()とSDL_SetPalette()を試しましたが、両方に問題がありました。私は方法を見つけました。 – Benjamin

+0

'SDL_SetPalette()'は8ビットのpalletedサーフェイスでのみ使用できます。 256色までの色しか持たないことが分かっていて、色を素早く切り替えることができれば、それは良い方法かもしれません。しかし、シーンの裏側では、64ビット表示モードで8ビットのpalletedサーフェスを表示するときに、コードに似たようなことが起こりそうです。 –

関連する問題