private void GenerateDropParticles(List <Tuple <BCPoint, NominoElement> > StartCoordinates, List <Tuple <BCPoint, NominoElement> > EndCoordinates)
 {
     for (int index = 0; index < StartCoordinates.Count; index++)
     {
         var    Original    = StartCoordinates[index];
         var    Drop        = EndCoordinates[index];
         Bitmap ColorSource = null;
         if (Original.Item2.Block is ImageBlock)
         {
             var casted    = (Original.Item2.Block as ImageBlock);
             var ImageBase = casted._RotationImages[MathHelper.mod(casted.Rotation, casted._RotationImages.Length)];
             ColorSource = new Bitmap(ImageBase);
         }
         for (float y = Original.Item1.Y; y < Drop.Item1.Y - 1; y++)
         {
             GenerateDropParticles(new BCPoint(Original.Item1.X, y), 30, () => new BCPoint(0f, (float)((rgen.NextDouble() * 0.2f) + 0.4f)),
                                   (xget, yget) => {
                 var xposget   = xget * ColorSource.Width;
                 var yposget   = yget * ColorSource.Height;
                 var grabcolor = ColorSource.GetPixel((int)xposget, (int)yposget);
                 return(grabcolor);
             });
         }
     }
 }
        internal override NativeElement ToNative(NativeElement element)
        {
            var native = EnsureDerived <NativeTextBlock>(element);

            if (native == null)
            {
#if __ANDROID__
                native = new NativeTextBlock(Rect.ToNative(), Font.ToNative(), Baseline);
#elif __IOS__
                native          = new NativeTextBlock(Rect.ToNative(), Font.ToNative());
                native.Baseline = (ushort)Baseline;
#elif WINDOWS_PHONE_APP
                native          = new NativeTextBlock();
                native.Font     = Font.ToNative();
                native.Baseline = Baseline;
#endif
            }
            native.AutoWidth         = AutoWidth;
            native.BaselineAlignment = BaselineAlignment.ToNative();
            if (Color != BandColor.Empty)
            {
                native.Color = Color.ToNative();
            }
            native.ColorSource = ColorSource.ToNative();
            return(base.ToNative(native));
        }
Пример #3
0
        public void Next_Returns_A_Color()
        {
            ColorSource source = new ColorSource();
            var         value  = source.Next(null);

            Assert.IsFalse(value.IsEmpty);
        }
Пример #4
0
        void OnColorSourceTapped(object sender, EventArgs e)
        {
            if (!(sender is BindableObject bindable) || !(bindable.BindingContext is ColorSource selectedColorSource))
            {
                return;
            }

            if (SelectedColorSource == selectedColorSource)
            {
                return;
            }

            selectedColorSource.IsSelected = true;

            if (SelectedColorSource != null)
            {
                SelectedColorSource.IsSelected = false;
            }

            SelectedColorSource = selectedColorSource;

            SKColor.TryParse(SelectedColorSource.Color.ToHex(), out SKColor sKColor);

            _color       = sKColor;
            _paint.Color = _color;
        }
Пример #5
0
        private async void OnColorSourceClick(object sender, EventArgs e)
        {
            if (!(sender is BindableObject bindable) || !(bindable.BindingContext is ColorSource selectedColorSource))
            {
                return;
            }

            if (_selectedColorSource == selectedColorSource)
            {
                return;
            }

            selectedColorSource.IsSelected = true;
            if (_selectedColorSource != null)
            {
                _selectedColorSource.IsSelected = false;
            }
            _selectedColorSource = selectedColorSource;

            if (!(sender is ContentView contentView) || !(contentView.Content is Image image))
            {
                return;
            }

            image.Opacity = 0;
            await image.FadeTo(1, 600, Easing.CubicOut);

            image.Opacity = 1;
        }
Пример #6
0
 void Awake()
 {
     if (instance != null)
     {
         throw new Exception("Only one color source instance should exist");
     }
     instance = this;
 }
        public StatusItemWindow(ColorDefinition definition, ColorSource source, NewOrEdit neworedit)
        {
            colorDefinition = definition;
            newOrEdit       = neworedit;
            InitializeComponent();
            this.Title      = newOrEdit.ToString() + " " + source.ToString() + " Item";
            groupBox.Header = source.ToString();

            textBoxName.Text       = colorDefinition.ParameterValue;
            buttonColor.Background = colorDefinition.BackgroundColor;
        }
Пример #8
0
    public static SecondaryColorSource LerpInstantiate(ColorSource parent1, ColorSource parent2, float t, Transform parentTransform)
    {
        SecondaryColorSource lerpedColorSource = Instantiate(Resources.Load <SecondaryColorSource>("Secondary Color Source Template"), parentTransform);

        lerpedColorSource.Parent1 = parent1;
        lerpedColorSource.Parent2 = parent2;

        lerpedColorSource.LerpOnParents(t);

        return(lerpedColorSource);
    }
        protected override void Initialize()
        {
            // Inputs
            InputSlot.CreateOrResetRequired <Topology>(ref topologyInputSlot, this);
            InputSlot.CreateOrResetRequired <IFaceAttribute <Color> >(ref faceColorsInputSlot, this);

            // Fields
            colorSource   = ColorSource.Constant;
            constantColor = Color.black;
            blendWeight   = 0.5f;

            // Outputs
            OutputSlot.CreateOrResetGrouped <IEdgeAttribute <Color> >(ref faceEdgeColorsOutputSlot, this, "Face Edge Colors", "Attributes");
        }
    public void RegisterColorSource(ColorSource colorSource)
    {
        if (colorSource is SecondaryColorSource)
        {
            return;
        }

        foreach (ColorSource otherColorSource in PrimaryColorSources)
        {
            SecondaryColorSources.Add(SecondaryColorSource.LerpInstantiate(colorSource, otherColorSource, 0.5F, this.transform));
        }

        PrimaryColorSources.Add(colorSource);
    }
Пример #11
0
        /// <summary>
        /// Constructor required by deserialization
        /// </summary>
        /// <param name="info">SerializationInfo</param>
        /// <param name="context">StreamingContext</param>
        public ColorDef(SerializationInfo info, StreamingContext context)
        {
            name   = (string)info.GetValue("Name", typeof(string));
            source = (ColorSource)info.GetValue("Source", typeof(ColorSource));
            object dbg = info.GetValue("Color", typeof(object));

            try
            {
                color = (Color)info.GetValue("Color", typeof(Color));
            }
            catch (Exception e)
            {
                color = Color.Black;
            }
        }
Пример #12
0
        protected override void Initialize()
        {
            // Inputs
            InputSlot.CreateOrResetRequired <Topology>(ref topologyInputSlot, this);
            InputSlot.CreateOrResetRequired <FaceGroupCollection>(ref faceGroupCollectionInputSlot, this);
            InputSlot.CreateOrResetRequired <IFaceAttribute <int> >(ref faceGroupIndicesInputSlot, this);

            // Fields
            colorSource   = ColorSource.Constant;
            constantColor = Color.white;
            randomness.Initialize(this);

            // Outputs
            OutputSlot.CreateOrResetGrouped <IFaceGroupAttribute <Color> >(ref faceGroupColorsOutputSlot, this, "Face Group Colors", "Attributes");
            OutputSlot.CreateOrResetGrouped <IFaceAttribute <Color> >(ref faceColorsOutputSlot, this, "Face Colors", "Attributes");
        }
Пример #13
0
        public ColorDef(string pName, Color pColor, ColorSource cs)
        {
            name   = pName;
            color  = pColor;
            source = cs;
            if (name == null)
            {
                switch (source)
                {
                case ColorSource.fromParent: name = CDfromParent.name; break;

                case ColorSource.fromStyle: name = CDfromStyle.name; break;
                    //case ColorSource.fromLayer: name = CDfromLayer.name;break;
                }
            }
        }
Пример #14
0
        private static ColorResult ConvertCMYK(ColorSpace resultSpace, ColorSource source)
        {
            ColorResult color;

            double c = source.component0;
            double m = source.component1;
            double y = source.component2;
            double k = source.component3;

            switch (resultSpace)
            {
            case ColorSpace.RGBSpace:
                RGB rgb = ColorConverter.CMYKtoRGB(c, m, y, k);
                color = new ColorResult(rgb.Red, rgb.Green, rgb.Blue);
                break;

            case ColorSpace.HSBSpace:
                HSB hsb = ColorConverter.CMYKtoHSB(c, m, y, k);
                color = new ColorResult(hsb.Hue, hsb.Saturation, hsb.Brightness);
                break;

            case ColorSpace.HSLSpace:
                HSL hsl = ColorConverter.CMYKtoHSL(c, m, y, k);
                color = new ColorResult(hsl.Hue, hsl.Saturation, hsl.Luminance);
                break;

            case ColorSpace.LabSpace:
                Lab lab = ColorConverter.CMYKtoLab(c, m, y, k);
                color = ScaleCIELabOutputRange(lab);
                break;

            case ColorSpace.XYZSpace:
                XYZ xyz = ColorConverter.CMYKtoXYZ(c, m, y, k);
                color = new ColorResult(xyz.X, xyz.Y, xyz.Z);
                break;

            case ColorSpace.GraySpace:
                color = new ColorResult(ColorConverter.CMYKtoRGB(c, m, y, k).GetIntensity(source.maxChannelValue));
                break;

            default:
                throw new InvalidEnumArgumentException("Unsupported color space conversion", (int)resultSpace, typeof(ColorSpace));
            }

            return(color);
        }
Пример #15
0
        /// <summary>
        /// Select a color source
        /// </summary>
        /// <param name="src">The Color Source</param>
        /// <param name="regions">Rectangle array of regions</param>
        public void SetColorSource(Source src, Rectangle[] regions)
        {
            switch (src)
            {
            case Source.Screencap:
                source = new Screencap(serial);
                break;

            case Source.ScreencapThreaded:
                source = new ScreencapThread(serial, regions);
                break;

            default:
                System.Diagnostics.Debug.Print("Optie nog niet in busineslayer geimplementeerd");
                break;
            }
        }
Пример #16
0
        private static ColorResult ConvertHSL(ColorSpace resultSpace, ColorSource source)
        {
            ColorResult color;

            double h = source.component0;
            double s = source.component1;
            double l = source.component2;

            switch (resultSpace)
            {
            case ColorSpace.RGBSpace:
                RGB rgb = ColorConverter.HSLtoRGB(h, s, l);
                color = new ColorResult(rgb.Red, rgb.Green, rgb.Blue);
                break;

            case ColorSpace.CMYKSpace:
                CMYK cmyk = ColorConverter.HSLtoCMYK(h, s, l);
                color = new ColorResult(cmyk.Cyan, cmyk.Magenta, cmyk.Yellow, cmyk.Black);
                break;

            case ColorSpace.HSBSpace:
                HSB hsb = ColorConverter.HSLtoHSB(h, s, l);
                color = new ColorResult(hsb.Hue, hsb.Saturation, hsb.Brightness);
                break;

            case ColorSpace.LabSpace:
                Lab lab = ColorConverter.HSLToLab(h, s, l);
                color = ScaleCIELabOutputRange(lab);
                break;

            case ColorSpace.XYZSpace:
                XYZ xyz = ColorConverter.HSLtoXYZ(h, s, l);
                color = new ColorResult(xyz.X, xyz.Y, xyz.Z);
                break;

            case ColorSpace.GraySpace:
                color = new ColorResult(ColorConverter.HSLtoRGB(h, s, l).GetIntensity(source.maxChannelValue));
                break;

            default:
                throw new InvalidEnumArgumentException(nameof(resultSpace), (int)resultSpace, typeof(ColorSpace));
            }

            return(color);
        }
Пример #17
0
        private static ColorResult ConvertRGB(ColorSpace resultSpace, ColorSource source)
        {
            ColorResult color;

            double red   = source.component0;
            double green = source.component1;
            double blue  = source.component2;

            switch (resultSpace)
            {
            case ColorSpace.CMYKSpace:
                CMYK cmyk = ColorConverter.RGBtoCMYK(red, green, blue);
                color = new ColorResult(cmyk.Cyan, cmyk.Magenta, cmyk.Yellow, cmyk.Black);
                break;

            case ColorSpace.GraySpace:
                color = new ColorResult(ColorConverter.GetRGBIntensity(red, green, blue, source.maxChannelValue));
                break;

            case ColorSpace.HSBSpace:
                HSB hsb = ColorConverter.RGBtoHSB(red, green, blue);
                color = new ColorResult(hsb.Hue, hsb.Saturation, hsb.Brightness);
                break;

            case ColorSpace.HSLSpace:
                HSL hsl = ColorConverter.RGBtoHSL(red, green, blue);
                color = new ColorResult(hsl.Hue, hsl.Saturation, hsl.Luminance);
                break;

            case ColorSpace.LabSpace:
                Lab lab = ColorConverter.RGBtoLab(red, green, blue);
                color = ScaleCIELabOutputRange(lab);
                break;

            case ColorSpace.XYZSpace:
                XYZ xyz = ColorConverter.RGBtoXYZ(red, green, blue);
                color = new ColorResult(xyz.X, xyz.Y, xyz.Z);
                break;

            default:
                throw new InvalidEnumArgumentException("Unsupported color space conversion", (int)resultSpace, typeof(ColorSpace));
            }

            return(color);
        }
Пример #18
0
        private static ColorResult ConvertLAB(ColorSpace resultSpace, ColorSource source)
        {
            ColorResult color;

            double l = source.component0;
            double a = source.component1;
            double b = source.component2;

            switch (resultSpace)
            {
            case ColorSpace.RGBSpace:
                RGB rgb = ColorConverter.LabtoRGB(l, a, b);
                color = new ColorResult(rgb.Red, rgb.Green, rgb.Blue);
                break;

            case ColorSpace.CMYKSpace:
                CMYK cmyk = ColorConverter.LabtoCMYK(l, a, b);
                color = new ColorResult(cmyk.Cyan, cmyk.Magenta, cmyk.Yellow, cmyk.Black);
                break;

            case ColorSpace.HSBSpace:
                HSB hsb = ColorConverter.LabtoHSB(l, a, b);
                color = new ColorResult(hsb.Hue, hsb.Saturation, hsb.Brightness);
                break;

            case ColorSpace.HSLSpace:
                HSL hsl = ColorConverter.LabtoHSL(l, a, b);
                color = new ColorResult(hsl.Hue, hsl.Saturation, hsl.Luminance);
                break;

            case ColorSpace.XYZSpace:
                XYZ xyz = ColorConverter.LabtoXYZ(l, a, b);
                color = new ColorResult(xyz.X, xyz.Y, xyz.Z);
                break;

            case ColorSpace.GraySpace:
                color = new ColorResult(ColorConverter.LabtoRGB(l, a, b).GetIntensity(source.maxChannelValue));
                break;

            default:
                throw new InvalidEnumArgumentException("Unsupported color space conversion", (int)resultSpace, typeof(ColorSpace));
            }

            return(color);
        }
Пример #19
0
        private static ColorResult ConvertXYZ(ColorSpace resultSpace, ColorSource source)
        {
            ColorResult color;

            double x = source.component0;
            double y = source.component1;
            double z = source.component2;

            switch (resultSpace)
            {
            case ColorSpace.RGBSpace:
                RGB rgb = ColorConverter.XYZtoRGB(x, y, z);
                color = new ColorResult(rgb.Red, rgb.Green, rgb.Blue);
                break;

            case ColorSpace.CMYKSpace:
                CMYK cmyk = ColorConverter.XYZtoCMYK(x, y, z);
                color = new ColorResult(cmyk.Cyan, cmyk.Magenta, cmyk.Yellow, cmyk.Black);
                break;

            case ColorSpace.HSBSpace:
                HSB hsb = ColorConverter.XYZtoHSB(x, y, z);
                color = new ColorResult(hsb.Hue, hsb.Saturation, hsb.Brightness);
                break;

            case ColorSpace.HSLSpace:
                HSL hsl = ColorConverter.XYZtoHSL(x, y, z);
                color = new ColorResult(hsl.Hue, hsl.Saturation, hsl.Luminance);
                break;

            case ColorSpace.LabSpace:
                Lab lab = ColorConverter.XYZtoLab(x, y, z);
                color = ScaleCIELabOutputRange(lab);
                break;

            case ColorSpace.GraySpace:
                color = new ColorResult(ColorConverter.XYZtoRGB(x, y, z).GetIntensity(source.maxChannelValue));
                break;

            default:
                throw new InvalidEnumArgumentException("Unsupported color space conversion", (int)resultSpace, typeof(ColorSpace));
            }

            return(color);
        }
Пример #20
0
    // Use this for initialization
    void Start()
    {
        switches1 = FindObjectsOfType <Switch>();
        switches2 = FindObjectsOfType <ToggleSwitch>();
        switches3 = FindObjectsOfType <TimedSwitch>();
        switches4 = FindObjectsOfType <FlipFlop>();
        switches  = switches1.Concat(switches2.Concat(switches3.Concat(switches4).ToArray()).ToArray()).ToArray();
        switches  = switches.Distinct().ToArray();


        for (int i = 0; i < switches.Length; i++)
        {
            //find target
            ColorSource target = switches[i].target;
            //generate crosspoint (x1,y2)
            Vector2   pos1         = switches[i].transform.position;
            Vector2   pos2         = target.transform.position;
            Vector2   intersection = new Vector2(pos1.x, pos2.y);
            Vector3[] Positions    = new Vector3[] { new Vector3(pos1.x, pos1.y, foreGroundThreshold),
                                                     new Vector3(intersection.x, intersection.y, foreGroundThreshold),
                                                     new Vector3(pos2.x, pos2.y, foreGroundThreshold) };
            //draw lines (linerenderer)
            LineRenderer lineRenderAtSwitch = switches[i].gameObject.AddComponent <LineRenderer>() as LineRenderer;
            lineRenderAtSwitch.positionCount = 3;
            lineRenderAtSwitch.SetPositions(Positions);
            lineRenderAtSwitch.widthMultiplier = lineWidth;
            lineRenderAtSwitch.material        = Resources.Load <Material>("Materials/Line");
            lineRenderAtSwitch.material.color  = target.Color;
            lineRenderAtSwitch.enabled         = false;

            //TODO: Draw Icons for Switches and lights
            GameObject iconSwitch = Instantiate(switchIcon, switches[i].transform);
            iconSwitch.GetComponent <SpriteRenderer>().color = target.Color;
            iconSwitch.tag = "icon";
            iconSwitch.transform.position = new Vector3(pos1.x, pos1.y, foreGroundThreshold);
            iconSwitch.transform.position = new Vector3(iconSwitch.transform.position.x, iconSwitch.transform.position.y, foreGroundThreshold);
            iconSwitch.SetActive(false);
            GameObject iconSource = Instantiate(sourceIcon, switches[i].transform);
            iconSource.GetComponent <SpriteRenderer>().color = target.Color;
            iconSource.tag = "icon";
            iconSource.transform.position = new Vector3(pos2.x, pos2.y, foreGroundThreshold);
            iconSource.SetActive(false);
        }
    }
