Exemplo n.º 1
0
        /// <summary>
        /// TheApp.app.config.BoardImageVersionの設定が変わったときに画像を読み込む。
        /// </summary>
        public void UpdateBoardImage(PropertyChangedEventArgs args = null)
        {
            var config = TheApp.app.config;

            var board      = new ImageLoader();
            var tatami     = new ImageLoader();
            var name_plate = new ImageLoader();

            Load(ref board, $"board_v{config.BoardImageVersion}_1920_1080.png");
            Load(ref tatami, $"tatami_v{config.TatamiImageVersion}_1920_1080.png");
            Load(ref name_plate, "name_plate_v1_1920_1080.png");

            var piece_table = new ImageLoader[2];
            var piece_box   = new ImageLoader[2];

            // 駒台
            // piece_table_version == 0 のとき普通の駒台
            // piece_table_version == 1 のとき細長い駒台
            foreach (var piece_table_version in All.Int(2))
            {
                var img = new ImageLoader();
                Load(ref img, $"komadai_v{piece_table_version + 1}_1920_1080.png");
                piece_table[piece_table_version] = img;

                var img2 = new ImageLoader();
                Load(ref img2, $"koma_bako_v{piece_table_version + 1}_1920_1080.png");
                piece_box[piece_table_version] = img2;
            }

            foreach (var piece_table_version in All.Int(2))
            {
                // 駒箱
                // piece_box_exist == false 駒箱なし
                // piece_box_exist ==  true 駒箱あり
                foreach (var piece_box_exist in All.Bools())
                {
                    var img = new ImageLoader();
                    img.CreateBitmap(1920, 1080, PixelFormat.Format24bppRgb);

                    // 畳と盤を合成する。
                    using (var g = Graphics.FromImage(img.image))
                    {
                        var rect = new Rectangle(0, 0, img.image.Width, img.image.Height);
                        // DrawImageで等倍の転送にするためにはrectの指定が必要
                        g.DrawImage(tatami.image, rect, rect, GraphicsUnit.Pixel);
                        g.DrawImage(board.image, rect, rect, GraphicsUnit.Pixel);
                        g.DrawImage(piece_table[piece_table_version].image, rect, rect, GraphicsUnit.Pixel);

                        // 駒台が縦長のとき、ネームプレートは別の素材
                        if (piece_table_version == 0)
                        {
                            g.DrawImage(name_plate.image, rect, rect, GraphicsUnit.Pixel);
                        }

                        // 駒箱を合成するのは盤面編集モードの時のみ
                        if (piece_box_exist)
                        {
                            g.DrawImage(piece_box[piece_table_version].image, rect, rect, GraphicsUnit.Pixel);
                        }
                    }

                    BoardImages[piece_table_version + (piece_box_exist ? 2 : 0)] = img;
                }
            }

            // もう使わないと思うので開放しておく
            foreach (var piece_table_version in All.Int(2))
            {
                piece_table[piece_table_version].Release();
                piece_box[piece_table_version].Release();
            }
            board.Release();
            tatami.Release();
            name_plate.Release();
        }
