예제 #1
0
        public void BuilderWorldObjectStatePropertiesAreSetCorrectly()
        {
            var fill   = new ColorVector(1.0, 0.5, 1.0);
            var border = new ColorVector(0.2, 0.3, 0.4);
            var state  = new BuilderWorldObjectState(fill, border);

            Assert.AreEqual(fill, state.Fill);
            Assert.AreEqual(border, state.Border);
        }
예제 #2
0
        public void Screen()
        {
            Assert.Equal(ColorVector.Screen(Backdrop, ColorVector.Black).ToVector4(), Backdrop.ToVector4(), FloatComparer);
            Assert.Equal(ColorVector.Screen(Backdrop, ColorVector.White).ToVector4(), ColorVector.White.ToVector4(), FloatComparer);

            ColorVector screen = ColorVector.Screen(Backdrop, Source);

            Assert.Equal(screen.ToVector4(), new ColorVector(204, 163, 153).ToVector4(), FloatComparer);
        }
예제 #3
0
        public void Multiply()
        {
            Assert.Equal(ColorVector.Multiply(Backdrop, ColorVector.Black).ToVector4(), Color.Black.ToVector4(), FloatComparer);
            Assert.Equal(ColorVector.Multiply(Backdrop, ColorVector.White).ToVector4(), Backdrop.ToVector4(), FloatComparer);

            ColorVector multiply = ColorVector.Multiply(Backdrop, Source);

            Assert.Equal(multiply.ToVector4(), new ColorVector(0, 41, 0).ToVector4(), FloatComparer);
        }
예제 #4
0
        public PixelBuffer Execute(int width, int height)
        {
            var   pixelBuffer     = new PixelBuffer(width, height);
            float aperture        = 2.0f;
            var   lookFrom        = new Vector3(3.0f, 3.0f, 2.0f);
            var   lookAt          = new Vector3(0.0f, 0.0f, -1.0f);
            float distanceToFocus = (lookFrom - lookAt).Length(); // .Magnitude();
            var   camera          = new Camera(
                lookFrom,
                lookAt,
                new Vector3(0.0f, 1.0f, 0.0f),
                30.0f,
                Convert.ToSingle(width) / Convert.ToSingle(height),
                aperture,
                distanceToFocus);

            var hitables = new HitableList
            {
                new Sphere(new Vector3(0.0f, 0.0f, -1.0f), 0.5f, new LambertianMaterial(new ColorTexture(0.1f, 0.2f, 0.5f))),
                new Sphere(new Vector3(0.0f, -100.5f, -1.0f), 100.0f, new LambertianMaterial(new ColorTexture(0.8f, 0.8f, 0.0f))),
                new Sphere(new Vector3(1.0f, 0.0f, -1.0f), 0.5f, new MetalMaterial(new ColorVector(0.8f, 0.6f, 0.2f), 0.3f)),
                new Sphere(new Vector3(-1.0f, 0.0f, -1.0f), 0.5f, new DialectricMaterial(1.5f)),
                new Sphere(new Vector3(-1.0f, 0.0f, -1.0f), -0.45f, new DialectricMaterial(1.5f)),
            };

            var world = new HitableList
            {
                hitables
            };

            for (int j = height - 1; j >= 0; j--)
            {
                for (int i = 0; i < width; i++)
                {
                    ColorVector color = new ColorVector(0.0f, 0.0f, 0.0f);
                    for (int sample = 0; sample < _numSamples; sample++)
                    {
                        float u = Convert.ToSingle(i + RandomService.Nextfloat()) / Convert.ToSingle(width);
                        float v = Convert.ToSingle(j + RandomService.Nextfloat()) / Convert.ToSingle(height);
                        var   r = camera.GetRay(u, v);

                        color += GetRayColor(r, world, 0);
                    }

                    color /= Convert.ToSingle(_numSamples);
                    color  = color.ApplyGamma2();

                    pixelBuffer.SetPixelColor(i, j, color);
                }

                Console.Write(".");
            }

            Console.WriteLine();
            return(pixelBuffer);
        }
예제 #5
0
        public void Color_Types_From_Hex_Produce_Equal_Scaled_Component_OutPut()
        {
            Color       color       = Color.FromHex("183060C0");
            ColorVector colorVector = ColorVector.FromHex("183060C0");

            Assert.Equal(color.R, (byte)(colorVector.R * 255));
            Assert.Equal(color.G, (byte)(colorVector.G * 255));
            Assert.Equal(color.B, (byte)(colorVector.B * 255));
            Assert.Equal(color.A, (byte)(colorVector.A * 255));
        }