Пример #21
0
        private static ColorResult ConvertGray(ColorSpace resultSpace, ColorSource source)
        {
            ColorResult color;

            double gray = source.component0;

            switch (resultSpace)
            {
            case ColorSpace.RGBSpace:
                color = new ColorResult(gray, gray, gray);
                break;

            case ColorSpace.CMYKSpace:
                CMYK cmyk = ColorConverter.RGBtoCMYK(gray, gray, gray);
                color = new ColorResult(cmyk.Cyan, cmyk.Magenta, cmyk.Yellow, cmyk.Black);
                break;

            case ColorSpace.HSBSpace:
                HSB hsb = ColorConverter.RGBtoHSB(gray, gray, gray);
                color = new ColorResult(hsb.Hue, hsb.Saturation, hsb.Brightness);
                break;

            case ColorSpace.HSLSpace:
                HSL hsl = ColorConverter.RGBtoHSL(gray, gray, gray);
                color = new ColorResult(hsl.Hue, hsl.Saturation, hsl.Luminance);
                break;

            case ColorSpace.LabSpace:
                Lab lab = ColorConverter.RGBtoLab(gray, gray, gray);
                color = ScaleCIELabOutputRange(lab);
                break;

            case ColorSpace.XYZSpace:
                XYZ xyz = ColorConverter.RGBtoXYZ(gray, gray, gray);
                color = new ColorResult(xyz.X, xyz.Y, xyz.Z);
                break;

            default:
                throw new InvalidEnumArgumentException(nameof(resultSpace), (int)resultSpace, typeof(ColorSpace));
            }

            return(color);
        }
        internal override NativeElement ToNative(NativeElement element)
        {
            var native = EnsureDerived <NativeWrappedTextBlock>(element);

            if (native == null)
            {
#if __ANDROID__ || __IOS__
                native = new NativeWrappedTextBlock(Rect.ToNative(), Font.ToNative());
#elif WINDOWS_PHONE_APP
                native      = new NativeWrappedTextBlock();
                native.Font = Font.ToNative();
#endif
            }
            native.AutoHeight = AutoHeight;
            if (Color != BandColor.Empty)
            {
                native.Color = Color.ToNative();
            }
            native.ColorSource = ColorSource.ToNative();
            return(base.ToNative(native));
        }
Пример #23
0
        public void Dispose()
        {
            if (Sensor == null)
            {
                return;
            }

            WSRConfig.GetInstance().logInfo("TASKS", "Stop Tasks");
            if (MotionSource != null)
            {
                MotionSource.Cancel();
            }
            if (QRCodeSource != null)
            {
                QRCodeSource.Cancel();
            }
            if (GestureSource != null)
            {
                GestureSource.Cancel();
            }
            if (ColorSource != null)
            {
                ColorSource.Cancel();
            }
            if (FaceSource != null)
            {
                FaceSource.Cancel();
            }

            if (Sensor == null)
            {
                return;
            }
            WSRConfig.GetInstance().logInfo("KINECT", "Stop Sensor");
            try {
                Sensor.AudioSource.Stop();
                Sensor.Stop();
            } catch (Exception) {}
        }
    public void UnregisterColorSource(ColorSource colorSource)
    {
        if (colorSource is SecondaryColorSource)
        {
            SecondaryColorSources.Remove(colorSource);
            return;
        }

        for (int i = 0; i < SecondaryColorSources.Count; ++i)
        {
            SecondaryColorSource current = SecondaryColorSources[i] as SecondaryColorSource;

            if (current.Parent1 == colorSource || current.Parent2 == colorSource)
            {
                Destroy(current.gameObject);
            }
        }

        SecondaryColorSources.RemoveAll(secondaryCS => (secondaryCS as SecondaryColorSource).Parent1 == colorSource || (secondaryCS as SecondaryColorSource).Parent2 == colorSource);

        PrimaryColorSources.Remove(colorSource);
    }
        void OnGradientColorPickerColorSelected(object sender, ColorSource e)
        {
            gradientColorPicker.FadeTo(0, 0, Easing.SinInOut);
            gradientColorPicker.TranslateTo(0, 1000, 0, Easing.SinInOut);

            ColorSource selectedColor = gradientColorPicker.SelectedColorSource;

            if (selectedColor == null)
            {
                return;
            }

            if (!(layout.Children.FirstOrDefault() is Entry entry))
            {
                return;
            }

            int red   = (int)(selectedColor.Color.R * 255);
            int green = (int)(selectedColor.Color.G * 255);
            int blue  = (int)(selectedColor.Color.B * 255);

            entry.Text = $"#{red:X2}{green:X2}{blue:X2}";
        }
