首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

運用 DirectDraw Gamma 控制實現淡入淡出特效

     編輯:VC 教學

使用 DirectDraw Gamma Ramp 實現螢幕淡出有兩大優勢:程式碼簡潔,且不會損壞主介面上的像素資料(僅調整顯示卡輸出)。

前置條件

  • 主介面必須為 16 位元色或更高。
  • 效果僅作用於主介面(調整顯示卡 Gamma 設定)。

核心結構與流程

DDGAMMARAMP 包含三個 256 元素的 WORD 陣列(Red/Green/Blue),對應 256 灰階的 Gamma 曲線。

// 宣告介面與結構
LPDIRECTDRAWGAMMACONTROL lpDDGammaControl = NULL;
DDGAMMARAMP DDGammaRamp, DDGammaOld;

// 取得 Gamma 控制介面
lpddsPrimary->QueryInterface(IID_IDirectDrawGammaControl, (void**)&lpDDGammaControl);

// 備份原始 Gamma 設定
lpDDGammaControl->GetGammaRamp(0, &DDGammaOld);
lpDDGammaControl->GetGammaRamp(0, &DDGammaRamp); // 取得可修改的副本

淡出實作:將所有色階歸零

為追求速度,直接將 256 階全部設為 0,每階更新一次螢幕:

for (int i = 0; i < 256; i++) {
    if (DDGammaRamp.red[i] > 0) {
        DDGammaRamp.red[i] = 0;
        lpDDGammaControl->SetGammaRamp(0, &DDGammaRamp);
    }
    Sleep(1);
    if (DDGammaRamp.green[i] > 0) {
        DDGammaRamp.green[i] = 0;
        lpDDGammaControl->SetGammaRamp(DDSGR_CALIBRATE, &DDGammaRamp);
    }
    Sleep(1);
    if (DDGammaRamp.blue[i] > 0) {
        DDGammaRamp.blue[i] = 0;
        lpDDGammaControl->SetGammaRamp(DDSGR_CALIBRATE, &DDGammaRamp);
    }
    Sleep(1);
}

還原與延伸應用

淡出結束後呼叫 lpDDGammaControl->SetGammaRamp(0, &DDGammaOld) 還原。同理可修改單一色道實現受擊閃紅、中毒變綠、溺水變藍等效果,或反向操作實現淡入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved