Ejemplo n.º 1
0
        public static byte[] TransformRgb24PlainSpiralMatrixToBytePlainSequentialMatrix(RGB24[] rgbPlainSpiralMatrix)
        {
            //RGB24[] rgbPlainSpiralMatrix = GetRgb24ArrayFromByteArray(plainSpiralMatrix);
            Int32 matrixSide = Convert.ToInt32(Math.Sqrt(rgbPlainSpiralMatrix.Length));

            RGB24[] rgbPlainSequentialMatrix = new RGB24[rgbPlainSpiralMatrix.Length];

            int position = 0;
            int count    = matrixSide;
            int value    = -matrixSide;
            int sum      = -1;

            do
            {
                value = -1 * value / matrixSide;
                for (int i = 0; i < count; i++)
                {
                    sum += value;
                    rgbPlainSequentialMatrix[position++] = rgbPlainSpiralMatrix[matrixSide * (sum / matrixSide) + sum % matrixSide];
                }
                value *= matrixSide;
                count--;
                for (int i = 0; i < count; i++)
                {
                    sum += value;
                    rgbPlainSequentialMatrix[position++] = rgbPlainSpiralMatrix[matrixSide * (sum / matrixSide) + sum % matrixSide];
                }
            } while (count > 0);

            return(GetByteArrayFromRgb24Array(rgbPlainSequentialMatrix));
        }
Ejemplo n.º 2
0
        //Метод, который делает из линейного массива спираль в матрице, и отдаёт эту матрицу в линейном виде
        public static RGB24[] TransformRgb24PlainSequentialMatrixToPlainSpiralMatrix(RGB24[] plainSequentialMatrix)
        {
            Int32 matrixSide = Convert.ToInt32(Math.Sqrt(plainSequentialMatrix.Length));

            RGB24[,] spiralMatrix = new RGB24[matrixSide, matrixSide];

            int position = 0;
            int count    = matrixSide;
            int value    = -matrixSide;
            int sum      = -1;

            do
            {
                value = -1 * value / matrixSide;
                for (int i = 0; i < count; i++)
                {
                    sum += value;
                    spiralMatrix[sum / matrixSide, sum % matrixSide] = plainSequentialMatrix[position++];
                }
                value *= matrixSide;
                count--;
                for (int i = 0; i < count; i++)
                {
                    sum += value;
                    spiralMatrix[sum / matrixSide, sum % matrixSide] = plainSequentialMatrix[position++];
                }
            } while (count > 0);

            return(spiralMatrix.Cast <RGB24>().ToArray());
        }
Ejemplo n.º 3
0
        //Метод для получения массива цветов RGB из массива байт
        public static RGB24[] GetRgb24ArrayFromByteArray(byte[] byteArray)
        {
            int pixelsCount = byteArray.Length / 3;

            RGB24[] rgb24Array = new RGB24[pixelsCount];
            for (int i = 0; i < pixelsCount; i++)
            {
                Int32 currentPixelBytePosition = i * 3;
                rgb24Array[i] = new RGB24
                {
                    R = byteArray[currentPixelBytePosition],
                    G = byteArray[currentPixelBytePosition + 1],
                    B = byteArray[currentPixelBytePosition + 2]
                };
            }
            return(rgb24Array);
        }