Пример #26
0
        void UpdateSource(ColorSource source)
        {
            if (source == ColorSource.Hsv)
            {
                double h, s, v;
                ColorHelper.HsvFromColor(Color, out h, out s, out v);

                H = (int)h;
                S = (int)(s * 100);
                V = (int)(v * 100);
            }
            else if (source == ColorSource.Rgba)
            {
                R = Color.R;
                G = Color.G;
                B = Color.B;
                A = Color.A;
            }
            else
            {
                Hex = ColorHelper.StringFromColor(Color);
            }
        }
Пример #27
0
        /// <summary>
        /// Converts between the specified color spaces.
        /// </summary>
        /// <param name="sourceSpace">The source space.</param>
        /// <param name="resultSpace">The result space.</param>
        /// <param name="colorComponents">The color to convert.</param>
        /// <returns>The status of the conversion</returns>
        public static unsafe short Convert(ColorSpace sourceSpace, ColorSpace resultSpace, short *colorComponents)
        {
            if (sourceSpace < ColorSpace.RGBSpace || sourceSpace > ColorSpace.XYZSpace)
            {
                return(PSError.paramErr);
            }

            // TODO: CMYK, LAB and XYZ conversions are different than Photoshop
            if (sourceSpace != resultSpace)
            {
#if DEBUG
                System.Diagnostics.Debug.Assert(sourceSpace != ColorSpace.ChosenSpace);
#endif

                double component0 = 0;
                double component1 = 0;
                double component2 = 0;
                double component3 = 0;

                switch (sourceSpace)
                {
                case ColorSpace.RGBSpace:
                case ColorSpace.XYZSpace:
                    component0 = colorComponents[0] / 255.0;
                    component1 = colorComponents[1] / 255.0;
                    component2 = colorComponents[2] / 255.0;
                    break;

                case ColorSpace.LabSpace:
                    component0 = (colorComponents[0] / 255.0) * 100.0;
                    // Scale the a and b components from [0, 255] to [-128, 127].
                    component1 = colorComponents[1] - 128.0;
                    component2 = colorComponents[2] - 128.0;
                    break;

                case ColorSpace.HSBSpace:
                case ColorSpace.HSLSpace:
                    // The hue is not scaled for the source space to prevent
                    // rounding errors when converting to other color spaces.
                    component0 = colorComponents[0];
                    component1 = colorComponents[1] / 255.0;
                    component2 = colorComponents[2] / 255.0;
                    break;

                case ColorSpace.CMYKSpace:
                    component0 = colorComponents[0] / 255.0;
                    component1 = colorComponents[1] / 255.0;
                    component2 = colorComponents[2] / 255.0;
                    component3 = colorComponents[3] / 255.0;
                    break;

                case ColorSpace.GraySpace:
                    component0 = colorComponents[0] / 255.0;
                    break;

                default:
                    return(PSError.paramErr);
                }

                ColorSource source = new ColorSource(component0, component1, component2, component3, BitsPerChannel.Eight);
                ColorResult result;
                switch (sourceSpace)
                {
                case ColorSpace.RGBSpace:
                    result = ConvertRGB(resultSpace, source);
                    break;

                case ColorSpace.HSBSpace:
                    result = ConvertHSB(resultSpace, source);
                    break;

                case ColorSpace.CMYKSpace:
                    result = ConvertCMYK(resultSpace, source);
                    break;

                case ColorSpace.LabSpace:
                    result = ConvertLAB(resultSpace, source);
                    break;

                case ColorSpace.GraySpace:
                    result = ConvertGray(resultSpace, source);
                    break;

                case ColorSpace.HSLSpace:
                    result = ConvertHSL(resultSpace, source);
                    break;

                case ColorSpace.XYZSpace:
                    result = ConvertXYZ(resultSpace, source);
                    break;

                default:
                    return(PSError.paramErr);
                }

                switch (resultSpace)
                {
                case ColorSpace.RGBSpace:
                case ColorSpace.XYZSpace:
                    colorComponents[0] = (short)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    colorComponents[1] = (short)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    colorComponents[2] = (short)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.GraySpace:
                    colorComponents[0] = (short)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.HSBSpace:
                case ColorSpace.HSLSpace:
                    // The hue range is documented as [0, 359].
                    // Wrap the hue to 0 if the value is 360.
                    int hue = (int)Math.Round(result.component0 * 360.0);
                    colorComponents[0] = (short)(hue == 360 ? 0 : hue);
                    colorComponents[1] = (short)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    colorComponents[2] = (short)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.LabSpace:
                    // The Lab values have already been scaled to the appropriate range.
                    colorComponents[0] = (short)Math.Round(result.component0).Clamp(0, 255);
                    colorComponents[1] = (short)Math.Round(result.component1).Clamp(0, 255);
                    colorComponents[2] = (short)Math.Round(result.component2).Clamp(0, 255);
                    break;

                case ColorSpace.CMYKSpace:
                    colorComponents[0] = (short)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    colorComponents[1] = (short)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    colorComponents[2] = (short)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    colorComponents[3] = (short)Math.Round(result.component3 * 255.0).Clamp(0, 255);
                    break;

                default:
                    throw new InvalidEnumArgumentException("Unsupported color space conversion", (int)resultSpace, typeof(ColorSpace));
                }
            }

            return(PSError.noErr);
        }
