用API调整Gamma值

来源:互联网 发布:中国地质图书馆网络 编辑:程序博客网 时间:2024/05/31 13:16

     前2天老许和我抱怨wow运行起来太暗,我也一直觉得不太适应,就建议他提高下屏幕的Gamma,他嫌换了以后其他窗口又太亮。本来我一直以为Gamma值的调整涉及到驱动,今天早上在看资料的时候看到原来有API,函数原形如下:

BOOL WINAPI GetDeviceGammaRamp(
  HDC
hDC,
  LPVOID lpRamp
); 

BOOL WINAPI SetDeviceGammaRamp(  HDC hDC,  LPVOID lpRamp);
其中lpRamp指向的是一个3x256的WORD型数组,内部存放的是需要Gamma校正的梯度,范例如下:
 void * lpGamma = NULL;
 WORD gMap[3][256] = {0};
 lpGamma = &gMap;
 HDC hdc = ::GetDC(NULL);
 ::GetDeviceGammaRamp(hdc, lpGamma); //得到当前Gamma

 for (INT i = 0; i < 256; i++)
 {
  gMap[0][i] = 256*i;
        gMap[1][i] = 256*i;
        gMap[2][i] = 256*i;
 }
 ::SetDeviceGammaRamp(hdc, lpGamma); //设为标准Gamma
 
Gamma校正的应用还是比较广的,除了前面提到的亮度调整以外,很多游戏的特效也是如此,比如回忆镜头中的快照回放连接,主角失去意识后屏幕的渐暗效果等。其校正原理可以参见(http://blog.csdn.net/Jaredz/archive/2006/06/28/847173.aspx)
原创粉丝点击