public Color[] GetPixels(Flip flip) { if (!Pixels.ContainsKey(flip)) { if (!Pixels.ContainsKey(Flip.None)) { int w = (int)rect.width; int h = (int)rect.height; int x = (int)rect.x; int y = (int)rect.y; Pixels[Flip.None] = texture.GetPixels(x, y, w, h); } if (flip != Flip.None) { int w = (int)rect.width; int h = (int)rect.height; bool flipX = flip.HasFlag(Flip.Horizontal); bool flipY = flip.HasFlag(Flip.Vertical); Color[] pix = Pixels[Flip.None]; Color[] tar = new Color[pix.Length]; for (int j = 0; j < h; j++) { for (int k = 0; k < w; k++) { int tileY = flipY ? (h - 1 - j) : j; int tileX = flipX ? (w - 1 - k) : k; tar[j * w + k] = pix[tileY * w + tileX]; } } Pixels[flip] = tar; } } return(Pixels[flip]); }