protected java.util.List<ThreeTuple<Vector2, Vector2, Vector2>> parse(BufferedImage image) {
        ArrayList<ThreeTuple<Vector2, Vector2, Vector2>> ret = new ArrayList<ThreeTuple<Vector2, Vector2, Vector2>>();
        int imageWidth = image.getWidth();
        int imageHeight = image.getHeight();
        // boolean values default to false, so no need to set them.
        boolean[][] searched = new boolean[imageWidth][imageHeight];
        // Stack should be ok? Doubt we need a Queue.
        Color background = new Color(image.getRGB(0, 0), true);

        for (int y = 0; y < imageHeight; y++) {
            for (int x = 0; x < imageWidth; x++) {
                if (!searched[x][y]) {
                    if (image.getRGB(x, y) != background.getRGB()) {
                        TwoTuple<Point, Point> found = extractSprite(image, background, searched, new Point(x, y));
                        int width = found.two.x - found.one.x;
                        int height = found.two.y - found.one.y;
                        Vector2 loc = new Vector2(found.one.x / (float) imageWidth, found.one.y / (float) imageHeight);
                        Vector2 size = new Vector2(width / imageWidth,
                                width / imageHeight);
                        ret.add(new ThreeTuple<Vector2, Vector2, Vector2>(loc, size,
                                new Vector2(width, height)));
                    }
                    searched[x][y] = true;
                }
            }
        }

        return ret;
    }