#include "SDL.h"
int SDL_SetColors(SDL_Surface *surface, SDL_Color *colors, int firstcolor, int ncolors);
為給定的8位平面設置一份顏色分配表。
當surface是當前顯示平面時,將以所請求的顏色來更新顯示顏色分配表。若已在SDL_SetVideoMode的標記中設置了SDL_HWPALETTE,則SDL_SetColors總是返回1,並且即使窗口的顏色分配表必須被扭曲或者以仿真的方式運行,調色板也一定會設置成你之所求。
SDL_Color結構體的顏色分量的大小為8位,總共可提供256^3=16777216種顏色。
含有SDL_HWPALETTE標記的調色板化(8位)屏幕平面有兩種調色板,一種是用于映射圖塊傳送至平面或從平面傳送圖塊出去的邏輯調色板,另一種是物理調色板(決定硬件如何將顏色映射至顯示)。SDL_SetColors同時修改兩種調色板(若有),這等價于將flags設置為(SDL_LOGPAL | SDL_PHYSPAL)之後調用SDL_SetPalette。
若surface並不是一個調色板化的平面,則此函數什麼也不做,並返回0。若所有顏色都已傳送給SDL_SetColors設置好,則會返回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_SetColors(screen, colors, 0, 256); . . . .
SDL_Color、SDL_Surface、SDL_SetPalette、SDL_SetVideoMode
參數解析
2010年2月20日