/// <summary>
        /// Add UnsafeRGBMatrixData to current UnsafeRGBMatrixData instance
        /// </summary>
        /// <param name="unsafeRgbData"></param>
        /// <returns>Addition result</returns>
        private UnsafeRGBMatrixData AddRgb(UnsafeRGBMatrixData current, UnsafeRGBMatrixData unsafeRgbData)
        {
            var red   = current.Red + unsafeRgbData.Red;
            var green = current.Green + unsafeRgbData.Green;
            var blue  = current.Blue + unsafeRgbData.Blue;

            return(new UnsafeRGBMatrixData(red, green, blue));
        }
        /// <summary>
        /// Multiplies current UnsafeRGBMatrixData instance by integer
        /// </summary>
        /// <param name="current"></param>
        /// <param name="integerNumberMatrixData"></param>
        /// <returns></returns>
        private UnsafeRGBMatrixData MultiplyByInteger(UnsafeRGBMatrixData current, IntegerNumberMatrixData integerNumberMatrixData)
        {
            var red   = current.Red * integerNumberMatrixData.InternalValue;
            var green = current.Green * integerNumberMatrixData.InternalValue;
            var blue  = current.Blue * integerNumberMatrixData.InternalValue;

            return(new UnsafeRGBMatrixData(red, green, blue));
        }
        /// <summary>
        /// Multiplies current UnsafeRGBMatrixData instance by UnsafeRGBMatrixData
        /// </summary>
        /// <param name="unsafeRgbData"></param>
        /// <returns>Multiplication result</returns>
        private UnsafeRGBMatrixData MultiplyByRgb(UnsafeRGBMatrixData current, UnsafeRGBMatrixData unsafeRgbData)
        {
            var red   = current.Red * unsafeRgbData.Red;
            var green = current.Green * unsafeRgbData.Green;
            var blue  = current.Blue * unsafeRgbData.Blue;

            return(new UnsafeRGBMatrixData(red, green, blue));
        }
        /// <summary>
        /// Divides current UnsafeRGBMatrixData instance by integer
        /// </summary>
        /// <param name="current"></param>
        /// <param name="integerNumberMatrixData"></param>
        /// <returns></returns>
        private UnsafeRGBMatrixData DivideInteger(UnsafeRGBMatrixData current, IntegerNumberMatrixData integerNumberMatrixData)
        {
            var floatDataRaw = integerNumberMatrixData.InternalValue;
            var red          = current.Red / floatDataRaw;
            var green        = current.Green / floatDataRaw;
            var blue         = current.Blue / floatDataRaw;

            return(new UnsafeRGBMatrixData(red, green, blue));
        }
        /// <summary>
        /// Add integer to current UnsafeRGBMatrixData instance
        /// </summary>
        /// <param name="current"></param>
        /// <param name="integerNumberMatrixData"></param>
        /// <returns>addition result</returns>
        private UnsafeRGBMatrixData AddInteger(UnsafeRGBMatrixData current, IntegerNumberMatrixData integerNumberMatrixData)
        {
            var integerValue = integerNumberMatrixData.InternalValue;
            var red          = current.Red + integerValue;
            var green        = current.Green + integerValue;
            var blue         = current.Blue + integerValue;

            return(new UnsafeRGBMatrixData(red, green, blue));
        }
        /// <summary>
        /// Add float to current UnsafeRGBMatrixData instance
        /// </summary>
        /// <param name="floatData"></param>
        /// <returns>Addition result</returns>
        private UnsafeRGBMatrixData AddFloat(UnsafeRGBMatrixData current, FloatNumberMatrixData floatData)
        {
            var floatDataRaw = floatData.InternalValue;
            var red          = current.Red + floatDataRaw;
            var green        = current.Green + floatDataRaw;
            var blue         = current.Blue + floatDataRaw;

            return(new UnsafeRGBMatrixData((int)red, (int)green, (int)blue));
        }
예제 #7
0
        public static UnsafeRGBMatrixData GetRandomColor(out int red, out int green, out int blue, int redLimit = 255, int greenLimit = 255, int blueLimit = 255)
        {
            var randomRed   = new Random().Next(0, redLimit);
            var randomGreen = new Random().Next(0, greenLimit);
            var randomBlue  = new Random().Next(0, blueLimit);
            var randomColor = new UnsafeRGBMatrixData(randomRed, randomGreen, randomBlue);

            red   = randomRed;
            green = randomGreen;
            blue  = randomBlue;

            return(randomColor);
        }
        public void RawValuesIsValidIntegerArray()
        {
            var randomRed   = new Random().Next(0, 255);
            var randomGreen = new Random().Next(0, 255);
            var randomBlue  = new Random().Next(0, 255);
            var randomColor = new UnsafeRGBMatrixData(randomRed, randomGreen, randomBlue);

            var rawValues = (int[])randomColor.RawValue;

            Assert.AreEqual(randomRed, rawValues[0]);
            Assert.AreEqual(randomGreen, rawValues[1]);
            Assert.AreEqual(randomBlue, rawValues[2]);
        }
        public void BlueGreenRedPropertiesRepresentingCorrectValues()
        {
            var black = new UnsafeRGBMatrixData();

            Assert.AreEqual(0, black.Red);
            Assert.AreEqual(0, black.Green);
            Assert.AreEqual(0, black.Blue);

            var randomColor = Utils.GetRandomColor(out var randomRed, out var randomGreen, out var randomBlue);

            Assert.AreEqual(randomRed, randomColor.Red);
            Assert.AreEqual(randomGreen, randomColor.Green);
            Assert.AreEqual(randomBlue, randomColor.Blue);
        }
        /// <summary>
        /// Creates RGBMatrix matrix from image
        /// </summary>
        /// <param name="imagePath"></param>
        /// <returns>Matrix containing image data</returns>
        public static IMatrix CreateMatrixFromImage(string imagePath)
        {
            var bitmapImage = new Bitmap(imagePath);
            var width       = bitmapImage.Width;
            var height      = bitmapImage.Height;

            IMatrixData[][] rgbValues = new IMatrixData[height][];

            for (int i = 0; i < height; i++)
            {
                rgbValues[i] = new IMatrixData[width];

                for (int j = 0; j < width; j++)
                {
                    var pixel = bitmapImage.GetPixel(j, i);
                    rgbValues[i][j] = new UnsafeRGBMatrixData(pixel.R, pixel.G, pixel.B);
                }
            }

            var matrix = new RGBMatrix(rgbValues);

            return(matrix);
        }