예제 #6
0
        public void Color_Types_From_Bytes_Produce_Equal_Scaled_Component_OutPut()
        {
            Color       color       = new Color(24, 48, 96, 192);
            ColorVector colorVector = new ColorVector(24, 48, 96, 192);

            Assert.Equal(color.R, (byte)(colorVector.R * 255));
            Assert.Equal(color.G, (byte)(colorVector.G * 255));
            Assert.Equal(color.B, (byte)(colorVector.B * 255));
            Assert.Equal(color.A, (byte)(colorVector.A * 255));
        }
예제 #7
0
        public void Color_Types_From_Vector3_Produce_Equal_Scaled_Component_OutPut()
        {
            Color       color       = new Color(new Vector3(24 / 255F, 48 / 255F, 96 / 255F));
            ColorVector colorVector = new ColorVector(new Vector3(24 / 255F, 48 / 255F, 96 / 255F));

            Assert.Equal(color.R, (byte)(colorVector.R * 255));
            Assert.Equal(color.G, (byte)(colorVector.G * 255));
            Assert.Equal(color.B, (byte)(colorVector.B * 255));
            Assert.Equal(color.A, (byte)(colorVector.A * 255));
        }
예제 #8
0
        private IFactory <IRenderable> CreateBlockIconFactory(ColorVector fill, ColorVector border)
        {
            var blockIconStates = new BuilderWorldObjectState[1];

            blockIconStates[(int)ActiveState.Normal] =
                new BuilderWorldObjectState(fill, border);
            var frameworkElementFactory = new RectangleFrameworkElementFactory(1);
            var blockIconFactory        = new WpfRenderableFactory(mainCanvas, frameworkElementFactory, blockIconStates);

            return(blockIconFactory);
        }
예제 #9
0
        public void AreNotEqual()
        {
            ColorVector color1 = new ColorVector(1, 0, 0, 1);
            ColorVector color2 = new ColorVector(0, 0, 0, 1);
            ColorVector color3 = ColorVector.FromHex("#000");
            ColorVector color4 = ColorVector.FromHex("#000000");
            ColorVector color5 = ColorVector.FromHex("#FF000000");

            Assert.NotEqual(color1, color2);
            Assert.NotEqual(color1, color3);
            Assert.NotEqual(color1, color4);
            Assert.NotEqual(color1, color5);
        }
예제 #10
0
        public void FloatLayout()
        {
            ColorVector color     = new ColorVector(1F, 2, 3, 4);
            Vector4     colorBase = Unsafe.As <ColorVector, Vector4>(ref Unsafe.Add(ref color, 0));

            float[] ordered = new float[4];
            colorBase.CopyTo(ordered);

            Assert.Equal(1, ordered[0]);
            Assert.Equal(2, ordered[1]);
            Assert.Equal(3, ordered[2]);
            Assert.Equal(4, ordered[3]);
        }
예제 #11
0
        public void Color_Types_To_BgraBytes_Produce_Equal_OutPut()
        {
            Color       color       = new Color(24, 48, 96, 192);
            ColorVector colorVector = new ColorVector(24, 48, 96, 192);

            byte[] bgra       = new byte[4];
            byte[] bgraVector = new byte[4];

            color.ToZyxwBytes(bgra, 0);
            colorVector.ToZyxwBytes(bgraVector, 0);

            Assert.Equal(bgra, bgraVector);
        }
예제 #12
0
        public void Color_Types_To_RgbaBytes_Produce_Equal_OutPut()
        {
            Color       color       = new Color(24, 48, 96, 192);
            ColorVector colorVector = new ColorVector(24, 48, 96, 192);

            byte[] rgba       = new byte[4];
            byte[] rgbaVector = new byte[4];

            color.ToXyzwBytes(rgba, 0);
            colorVector.ToXyzwBytes(rgbaVector, 0);

            Assert.Equal(rgba, rgbaVector);
        }
