#include #include DECLARE_HANDLE(HDIB); HDIB WINAPI GammaDIB(HDIB hDIB, double dftGamma /*=1.8*/) { ... double dftInvGamma = 1.0 / dftGamma; ... // Bei RGB-DIB's (24bpp): for (uY = 0; uY < uHeight; uY++) { // Zeilenschleife for (uX = 0; uX < uWidth; uX++) { // Spaltenschleife *lpDIBDest++ = (BYTE)((255.0 * pow((double)*lpDIBSrc / 255.0, dftInvGamma)) + 0.5); lpDIBSrc++; *lpDIBDest++ = (BYTE)((255.0 * pow((double)*lpDIBSrc / 255.0, dftInvGamma)) + 0.5); lpDIBSrc++; *lpDIBDest++ = (BYTE)((255.0 * pow((double)*lpDIBSrc / 255.0, dftInvGamma)) + 0.5); lpDIBSrc++; } // Ausrichtung auf Doppelwortgrenze } ... // Bei indizierten DIB's: for (uColor = 0; uColor < uNumColors; uColor++) { lpBMIDest->bmiColors[uColor].rgbRed = (BYTE)((255.0 * pow((double)(lpBMIDest->bmiColors[uColor].rgbRed) / 255.0, dftInvGamma)) + 0.5); lpBMIDest->bmiColors[uColor].rgbGreen = (BYTE)((255.0 * pow((double)(lpBMIDest->bmiColors[uColor].rgbGreen) / 255.0, dftInvGamma)) + 0.5); lpBMIDest->bmiColors[uColor].rgbBlue = (BYTE)((255.0 * pow((double)(lpBMIDest->bmiColors[uColor].rgbBlue) / 255.0, dftInvGamma)) + 0.5); } ... }