/// <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(); }
/// <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(); }