TSDL_PixelFormat

名字

TSDL_PixelFormat--商店處理格式資訊的表面

結構定義

  TSDL_PixelFormat=記錄
調色盤:PSDL_Palette;
BitsPerPixel:UInt8;
BytesPerPixel:UInt8;
Rloss:UInt8;
光澤:UInt8;
Bloss:UInt8;
Aloss:UInt8;
Rshift:UInt8;
Gshift:UInt8;
Bshift:UInt8;
Ashift:UInt8;
Rmask:UInt32;
Gmask:UInt32;
Bmask:UInt32;
Amask:UInt32;
給上色標:Uint32;//RGB彩色的重要資訊
第一個:Uint8;(根據表面第一個)//第一位的價值資訊
末端;

結構資料

調色盤 指向 調色盤或者的指針如果 BitsPerPixel>8
BitsPerPixel 小塊的數目過去經常代表每一在一表面中映像點.通常8,16,24或者32.
BytesPerPixel 位元組的數目過去經常代表每一在一表面中映像點.通常一比四.
[RGBA]面具 二元面具過去經常找回個人彩色的價值觀
[RGBA]丟失 每一彩色的成分((2[RGBA]丟失)的精確性丟失
[RGBA]輪班 每一彩色的成分的二元左邊映像點價值的改變
給上色標 明顯映像點的映像點價值
第一個 總體說來處理第一位的價值的表面

描繪

SDL_PixelFormat在一 TSDL_Surface映像點 田野描繪儲藏映像點資料的格式.每一個表面在格式 田野中儲藏一 SDL_PixelFormat.

如果你願意做在一表面上映像點冷靜修改,然後懂得SDL怎樣儲藏它的彩色的資訊是重要.

8位映像點格式是最容易懂得.自那以來它的一8位格式化,我們有8 BitsPerPixel和1 BytesPerPixel.自 BytesPerPixel是1以來,所有的映像點被一含有一變為palette.colors 索引的Uint8代表.那樣,決定一在一8位中映像點的顏色浮出水面:我們從surface.pixels中選讀色指數和我們使用那索引從表面中選讀 TSDL_Color結構. format.palette.colors.那樣喜歡:

 
表面:PSDL_Surface;
fmt:PSDL_PixelFormat;
顏色:PSDL_Color;
索引:UInt8;

.
.

//建立表面
.
.
fmt:=surface.format;

//檢查表面的bitdepth
如果(fmt.BitsPerPixel<> 8)那時
開始
WriteLn'不一8位表面'.);
回報((-1);
末端;

//使表面不能動
SDL_LockSurface((表面);

//得到topleft映像點
把:=PUint8((surface.pixels)^編入索引;
彩色的:=fmt.palette.colors[[索引];

//把表面的鎖打開
SDL_UnlockSurface((表面);
WriteLn格式化映像點Color->紅色:%d,Green:%d,Blue:%d.索引:%d[,color.r,color.g,color.b,索引];
.
.

在8位之上映像點格式是一完全不同經驗.認為他們是"TrueColor"格式不是在一塊調色盤中和彩色的資訊他們自己在映像點中被儲藏.面具,輪班和丟失田野告訴我們彩色的資訊怎樣是將編碼.面具田野允許我們隔離每一彩色的成分,輪班田野向每一在映像點價值中成分的權利告訴我們小塊的數目在一映像點中和丟失田野告訴我們當包裝8位彩色的成分的時候,小塊的數目從每一成分輸掉.

從一32位//提煉品彩色的成分給價值*/著色
fmt:PSDL_PixelFormat;
表面:PSDL_Surface;
臨時僱員,映像點:UInt32;
紅色,綠色,藍色,第一個:UInt8;
.
.
.
fmt:=表面>format;
SDL_LockSurface((表面);
映像點:=PUint32((surface.pixels)^;
SDL_UnlockSurface((表面);

//得到紅成分
臨時僱員:=映像點fmt.RMask;//隔離紅成分
臨時僱員:=臨時僱員shr fmt.RShift;//一直到把它轉移到8位
臨時僱員:=臨時僱員shl fmt.RLoss;//擴展到一完整8位號
紅:=UInt8((臨時僱員);

//得到綠色成分
臨時僱員:=映像點fmt.GMask;//隔離綠色成分
臨時僱員:=臨時僱員shr fmt.GShift;//一直到把它轉移到8位
臨時僱員:=臨時僱員shl fmt.GLoss;//擴展到一完整8位號
綠色:=UInt8((臨時僱員);

//得到沮喪成分
臨時僱員:=映像點fmt.BMask;//隔離沮喪成分
臨時僱員:=臨時僱員shr fmt.BShift;//一直到把它轉移到8位
臨時僱員:=臨時僱員shl fmt.BLoss;//擴展到一完整8位號
藍:=UInt8((臨時僱員);

//得到第一位的成分
臨時僱員:=映像點fmt.AMask;//隔離第一位的成分
臨時僱員:=臨時僱員shr fmt.AShift;//一直到把它轉移到8位
臨時僱員:=臨時僱員shl fmt.ALoss;//擴展到一完整8位號
第一位的:=UInt8((臨時僱員);

WriteLn格式化映像點彩色的->R:%d,G:%d,B:%d,A:%d[,紅色,綠色,藍色,第一個];
.
.
.

也注意到

TSDL_Surface ,SDL_MapRGB