/// <summary> /// Applies this LightnessFilter to a Bitmap /// </summary> /// <param name="bitmap">The bitmap to apply this LightnessFilter to</param> public unsafe void ApplyToBitmap(Bitmap bitmap) { // // !!! ATENTION: UNSAFE POINTER HANDLING !!! // !!! WATCH IT WHEN MESSING WITH THIS METHOD !!! // if (!Modifying || bitmap.PixelFormat != PixelFormat.Format32bppArgb) { return; } // Lock the bitmap BitmapData data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); int *scan0 = (int *)data.Scan0; int count = bitmap.Width * bitmap.Height; float lightF = Lightness / 100.0f; while (count-- > 0) { AhslColor ahsl = AhslColor.FromArgb(*scan0); float l; if (Multiply) { l = ahsl.Lf * lightF; } else { l = (Relative ? ahsl.Lf + lightF : lightF); } *(scan0++) = new AhslColor(ahsl.Af, ahsl.Hf, ahsl.Sf, l).ToArgb(); } bitmap.UnlockBits(data); }
/// <summary> /// Gets a color with the current active component set to be of the given value /// </summary> /// <param name="componentValue">The component value, ranging from [0 - 1]</param> /// <returns>A color with the current active component set to be of the given value</returns> protected Color GetColorWithActiveComponentSet(float componentValue) { AhslColor retColor = activeColor; switch (ColorComponent) { // Global alpha channel case ColorSliderComponent.Alpha: retColor = new AhslColor(componentValue, retColor.Hf, retColor.Sf, retColor.Lf); break; // RGB case ColorSliderComponent.Red: retColor = AhslColor.FromArgb(retColor.Af, componentValue, retColor.Gf, retColor.Bf); break; case ColorSliderComponent.Green: retColor = AhslColor.FromArgb(retColor.Af, retColor.Rf, componentValue, retColor.Bf); break; case ColorSliderComponent.Blue: retColor = AhslColor.FromArgb(retColor.Af, retColor.Rf, retColor.Gf, componentValue); break; // HSL case ColorSliderComponent.Hue: retColor = new AhslColor(retColor.Af, componentValue, retColor.Sf, retColor.Lf); break; case ColorSliderComponent.Saturation: retColor = new AhslColor(retColor.Af, retColor.Hf, componentValue, retColor.Lf); break; case ColorSliderComponent.Lightness: retColor = new AhslColor(retColor.Af, retColor.Hf, retColor.Sf, componentValue); break; } if (IgnoreActiveColorAlpha()) { retColor = new AhslColor(1.0f, retColor.Hf, retColor.Sf, retColor.Lf); } /*switch (ColorComponent) * { * // Global alpha channel * case ColorSliderComponent.Alpha: * retColor.Af = componentValue; * break; * * // RGB * case ColorSliderComponent.Red: * retColor = AhslColor.FromArgb(retColor.Af, componentValue, retColor.Gf, retColor.Bf); * break; * case ColorSliderComponent.Green: * retColor = AhslColor.FromArgb(retColor.Af, retColor.Rf, componentValue, retColor.Bf); * break; * case ColorSliderComponent.Blue: * retColor = AhslColor.FromArgb(retColor.Af, retColor.Rf, retColor.Gf, componentValue); * break; * * // HSL * case ColorSliderComponent.Hue: * retColor.Hf = componentValue; * break; * case ColorSliderComponent.Saturation: * retColor.Sf = componentValue; * break; * case ColorSliderComponent.Lightness: * retColor.Lf = componentValue; * break; * } * * if (IgnoreActiveColorAlpha()) * { * retColor.Af = 1.0f; * }*/ return(retColor.ToColor()); }
/// <summary> /// Initializes a new instance of the ColorChangedEventArgs class /// </summary> /// <param name="oldColor">The original color before the component was updated</param> /// <param name="newColor">The new color after the component was updated</param> /// <param name="componentChanged">The color component that was modified</param> public ColorChangedEventArgs(AhslColor oldColor, AhslColor newColor, ColorSliderComponent componentChanged) { OldColor = oldColor; NewColor = newColor; ComponentChanged = componentChanged; }