Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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());
        }
Exemplo n.º 3
0
 /// <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;
 }