Ejemplo n.º 1
0
        public static T[,] Transform <T>(this T[,] array, FlipRotate2D transformation)
        {
            if (ReferenceEquals(array, null))
            {
                return(null);
            }
            byte t = transformation.Value;
            int  dim = t >> 2;
            int  w = array.GetLength(dim);
            int  h = array.GetLength(dim ^ 1);
            int  dx = (t >> 1 ^ t) & 1, dy = t & 1;
            int  ax_init = dx * (w - 1); dx = 1 - (dx << 1);
            int  ay_init = dy * (h - 1); dy = 1 - (dy << 1);

            T[,] result = new T[w, h];
            int[] a = new int[2];
            a[dim ^ 1] = ax_init;
            for (int rx = 0; rx < w; ++rx, a[dim ^ 1] += dx)
            {
                a[dim] = ay_init;
                for (int ry = 0; ry < h; ++ry, a[dim] += dy)
                {
                    result[rx, ry] = array[a[1], a[0]];
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
 public static T[,] Transform <T>(this T[,] array, RotateFlipType transformation)
 {
     return(Transform <T>(array, FlipRotate2D.FromRotateFlipType(transformation)));
 }