예제 #13
0
        public SaveColor(ColorVector xyY, ColorVector XYZ, ColorVector RGB)
        {
            InitializeComponent();
            EnableButtons();

            this.xyY            = xyY;
            this.XYZ            = XYZ;
            this.RGB            = RGB;
            this.xyYRadio.Text += " (" + xyY + ")";
            this.XYZRadio.Text += " (" + XYZ + ")";
            this.RGBRadio.Text += " (" + RGB.ToRGBString(100) + ")";

            UpdateColor();
        }
        public void RenderableIsCreatedAndInitializedWithFirstState()
        {
            var red   = new ColorVector(1.0, 0.0, 0.0);
            var green = new ColorVector(0.0, 1.0, 0.0);

            states[0] = new BuilderWorldObjectState(green, red);
            mockElementWrapper.SetupSet(wrapper => wrapper.Border = red).Verifiable();
            mockElementWrapper.SetupSet(wrapper => wrapper.Fill   = green).Verifiable();

            wpfRenderableFactory.Create();

            mockElementWrapper.VerifySet(wrapper => wrapper.Border = red, Times.Once());
            mockElementWrapper.VerifySet(wrapper => wrapper.Fill   = green, Times.Once());
        }
예제 #15
0
        public PixelBuffer Execute(int width, int height)
        {
            var pixelBuffer     = new PixelBuffer(width, height);
            var lowerLeftCorner = new Vector3(-2.0f, -1.0f, -1.0f);
            var horizontal      = new Vector3(4.0f, 0.0f, 0.0f);
            var vertical        = new Vector3(0.0f, 2.0f, 0.0f);
            var origin          = Vector3.Zero;

            var camera = new BasicCamera(origin, lowerLeftCorner, horizontal, vertical);

            var hitables = new HitableList
            {
                new Sphere(new Vector3(0.0f, 0.0f, -1.0f), 0.5f, new LambertianMaterial(new ColorTexture(0.8f, 0.3f, 0.3f))),
                new Sphere(new Vector3(0.0f, -100.5f, -1.0f), 100.0f, new LambertianMaterial(new ColorTexture(0.8f, 0.8f, 0.0f))),
                new Sphere(new Vector3(1.0f, 0.0f, -1.0f), 0.5f, new MetalMaterial(new ColorVector(0.8f, 0.6f, 0.2f), 0.3f)),
                new Sphere(new Vector3(-1.0f, 0.0f, -1.0f), 0.5f, new DialectricMaterial(1.5f)),
                new Sphere(new Vector3(-1.0f, 0.0f, -1.0f), -0.45f, new DialectricMaterial(1.5f)),
            };

            var world = new HitableList
            {
                hitables
            };

            for (int j = height - 1; j >= 0; j--)
            {
                for (int i = 0; i < width; i++)
                {
                    ColorVector color = new ColorVector(0.0f, 0.0f, 0.0f);
                    for (int sample = 0; sample < _numSamples; sample++)
                    {
                        float u = Convert.ToSingle(i + RandomService.Nextfloat()) / Convert.ToSingle(width);
                        float v = Convert.ToSingle(j + RandomService.Nextfloat()) / Convert.ToSingle(height);
                        var   r = camera.GetRay(u, v);

                        color += GetRayColor(r, world, 0);
                    }

                    color /= Convert.ToSingle(_numSamples);
                    color  = color.ApplyGamma2();

                    pixelBuffer.SetPixelColor(i, j, color);
                }

                Console.Write(".");
            }

            Console.WriteLine();
            return(pixelBuffer);
        }
예제 #16
0
            //https://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
            public ColorVector HSVToRGB()
            {
                float saturationProportion = Y * .01f;
                float valueProportion      = Z * .01f;

                float chroma = valueProportion * saturationProportion;
                float hPrime = X / 60f;
                float x      = chroma * (1 - Math.Abs(hPrime % 2 - 1));

                ColorVector rgb = new ColorVector(0, 0, 0);

                if (hPrime <= 1)
                {
                    rgb.X = chroma;
                    rgb.Y = x;
                }
                else if (hPrime <= 2)
                {
                    rgb.X = x;
                    rgb.Y = chroma;
                }
                else if (hPrime <= 3)
                {
                    rgb.Y = chroma;
                    rgb.Z = x;
                }
                else if (hPrime <= 4)
                {
                    rgb.Y = x;
                    rgb.Z = chroma;
                }
                else if (hPrime <= 5)
                {
                    rgb.X = x;
                    rgb.Z = chroma;
                }
                else if (hPrime <= 6)
                {
                    rgb.X = chroma;
                    rgb.Z = x;
                }

                float m = valueProportion - chroma;

                rgb += m;
                rgb *= 255;

                return(rgb);
            }