Пример #28
0
		void UpdateRest(ColorSource source)
		{
			HueColor = ColorHelper.ColorFromHsv(H, 1, 1);
			UpdateSource((ColorSource)(((int)source + 1) % 3));
			UpdateSource((ColorSource)(((int)source + 2) % 3));
		}
Пример #29
0
 public ColorDef(string pName, Color pColor)
 {
     name   = pName;
     color  = pColor;
     source = ColorSource.fromName;
 }
Пример #30
0
		void UpdateSource(ColorSource source)
		{
			if (source == ColorSource.Hsv) {
				double h, s, v;
				ColorHelper.HsvFromColor(Color, out h, out s, out v);

				H = (int)h;
				S = (int)(s * 100);
				V = (int)(v * 100);
			}
			else if (source == ColorSource.Rgba) {
				R = Color.R;
				G = Color.G;
				B = Color.B;
				A = Color.A;
			}
			else {
				Hex = ColorHelper.StringFromColor(Color);
			}
		}
Пример #31
0
 void UpdateRest(ColorSource source)
 {
     HueColor = ColorHelper.ColorFromHsv(H, 1, 1);
     UpdateSource((ColorSource)(((int)source + 1) % 3));
     UpdateSource((ColorSource)(((int)source + 2) % 3));
 }
