SitemapInfoHomeTips und Tricks - Gammakorrektur

Homepage

Software,
Download

Software-
entwicklung

  Tips und Tricks

Nachrichten-
technik

Internet

Aktuelles,
Sonstiges

Infos,
Kontakt

Sitemap


Um bei einem Rasterbild eine Gammakorrektur vorzunehmen, kopieren Sie einfach die DIB und führen dabei folgende Farbmanipulation durch:

y = 255 * (x / 255) ^ (1 / gamma)

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 (UINT 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);
   }
   ...
}

[ gammadib.cpp ]

[ << Vorheriger ] [ Übersicht ] [ Nächster >> ]

TopHomepage » Softwareentwicklung » Tips und Tricks » Gammakorrektur