예제 #17
0
        void UpdateColorPreviewsHSV()
        {
            textBoxOutput.AppendText("\r\n-----------------------------------------\r\n");
            textBoxOutput.AppendText("Updating HSV\r\n");

            var hue        = (float)numericUpDownHue.Value;
            var saturation = (float)numericUpDownSaturation.Value;
            var value      = (float)numericUpDownValue.Value;
            var hsv        = new ColorVector(hue, saturation, value);
            var rgb        = hsv.HSVToRGB();
            var color      = rgb.RGBToColor();

            pictureBoxNewColorPreview.BackColor = color;
            replacementColor = color;
        }
예제 #18
0
        public void AreEqual()
        {
            ColorVector color1 = new ColorVector(0, 0, 0F);
            ColorVector color2 = new ColorVector(0, 0, 0, 1F);
            ColorVector color3 = ColorVector.FromHex("#000");
            ColorVector color4 = ColorVector.FromHex("#000F");
            ColorVector color5 = ColorVector.FromHex("#000000");
            ColorVector color6 = ColorVector.FromHex("#000000FF");

            Assert.Equal(color1, color2);
            Assert.Equal(color1, color3);
            Assert.Equal(color1, color4);
            Assert.Equal(color1, color5);
            Assert.Equal(color1, color6);
        }
예제 #19
0
        void CreateColorOffsets()
        {
            textBoxOutput.AppendText("\r\n-----------------------------------------\r\n");
            textBoxOutput.AppendText("Creating color offset\r\n");
            List <KeyValuePair <string, ColorVector> > kvpList = uniqueColors.ToList();

            offsetText = text;
            foreach (var kvp in kvpList)
            {
                var color = kvp.Value;
                color      = new ColorVector(color.X, color.Y, color.Z + 25f);
                offsetText = offsetText.Replace(kvp.Key, color.ClampHSV().Round().HSVToColorMask().ToMaskString());
                textBoxOutput.AppendText($"Old: {kvp.Key}\r\nNew: { color.ClampHSV().HSVToColorMask().ToMaskString()}\r\n");
            }
        }
예제 #20
0
        public void WpfStateIsSetCorrectly()
        {
            var fill      = new ColorVector(1, 0.5, 0.1);
            var border    = new ColorVector(0.1, 0.2, 0.3);
            var stubState = new BuilderWorldObjectState(fill, border);

            mockElementWrapper.SetupSet(wrapper => wrapper.Fill = fill).Verifiable();
            mockElementWrapper.SetupSet(wrapper => wrapper.Fill = fill).Verifiable();
            stubStates[1] = stubState;

            wpfRenderable.SetState(1);

            mockElementWrapper.VerifySet(wrapper => wrapper.Fill   = fill, Times.Once());
            mockElementWrapper.VerifySet(wrapper => wrapper.Border = border, Times.Once());
        }
예제 #21
0
        /// <inheritdoc />
        public override ScatterResult Scatter(Ray rayIn, HitRecord hitRecord)
        {
            var     reflected   = rayIn.Direction.Reflect(hitRecord.Normal);
            var     attenuation = new ColorVector(1.0f, 1.0f, 1.0f);
            float   niOverNt;
            Vector3 outwardNormal;
            float   cosine;

            if (Vector3.Dot(rayIn.Direction, hitRecord.Normal) > 0.0f)
            {
                outwardNormal = -hitRecord.Normal;
                niOverNt      = RefractionIndex;
                cosine        = RefractionIndex * Vector3.Dot(rayIn.Direction, hitRecord.Normal) / rayIn.Direction.Length();
            }
            else
            {
                outwardNormal = hitRecord.Normal;
                niOverNt      = 1.0f / RefractionIndex;
                cosine        = -Vector3.Dot(rayIn.Direction, hitRecord.Normal) / rayIn.Direction.Length();
            }

            float reflectProbability;
            Ray   scattered;
            var   refracted = rayIn.Direction.Refract(outwardNormal, niOverNt);

            if (refracted != Vector3.Zero)
            {
                reflectProbability = CalculateSchlickApproximation(cosine, RefractionIndex);
            }
            else
            {
                scattered          = new Ray(hitRecord.P, reflected);
                reflectProbability = 1.0f;
            }

            if (RandomService.Nextfloat() < reflectProbability)
            {
                scattered = new Ray(hitRecord.P, reflected);
            }
            else
            {
                scattered = new Ray(hitRecord.P, refracted);
            }

            return(new ScatterResult(true, attenuation, scattered, null));
        }
