上一頁 | 首頁

SDL_BlitSurface

章節:SDL API 手冊 (3)
更新:2001年9月11日 星期二 23:01
索引
 

名稱

SDL_BlitSurface - 它會執行從源平面到目標平面的快速圖塊傳送。  

摘要

#include "SDL.h"

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);  

描述

它會執行從源平面到目標平面的快速圖塊傳送。

僅僅使用dstrect的位置成員(寬度和高度成員被忽略)。

若srcrect或dstrect為NULL,則整個平面(src或dst)都被復制。

所有的裁剪都被執行後,最終傳送的矩形圖塊將被保存于dstrect。

不應在已鎖定的平面上調用圖塊傳送函數。

圖塊傳送操作的結果很大程度上依賴于是否設置SDL_SRCALPHA。參考SDL_SetAlpha以取得這會如何影響你的結果的解析。平面圖塊傳送時,色鍵和alpha亦相互影響,如下的偽代碼應該會有助于解釋:

if (源平面已經設置SDL_SRCALPHA) {
    if (源平面存在alpha通道(即format->Amask != 0))
        圖塊傳送使用基于像素的alpha,而忽略任何色鍵
    else {
        if (源平面已經設置SDL_SRCCOLORKEY)
            圖塊傳送使用色鍵 & 基于像素的alpha值
        else
            圖塊傳送使用基于平面的alpha值
    }
} else {
    if (源平面已經設置SDL_SRCCOLORKEY)
        圖塊傳送使用色鍵
    else
        普通的不通明矩形圖塊傳送
}

 

返回值

若圖塊傳送成功,則返回0;否則,返回-1。

若兩個平面都存在于顯存,且圖塊傳送返回-2,則其在顯存中的內容會丟失。因此,應該巧妙地重載它,並重新傳送:

        while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) {
                while ( SDL_LockSurface(image)) < 0 )
                        Sleep(10);
                -- 向image->pixels寫入白色像素 --
                SDL_UnlockSurface(image);
        }

這會在使用DirectX 5.0且系統換出你的全屏應用程序時發生。鎖定系統亦會失敗,直至你再次訪問顯存。  

另見

SDL_LockSurface、SDL_FillRect、SDL_Surface、SDL_Rect  

譯者

石仔<guoshimin57@gmail.com>  

中文版主頁

http://guoshimin.users.sf.net  

中文版最後更新時間

2010年2月16日


 

索引

名稱
摘要
描述
返回值
另見
譯者
中文版主頁
中文版最後更新時間