Exemplo n.º 2
0
        /// <summary>
        /// TheApp.app.config.BoardImageVersionの設定が変わったときに画像を読み込む。
        /// </summary>
        public void UpdateBoardImage(PropertyChangedEventArgs args = null)
        {
            var config = TheApp.app.Config;

            var board      = new ImageLoader();
            var tatami     = new ImageLoader();
            var name_plate = new ImageLoader();

            Load(ref board, $"board_v{config.BoardImageVersion}_1920_1080.png");
            Load(ref tatami, $"tatami_v{config.TatamiImageVersion}_1920_1080.png");
            Load(ref name_plate, "name_plate_v1_1920_1080.png");

            switch (config.BoardImageColorVersion)
            {
            case 0: /* ImageConverter.BlendColor(board.image , 0 , 0 , 0 , 0); // 元画像のまま */ break;

            case 1: ImageConverter.BlendColor(board.image, 20, 0, 0, 0); break;       // 少し暗め

            case 2: ImageConverter.BlendColor(board.image, 40, 0, 0, 0); break;       // かなり暗め

            case 3: ImageConverter.BlendColor(board.image, 64, 215, 169, 90); break;  // キャラメル色

            case 4: ImageConverter.BlendColor(board.image, 64, 237, 233, 225); break; // 薄い木目風

            case 5: ImageConverter.BlendColor(board.image, 64, 247, 236, 147); break; // プラスチック風
            }
            switch (config.TatamiImageColorVersion)
            {
            case 0: /* ImageConverter.BlendColor(tatami.image , 0 , 0 , 0 , 0); // 元画像のまま */ break;

            case 1: ImageConverter.BlendColor(tatami.image, 20, 0, 0, 0); break;       // 少し暗め

            case 2: ImageConverter.BlendColor(tatami.image, 40, 0, 0, 0); break;       // かなり暗め

            case 3: ImageConverter.BlendColor(tatami.image, 64, 215, 169, 90); break;  // キャラメル色

            case 4: ImageConverter.BlendColor(tatami.image, 80, 211, 172, 132); break; // 古い畳風

            case 5: ImageConverter.BlendColor(tatami.image, 80, 152, 148, 78); break;  // 新しい畳風
            }

            var piece_table = new ImageLoader[2];
            var piece_box   = new ImageLoader[2];

            // 駒台
            // piece_table_version == 0 のとき普通の駒台
            // piece_table_version == 1 のとき細長い駒台
            foreach (var piece_table_version in All.Int(2))
            {
                var img = new ImageLoader();
                Load(ref img, $"komadai_v{piece_table_version + 1}_1920_1080.png");
                piece_table[piece_table_version] = img;

                var img2 = new ImageLoader();
                Load(ref img2, $"koma_bako_v{piece_table_version + 1}_1920_1080.png");
                piece_box[piece_table_version] = img2;
            }

            foreach (var piece_table_version in All.Int(2))
            {
                // 駒箱
                // piece_box_exist == false 駒箱なし
                // piece_box_exist ==  true 駒箱あり
                foreach (var piece_box_exist in All.Bools())
                {
                    var img = new ImageLoader();
                    img.CreateBitmap(1920, 1080, PixelFormat.Format24bppRgb /* Format32bppPArgb */);

                    // 畳と盤を合成する。
                    using (var g = Graphics.FromImage(img.image))
                    {
                        var rect = new Rectangle(0, 0, img.image.Width, img.image.Height);
                        // DrawImageで等倍の転送にするためにはrectの指定が必要
                        g.DrawImage(tatami.image, rect, rect, GraphicsUnit.Pixel);

                        // Mono環境だと、転送元がalpha付きのDrawImage、うまく転送できないので
                        // 自前のwrapper経由で行う。

                        DrawImageHelper.DrawImage(g, img.image, board.image, rect, rect, GraphicsUnit.Pixel);
                        DrawImageHelper.DrawImage(g, img.image, piece_table[piece_table_version].image, rect, rect, GraphicsUnit.Pixel);

                        // 駒台が縦長のとき、ネームプレートは別の素材
                        if (piece_table_version == 0)
                        {
                            DrawImageHelper.DrawImage(g, img.image, name_plate.image, rect, rect, GraphicsUnit.Pixel);
                        }

                        // 駒箱を合成するのは盤面編集モードの時のみ
                        if (piece_box_exist)
                        {
                            DrawImageHelper.DrawImage(g, img.image, piece_box[piece_table_version].image, rect, rect, GraphicsUnit.Pixel);
                        }
                    }

                    var id = piece_table_version + (piece_box_exist ? 2 : 0);

                    // 前回に合成したものは解放しておく。
                    if (BoardImages[id] != null)
                    {
                        BoardImages[id].Dispose();
                    }
                    BoardImages[id] = img;
                }
            }

            // もう使わないと思うので開放しておく
            foreach (var piece_table_version in All.Int(2))
            {
                piece_table[piece_table_version].Release();
                piece_box[piece_table_version].Release();
            }
            board.Release();
            tatami.Release();
            name_plate.Release();
        }