예제 #22
0
        public PixelBuffer Execute(int width, int height)
        {
            var pixelBuffer     = new PixelBuffer(width, height);
            var lowerLeftCorner = new Vector3(-2.0f, -1.0f, -1.0f);
            var horizontal      = new Vector3(4.0f, 0.0f, 0.0f);
            var vertical        = new Vector3(0.0f, 2.0f, 0.0f);
            var origin          = Vector3.Zero;

            var camera = new BasicCamera(origin, lowerLeftCorner, horizontal, vertical);

            var hitables = new HitableList
            {
                new Sphere(new Vector3(0.0f, 0.0f, -1.0f), 0.5f),
                new Sphere(new Vector3(0.0f, -100.5f, -1.0f), 100.0f)
            };

            var world = new HitableList
            {
                hitables
            };

            for (int j = height - 1; j >= 0; j--)
            {
                for (int i = 0; i < width; i++)
                {
                    ColorVector color = new ColorVector(0.0f, 0.0f, 0.0f);
                    for (int sample = 0; sample < _numSamples; sample++)
                    {
                        float u = Convert.ToSingle(i + GetRandom()) / Convert.ToSingle(width);
                        float v = Convert.ToSingle(j + GetRandom()) / Convert.ToSingle(height);
                        var   r = camera.GetRay(u, v);

                        color += GetRayColor(r, world);
                    }

                    color /= Convert.ToSingle(_numSamples);

                    pixelBuffer.SetPixelColor(i, j, color);
                }

                Console.Write(".");
            }

            Console.WriteLine();
            return(pixelBuffer);
        }
예제 #23
0
        public PixelBuffer Execute(int width, int height)
        {
            var pixelBuffer = new PixelBuffer(width, height);

            for (int j = height - 1; j >= 0; j--)
            {
                for (int i = 0; i < width; i++)
                {
                    var color = new ColorVector(
                        Convert.ToSingle(i) / Convert.ToSingle(width),
                        Convert.ToSingle(j) / Convert.ToSingle(height),
                        0.2f);
                    pixelBuffer.SetPixelColor(i, j, color);
                }
            }

            return(pixelBuffer);
        }
예제 #24
0
        public PixelBuffer Execute(int width, int height)
        {
            var   pixelBuffer     = new PixelBuffer(width, height);
            float aperture        = 0.01f;
            var   lookFrom        = new Vector3(24.0f, 2.0f, 6.0f);
            var   lookAt          = Vector3.UnitY;
            float distanceToFocus = (lookFrom - lookAt).Length();
            var   camera          = new Camera(
                lookFrom,
                lookAt,
                Vector3.UnitY,
                15.0f,
                Convert.ToSingle(width) / Convert.ToSingle(height),
                aperture,
                distanceToFocus);

            var world = CreateRandomScene();

            for (int j = height - 1; j >= 0; j--)
            {
                for (int i = 0; i < width; i++)
                {
                    ColorVector color = new ColorVector(0.0f, 0.0f, 0.0f);
                    for (int sample = 0; sample < _numSamples; sample++)
                    {
                        float u = Convert.ToSingle(i + GetRandom()) / Convert.ToSingle(width);
                        float v = Convert.ToSingle(j + GetRandom()) / Convert.ToSingle(height);
                        var   r = camera.GetRay(u, v);

                        color += GetRayColor(r, world, 0);
                    }

                    color /= Convert.ToSingle(_numSamples);
                    color  = color.ApplyGamma2();

                    pixelBuffer.SetPixelColor(i, j, color);
                }

                Console.Write(".");
            }

            Console.WriteLine();
            return(pixelBuffer);
        }
예제 #25
0
        string RoundColors(string text, string maskPattern)
        {
            var matches = Regex.Matches(text, maskPattern);

            uniqueStrings.Clear();
            foreach (var match in matches)
            {
                var matchString = match.ToString();
                uniqueStrings.Add(matchString);
            }

            foreach (var matchString in uniqueStrings)
            {
                var color = ColorVector.HSVFromMaskString(matchString).ClampHSV().Round();
                var roundedColorString = color.HSVToColorMask().ToMaskString();
                text = text.Replace(matchString, roundedColorString);
            }
            return(text);
        }
