コード例 #1
0
        // returns false when the packing failed.
        private bool TryPack(int sheet_w, int sheet_h)
        {
            SpriteAtlas.Clear();

            // load all sprites into list and sort
            var spritesToPack = new List <Sprite>(
                sprites.Select(sprite => new Sprite
            {
                Bitmap = sprite.Item2,
                Name   = sprite.Item1
            }));

            spritesToPack.Sort((sprite1, sprite2) => sprite2.Area.CompareTo(sprite1.Area));

            var packer = new MaxRectsBinPack.MaxRectsBinPack(sheet_w, sheet_h, false);

            foreach (var sprite in spritesToPack)
            {
                var rect = packer.Insert(sprite.Width, sprite.Height, FreeRectChoiceHeuristic.RectBestShortSideFit);
                if (rect.GetArea() == 0)
                {
                    return(false);
                }
                SpriteAtlas.Add(new PackedSprite(rect.X, rect.Y, sprite));
            }

            SpriteSheet = new Bitmap(sheet_w, sheet_h);

            return(true);
        }
コード例 #2
0
ファイル: SpriteUtils.cs プロジェクト: romen-h/kanim-explorer
        private static PackedSprite[] TryPack(Sprite[] sprites, int sheet_w, int sheet_h)
        {
            List <PackedSprite> packedSprites = new List <PackedSprite>();

            // load all sprites into list and sort
            var spritesToPack = new List <Sprite>(sprites);

            spritesToPack.Sort((sprite1, sprite2) => sprite2.Area.CompareTo(sprite1.Area));

            var packer = new MaxRectsBinPack.MaxRectsBinPack(sheet_w, sheet_h, false);

            foreach (var sprite in spritesToPack)
            {
                var rect = packer.Insert(sprite.Width, sprite.Height, FreeRectChoiceHeuristic.RectBestShortSideFit);
                if (rect.Width == 0 || rect.Height == 0)
                {
                    return(null);
                }

                packedSprites.Add(new PackedSprite(sprite, rect.Location));
            }

            return(packedSprites.ToArray());
        }