2011-07-24 216 views
1

我正在製作僅使用PNG和黑白像素的遊戲。但有時候我想將白色像素的顏色改成不同的顏色,如綠色(#00FF00)。更改SDL中的像素顏色

我該如何去做這件事?

編輯: 好吧,我想出了一個解決方案

下面是一個簡單的功能,可以這樣做:

 

    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); 
     } 
    } 

東西要記住,改變「標記Uint16」到「UINT32」如果您正在使用32位表面,或者「Uint8」用於8位表面。

我不確定這段代碼有多快,但它完成了工作。

+0

[This](http://www.libsdl.org/cgi/docwiki.cgi/Pixel_Access)是如何完成的,適用於所有位深度,alpha等。 – Valmond

回答

0

這取決於你想要設置的顏色。

如果沒有更多信息,可立即想到的兩個API是「SDL_SetColors()」和「SDL_SetPalette()」。

但真正的答案是「它取決於」。

+0

我試過SDL_SetColors()和SDL_SetPalette(),兩者都有問題。我弄清楚了一種方法。 – Benjamin

+0

'SDL_SetPalette()'僅用於8位托盤表面。如果你知道你只有256種不同的顏色,並且希望能夠快速切換它們,那麼它可能是一個很好的選擇。然而,在你的64位顯示模式下顯示8位托盤表面時,它可能會做類似於你的代碼的操作。 –