Пример #32
0
        /// <summary>
        /// Converts between the specified color spaces.
        /// </summary>
        /// <param name="sourceSpace">The source space.</param>
        /// <param name="resultSpace">The result space.</param>
        /// <param name="c0">The first component.</param>
        /// <param name="c1">The second component.</param>
        /// <param name="c2">The third component.</param>
        /// <param name="c3">The fourth component.</param>
        /// <returns>The status of the conversion</returns>
        public static int Convert(ColorSpace sourceSpace, ColorSpace resultSpace, ref byte c0, ref byte c1, ref byte c2, ref byte c3)
        {
            if (sourceSpace < ColorSpace.RGBSpace || sourceSpace > ColorSpace.XYZSpace)
            {
                return(PSError.kSPBadParameterError);
            }

            if (sourceSpace != resultSpace)
            {
                if (resultSpace < ColorSpace.RGBSpace || resultSpace > ColorSpace.XYZSpace)
                {
                    return(PSError.kSPBadParameterError);
                }

                double component0;
                double component1 = 0;
                double component2 = 0;
                double component3 = 0;

                switch (sourceSpace)
                {
                case ColorSpace.RGBSpace:
                case ColorSpace.XYZSpace:
                    component0 = c0 / 255.0;
                    component1 = c1 / 255.0;
                    component2 = c2 / 255.0;
                    break;

                case ColorSpace.LabSpace:
                    component0 = (c0 / 255.0) * 100.0;
                    // Scale the a and b components from [0, 255] to [-128, 127].
                    component1 = c1 - 128.0;
                    component2 = c2 - 128.0;
                    break;

                case ColorSpace.HSBSpace:
                case ColorSpace.HSLSpace:
                    component0 = Math.Round((c0 / 255.0) * 360.0);
                    component1 = c1 / 255.0;
                    component2 = c2 / 255.0;
                    break;

                case ColorSpace.CMYKSpace:
                    component0 = c0 / 255.0;
                    component1 = c1 / 255.0;
                    component2 = c2 / 255.0;
                    component3 = c3 / 255.0;
                    break;

                case ColorSpace.GraySpace:
                    component0 = c0 / 255.0;
                    break;

                default:
                    return(PSError.kSPBadParameterError);
                }

                ColorSource source = new ColorSource(component0, component1, component2, component3, BitsPerChannel.Eight);
                ColorResult result;
                switch (sourceSpace)
                {
                case ColorSpace.RGBSpace:
                    result = ConvertRGB(resultSpace, source);
                    break;

                case ColorSpace.HSBSpace:
                    result = ConvertHSB(resultSpace, source);
                    break;

                case ColorSpace.CMYKSpace:
                    result = ConvertCMYK(resultSpace, source);
                    break;

                case ColorSpace.LabSpace:
                    result = ConvertLAB(resultSpace, source);
                    break;

                case ColorSpace.GraySpace:
                    result = ConvertGray(resultSpace, source);
                    break;

                case ColorSpace.HSLSpace:
                    result = ConvertHSL(resultSpace, source);
                    break;

                case ColorSpace.XYZSpace:
                    result = ConvertXYZ(resultSpace, source);
                    break;

                default:
                    return(PSError.kSPBadParameterError);
                }

                switch (resultSpace)
                {
                case ColorSpace.HSBSpace:
                case ColorSpace.HSLSpace:
                    c0 = (byte)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    c1 = (byte)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    c2 = (byte)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.GraySpace:
                    c0 = (byte)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.RGBSpace:
                    c0 = (byte)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    c1 = (byte)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    c2 = (byte)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.LabSpace:
                    // The Lab values have already been scaled to the appropriate range.
                    c0 = (byte)Math.Round(result.component0).Clamp(0, 255);
                    c1 = (byte)Math.Round(result.component1).Clamp(0, 255);
                    c2 = (byte)Math.Round(result.component2).Clamp(0, 255);
                    break;

                case ColorSpace.XYZSpace:
                    c0 = (byte)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    c1 = (byte)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    c2 = (byte)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    break;

                case ColorSpace.CMYKSpace:
                default:
                    c0 = (byte)Math.Round(result.component0 * 255.0).Clamp(0, 255);
                    c1 = (byte)Math.Round(result.component1 * 255.0).Clamp(0, 255);
                    c2 = (byte)Math.Round(result.component2 * 255.0).Clamp(0, 255);
                    c3 = (byte)Math.Round(result.component3 * 255.0).Clamp(0, 255);
                    break;
                }
            }

            return(PSError.kSPNoError);
        }
 /// <summary>
 /// Fills the image with intensity values, created by calling <paramref name="f"/>
 /// for each pixel in the image.
 /// If the image is a gray scale image, the intensity is used for all three color channels of the input value
 /// and the intensity of the green output channel is written to the image.
 /// </summary>
 /// <param name="bmp">The bitmap to filter.</param>
 /// <param name="f">The transfer function.</param>
 /// <exception cref="ArgumentNullException">Is thrown,
 /// if <c>null</c> is given for <paramref name="bmp"/>, or <paramref name="f"/>.</exception>
 /// <exception cref="ArgumentException">Is thrown,
 /// if the pixel format of <paramref name="bmp"/> is not on of the following:
 /// <see cref="PixelFormat.Format8bppIndexed"/>, 
 /// <see cref="PixelFormat.Format24bppRgb"/>, 
 /// or <see cref="PixelFormat.Format32bppArgb"/>.
 /// </exception>
 public static void FillWith(this Bitmap bmp, ColorSource f)
 {
     if (bmp == null) throw new ArgumentNullException("bmp");
     if (f == null) throw new ArgumentNullException("f");
     var w = bmp.Width;
     var h = bmp.Height;
     BitmapData bmpData;
     IntPtr line;
     switch (bmp.PixelFormat)
     {
         case PixelFormat.Format8bppIndexed:
             bmpData = bmp.LockBits(new Rectangle(0, 0, w, h),
                 ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
             line = bmpData.Scan0;
             for (var y = 0; y < h; y++)
             {
                 for (var x = 0; x < w; x++)
                 {
                     Marshal.WriteByte(line, x, f(x, y).G);
                 }
                 line += bmpData.Stride;
             }
             bmp.UnlockBits(bmpData);
             break;
         case PixelFormat.Format24bppRgb:
             bmpData = bmp.LockBits(new Rectangle(0, 0, w, h),
                 ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
             line = bmpData.Scan0;
             for (var y = 0; y < h; y++)
             {
                 for (var x = 0; x < w; x++)
                 {
                     var ofs = x * 3;
                     var c = f(x, y);
                     Marshal.WriteByte(line, ofs + 0, c.B);
                     Marshal.WriteByte(line, ofs + 1, c.G);
                     Marshal.WriteByte(line, ofs + 2, c.R);
                 }
                 line += bmpData.Stride;
             }
             bmp.UnlockBits(bmpData);
             break;
         case PixelFormat.Format32bppArgb:
             bmpData = bmp.LockBits(new Rectangle(0, 0, w, h),
                 ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
             line = bmpData.Scan0;
             for (var y = 0; y < h; y++)
             {
                 for (var x = 0; x < w; x++)
                 {
                     var ofs = x * 4;
                     var c = f(x, y);
                     Marshal.WriteInt32(line, ofs, c.ToArgb());
                 }
                 line += bmpData.Stride;
             }
             bmp.UnlockBits(bmpData);
             break;
         default:
             throw new ArgumentException("The pixel format of the given bitmap is not supported.", "bmp");
     }
 }
Пример #34
0
 public void Next_Returns_A_Color()
 {
     ColorSource source = new ColorSource();
     var value = source.Next(null);
     Assert.IsFalse(value.IsEmpty);
 }