예제 #26
0
            public static ColorVector HSVFromMaskString(string mask)
            {
                if (!Regex.IsMatch(mask, maskPattern))
                {
                    //Console.WriteLine("Regex did not match");
                    return(new ColorVector(0, 0, 0));
                }

                mask = mask.Replace(" ", ""); //remove spaces

                var maskSplit = mask.Split('"');

                if (maskSplit.Length < 6)
                {
                    return(new ColorVector(0, 0, 0));
                }

                float h = 0, s = 0, v = 0;

                var format = new NumberFormatInfo();

                format.NumberDecimalSeparator = ".";

                if (!float.TryParse(maskSplit[1], (NumberStyles.Number | NumberStyles.AllowExponent), format, out h) || !float.TryParse(maskSplit[3], (NumberStyles.Number | NumberStyles.AllowExponent), format, out s) || !float.TryParse(maskSplit[5], (NumberStyles.Number | NumberStyles.AllowExponent), format, out v))
                {
                    /*
                     * Console.WriteLine("Color failed to parse");
                     * Console.WriteLine(float.TryParse(maskSplit[1], NumberStyles.Number, format, out h));
                     * Console.WriteLine(float.TryParse(maskSplit[3], NumberStyles.Number, format, out s));
                     * Console.WriteLine(float.TryParse(maskSplit[5], NumberStyles.Number, format, out v));
                     */
                    return(new ColorVector(0, 0, 0));
                }

                ColorVector hsvMask = new ColorVector(h, s, v);

                return(hsvMask.ColorMaskToHSV());

                //<ColorMaskHSV x="0" y="-0.8" z="7.450581E-09" />
                //      0          1  2    3   4     5          6
            }
예제 #27
0
        public void SetPixelColor(int x, int y, ColorVector color)
        {
            _dispatcher.Invoke(
                () =>
            {
                Debug.WriteLine($"SetPixelColor ({x}, {y}) --> {color}");
                _pixelBuffer.SetPixelColor(x, y, color);

                int yToSet = IsYUp ? (Height - 1 - y) : y;
                Lock();
                try
                {
                    UnsafeSetPixelColor(x, yToSet, color);
                    WriteableBitmap.AddDirtyRect(new Int32Rect(0, 0, Width, Height));   //  AddDirtyRect(new Int32Rect(x, yToSet, 1, 1));
                }
                finally
                {
                    Unlock();
                }
            });
        }
예제 #28
0
        private void UnsafeSetPixelColor(int x, int y, ColorVector color)
        {
            unsafe
            {
                // Get a pointer to the back buffer.
                int pBackBuffer = (int)WriteableBitmap.BackBuffer;

                // Find the address of the pixel to draw.
                pBackBuffer += y * WriteableBitmap.BackBufferStride;
                pBackBuffer += x * 4;

                // Compute the pixel's color.
                var clamped   = color.Clamp();
                int colorData = ColorToInt(clamped.R) << 16; // R
                colorData |= ColorToInt(clamped.G) << 8;     // G
                colorData |= ColorToInt(clamped.B) << 0;     // B

                // Assign the color data to the pixel.
                *((int *)pBackBuffer) = colorData;
            }
        }
예제 #29
0
        void ReplaceColor()
        {
            listBoxColors.ClearSelected();
            textBoxOutput.AppendText("\r\n-----------------------------------------\r\n");
            textBoxOutput.AppendText($"Replacing color\r\n");
            var rgb = ColorVector.FromColor(replacementColor);

            textBoxOutput.AppendText($"RGB: {rgb}\r\n");
            var hsv = rgb.RGBToHSV().Round();

            textBoxOutput.AppendText($"HSV: {hsv}\r\n");
            var hsvMask = hsv.ClampHSV().HSVToColorMask().ToMaskString(); //clamps before converting to the mask

            textBoxOutput.AppendText($"mask: {hsvMask}\r\n");

            text = text.Replace(maskToReplace, hsvMask);

            pictureBoxOldColorPreview.BackColor = replacementColor;

            GetUniqueColors(text, maskPattern);
            WriteColorsToListBox();
        }
예제 #30
0
        public void FromAndToHex()
        {
            ColorVector color = ColorVector.FromHex("#AABBCCDD");

            Assert.Equal(170 / 255F, color.R);
            Assert.Equal(187 / 255F, color.G);
            Assert.Equal(204 / 255F, color.B);
            Assert.Equal(221 / 255F, color.A);

            color.A = 170 / 255F;
            color.B = 187 / 255F;
            color.G = 204 / 255F;
            color.R = 221 / 255F;

            Assert.Equal("DDCCBBAA", color.ToHex());

            color.R = 0;

            Assert.Equal("00CCBBAA", color.ToHex());

            color.A = 255 / 255F;

            Assert.Equal("00CCBBFF", color.ToHex());
        }
예제 #31
0
		public static ColorVector ToVector(this Color color)
		{
			var colorVector = new ColorVector(((float)color.R) / 255f, ((float)color.G) / 255f, ((float)color.B) / 255f, ((float)color.A) / 255f);
			return colorVector;
		}