PNG画像を組み合わせて画像を吐き出す

仕事で「画像ファイルは提供します。組み合わせはそっちで作ってください」と言うことになり、PNGファイルを組み合わせた画像を大量に作る作業が発生したので、C#でちゃらっと書いてみました。(仕事の方だと組み合わせの数が跳ね上がるので、一部関数にする可能性大ですが、参考にはなろうという意味で置いておきます)
サンプルコードを見てみてはじめ意味がわからなかったんですが、GraphicsオブジェクトがBitmapオブジェクトに書き込みやってるんですね。
(リファクタリングしました。まだ読みにくいなぁ)

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
namespace PicLay
{
    class Program
    {
        static void Main(string[] args)
        {
            var pics = new List<string> {
                    @"E:\temp\PicLaySample\01.png",     //画像1〜3
                    @"E:\temp\PicLaySample\02.png",
                    @"E:\temp\PicLaySample\03.png",
                    @"E:\temp\PicLaySample\04.png",
                    @"E:\temp\PicLaySample\base.png"     //背景画像
            };

            var inPicNum = pics.Count-1;
            var picNum = Math.Pow(2, inPicNum);

            for(var i=1;i< picNum; i++)    //iは出力ファイル名。各ビットの1に対してPNGを合成する。
            {
                using (var resultPic = new Bitmap(pics.Last())) //背景画像作成
                {
                    var g = Graphics.FromImage(resultPic);
                    for (var j = 0; j < inPicNum; j++)          //各画像の書き込みチェック
                    {

                        if ((i & (int)(Math.Pow(2,j))) != 0)                  //対象が書き込み画像であれば
                        {
                            using (var addPic = new Bitmap(pics[j]))
                            {
                                g.DrawImage(addPic, 0, 0, addPic.Width, addPic.Height);
                            }
                        }
                    }
                    //書き出し
                    var fileName = i.ToString("D3") + ".png";
                    var targetName = @"E:\temp\PicLaySample\test" + Path.DirectorySeparatorChar + fileName;
                    resultPic.Save(targetName, ImageFormat.Png);
                }
            }
        }
    }
}