private void ExtractFrames(Texture2D spriteSheet, int frameWidth, int frameHeight) { List<Texture2D> frames = new List<Texture2D>(); int pixelCountPerFrame = frameWidth * frameHeight; bool foundEmptyFrame = false; for (int y = 0; y < spriteSheet.Height; y += frameHeight) { if (y + frameHeight <= spriteSheet.Height && !foundEmptyFrame) { for (int x = 0; x < spriteSheet.Width; x += frameWidth) { if (x + frameWidth <= spriteSheet.Width && !foundEmptyFrame) { var frameData = new Color[pixelCountPerFrame]; spriteSheet.GetData(0, new Rectangle(x, y, frameWidth, frameHeight), frameData, 0, pixelCountPerFrame); if (frameData.All(c => c.A == 0)) { foundEmptyFrame = true; } else { Texture2D frame = new Texture2D(GameProvider.GameInstance.GraphicsDevice, frameWidth, frameHeight); frame.SetData(frameData); frames.Add(frame); } } } } } _frames = frames.ToArray(); }