#include "SDL.h"
int SDL_SetPalette(SDL_Surface *surface, int flags, SDL_Color *colors, int firstcolor, int ncolors);
為給定的8位平面設置一份調色板。
含有SDL_HWPALETTE標記的調色板化(8位)屏幕平面有兩種調色板,一種是用于映射圖塊傳送至平面或從平面傳送圖塊出去的邏輯調色板,另一種是物理調色板(決定硬件如何將顏色映射至顯示)。當傳送平面時(若平面必須轉換像素格式),SDL_BlitSurface總是使用邏輯調色板。因此,僅僅修改其中一個調色板來達到各種特定顏色效果(例如:屏幕逐漸消失、顏色閃爍、屏幕逐漸變暗)是有益的。
此函數可通過將flags參數指定為SDL_LOGPAL或SDL_PHYSPAL來修改邏輯調色板或物理調色板。
當surface為當前顯示平面時,將以所請求的顏色來更新顯示顏色分配表。若已在SDL_SetVideoMode的標記中設置了SDL_HWPALETTE,則SDL_SetPalette總是返回1,並且即使窗口的顏色分配表必須被扭曲或者以仿真的方式運行,調色板也一定會設置成你之所求。
SDL_Color結構體的顏色分量的大小為8位,總共可提供256^3=16777216種顏色。
若surface並不是一個調色板化的平面,則此函數什麼也不做,並返回0。若所有顏色都已傳送給SDL_SetPalette設置好,則會返回1。 若非所有的顏色都正確地按要求設定,則會返回0,並且你應該通過查看平面調色板來確定實際的調色板。
/* 以灰色調色板創建顯示平面 */ SDL_Surface *screen; SDL_Color colors[256]; int i; . . . /* 以顏色信息來填充顏色 */ for(i=0;i<256;i++){ colors[i].r=i; colors[i].g=i; colors[i].b=i; } /* 創建顯示平面 */ screen=SDL_SetVideoMode(640, 480, 8, SDL_HWPALETTE); if(!screen){ printf("不能設置該視頻模式:%s", SDL_GetError()); exit(-1); } /* 設置調色板 */ SDL_SetPalette(screen, SDL_LOGPAL|SDL_PHYSPAL, colors, 0, 256); . . . .
SDL_SetColors、SDL_SetVideoMode、SDL_Surface、SDL_Color
參數解析
2010年2月20日