private void ShiftBrightness(float brightness) { if (selectedFileName.Length > 0) { for (int i = 0; i < actualBitmap.Width; i++) { for (int j = 0; j < actualBitmap.Height; j++) { var pix = actualBitmap.GetPixel(i, j); var bright = pix.GetBrightness(); if (bright + brightness < 1 && bright + brightness > 0) { var respix = ColorRGB.FromHSLA(pix.GetHue(), pix.GetSaturation(), bright + brightness, pix.A); actualBitmap.SetPixel(i, j, respix); } } } } }
// Given H,S,L,A in range of 0-1 // Returns a Color (RGB struct) in range of 0-255 public static ColorRGB FromHSLA(double H, double S, double L, double A) { double v; double r, g, b; if (A > 1.0) { A = 1.0; } r = L; // default to gray g = L; b = L; v = (L <= 0.5) ? (L * (1.0 + S)) : (L + S - L * S); if (v > 0) { double m; double sv; int sextant; double fract, vsf, mid1, mid2; m = L + L - v; sv = (v - m) / v; H *= 6.0; sextant = (int)H; fract = H - sextant; vsf = v * sv * fract; mid1 = m + vsf; mid2 = v - vsf; switch (sextant) { case 0: r = v; g = mid1; b = m; break; case 1: r = mid2; g = v; b = m; break; case 2: r = m; g = v; b = mid1; break; case 3: r = m; g = mid2; b = v; break; case 4: r = mid1; g = m; b = v; break; case 5: r = v; g = m; b = mid2; break; } } ColorRGB rgb = new ColorRGB { R = Convert.ToByte(r * 255.0f), G = Convert.ToByte(g * 255.0f), B = Convert.ToByte(b * 255.0f), A = Convert.ToByte(A * 255.0f) }; return(rgb); }