SpriteImageParser is a lightweight C# library for detecting sprite regions in raster images (e.g., PNGs, GIFs). It takes a 2D array of pixels, analyzes connected non-transparent regions, and returns bounding boxes for each detected sprite. Excellent examples of the type of spritesheets expected by this tool can be found on Sprites INC., a repository of sprite data focused on the MegaMan series of games. (Disclaimer: TohnoCoding has no relation to Sprites INC. other than acknowledging their work is awesome.)
This tool is designed to be part of an asset pipeline or editor; it does not read or write image files directly. It follows a simple "one job, one tool" philosophy.
If you're building a game development tool, editor or jam project in MonoGame or any other 2D-compatible platform, and need to break spritesheets into spritemaps without creating them by hand, this may be able to save you some time.
You can see a sample Windows-based implementation in this discussion.
A small, self-contained library to detect and extract sprite regions from raster images: useful for pipelines, prototyping, or editor tools. Code samples in this README file, and in the linked discussion above.
- Detects sprite regions based on alpha/transparency
- Handles empty spacing between frames
- Sorts results top-to-bottom, left-to-right
- JSON and XML serialization of output
- No runtime dependencies beyond .NET
// Load a Bitmap and convert to Pixel[,] array Bitmap bm = new Bitmap("path_to_your_image.png"); Pixel[,] pixels = new Pixel[bm.Width, bm.Height]; for (int x = 0, x < bm.Width; x++) { for (int y = 0; y < bm.Height; y++) { Color c = bm.GetPixel(x, y); pixels[x, y] = new Pixel(c.R, c.G, c.B, c.A); } } //Detect sprites in currently loaded Pixel array List<SpriteRegion> rectangles = Parser.DetectSpritesInImage(pixels); // Export to JSON with name prefix "Frame" and duration of 1 (time scale is user-determined) string json = SpriteRegionExporter.serializeToJson(rectangles, "Frame", 1f);Detected regions are serialized into this format:
JSON:
[ { "Name": "Sprite000001", "Duration": 1000, "Frame": { "X": 194, "Y": 4, "Width": 34, "Height": 41 } }, { "Name": "Sprite000002", "Duration": 1000, "Frame": { "X": 244, "Y": 4, "Width": 34, "Height": 41 } } ]XML:
<Spritesheet> <SpriteRegion> <Name>Sprite000001</Name> <Duration>1000</Duration> <Frame> <X>194</X> <Y>4</Y> <Width>34</Width> <Height>41</Height> </Frame> </SpriteRegion> <SpriteRegion> <Name>Sprite000001</Name> <Duration>1000</Duration> <Frame> <X>244</X> <Y>4</Y> <Width>34</Width> <Height>41</Height> </Frame> </SpriteRegion> </Spritesheet>- Input: A 2D array of
Pixelstructs (RGBA), and a Y-axis margin value to consider sprites part of the same "horizontal group". - Output: A
List<SpriteRegion>with detected bounding rectangles.
- Serializes a list of regions to JSON.
- Supports custom frame field name and default duration.
- Outputs equivalent structure in XML.
public struct Pixel { public byte R, G, B, A; } public class SpriteRegion { public int X, Y, Width, Height; public string Name; public float Duration; }- This library does not load image files; pass in a
Pixel[,]from your own pipeline. - This library does not parse or deserialize formats: it only exports.