OSDN Git Service

230460c1a9200019cec3ba0e8097df81a02934a3
[dtxmania/dtxmania.git] / DTXMania / コード / 全体 / CPreviewMagnifier.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Diagnostics;
5
6 namespace DTXMania
7 {
8         public class CPreviewMagnifier
9         {
10
11                 #region [ プロパティ(拡大率等の取得) ]
12                 /// <summary>
13                 /// 拡大後のwidth
14                 /// </summary>
15                 public int width;
16                 /// <summary>
17                 /// 拡大後のheight
18                 /// </summary>
19                 public int height;
20                 /// <summary>
21                 /// 拡大後のX拡大率
22                 /// </summary>
23                 public float magX;
24                 /// <summary>
25                 /// 拡大後のY拡大率
26                 /// </summary>
27                 public float magY;
28
29                 public int px;
30                 public int py;
31
32                 /// <summary>
33                 /// プレビュー画像向けの拡大率か(それとも、演奏画面向けの拡大率か)
34                 /// </summary>
35                 public enum EPreviewType : int
36                 {
37                         MusicSelect = 0,                        // 選曲画面
38                         PlayingFront = 1,                       // 演奏画面(ウインドウ表示の動画)
39                         PlayingBackground = 2           // 演奏画面(背景全画面表示の動画)
40                 }
41                 public EPreviewType ePreviewType;
42                 #endregion
43
44                 #region [ 定数定義 ]
45                 // 配列の0,1要素はそれぞれ, Preview用, 演奏画面用
46                 private int[] WIDTH_VGA_SET = { 204, 278, 640 };                     // VGA版DTXManiaのプレビュー画像width値
47                 private int[] HEIGHT_VGA_SET = { 269, 355, 1920 };                      // VGA版DTXManiaのプレビュー画像height値
48                 private int[] WIDTH_HD_SET = { 400, 400, 1920 };                      // HD版DTXManiaのプレビュー画像width値
49                 private int[] HEIGHT_HD_SET = { 400, 600, 1080 }; // 600は仮                                                          // HD版DTXManiaのプレビュー画像height値
50                 private int[] WIDTH_FHD_LIMIT = { 320, 320, 640 };                     // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値
51                 private int[] HEIGHT_FHD_LIMIT = { 416, 416, 480 };                      // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値
52                 private int[] WIDTH_FHD_SET = { (int)(204 * Scale.X), (int)(278 * 2), 1920 }; // FHD版DTXManiaのプレビュー画像height値
53                 private int[] HEIGHT_FHD_SET = { (int)(269 * Scale.Y), (int)(355 * 2), 1080 };  // FHD版DTXManiaのプレビュー画像height値
54                                                                                                                                                                                 // #37227 2017.5.29 yyagi 105以降の新演奏画面では、BGA/AVI領域の縦横倍率はx2
55                 #endregion
56
57
58                 #region [ コンストラクタ ]
59                 /// <summary>
60                 /// コンストラクタ
61                 /// </summary>
62                 public CPreviewMagnifier()
63                 {
64                 }
65                 public CPreviewMagnifier(EPreviewType _ePreviewType)
66                 {
67                         CPreviewMagnifier_initializer(_ePreviewType, 0, 0);
68                 }
69                 public CPreviewMagnifier( EPreviewType _ePreviewType, int _px, int _py )
70                 {
71                         CPreviewMagnifier_initializer( _ePreviewType, _px, _py );
72                 }
73                 private void CPreviewMagnifier_initializer( EPreviewType _ePreviewType, int _px, int _py)
74                 {
75                         this.ePreviewType = _ePreviewType;
76                         this.px = _px;
77                         this.py = _py;
78                 }
79                 #endregion
80
81                 /// <summary>
82                 /// 拡大率の取得
83                 /// </summary>
84                 /// <param name="width_org">元の幅</param>
85                 /// <param name="height_org">元の高さ</param>
86                 /// <param name="magX_org">元の拡大率(幅)</param>
87                 /// <param name="magY_org">元の拡大率(高さ)</param>
88                 /// <remarks>出力はプロパティで得てください。</remarks>
89                 public void GetMagnifier(int width_org, int height_org, float magX_org, float magY_org)
90                 {
91                         //bool bIsPreview = ( this.ePreviewType == EPreviewType.MusicSelect );
92
93                         // #35820 画像サイズに関係なく、プレビュー領域に合わせる add ikanick 15.12.08
94                         // #36176 プレビュー画像については、前仕様(204x269)画像はアスペクト比を維持する change ikanick 16.03.20
95
96                         if ( this.ePreviewType == EPreviewType.PlayingBackground )      // フル背景動画に限り、上位指定の表示座標を無視する
97                         {
98                                 this.px = this.py = 0;
99                         }
100
101                         #region [ アスペクト比を維持した拡大縮小 ]
102                         this.width = width_org;
103                         this.height = height_org;
104                         this.magX = magX_org * width_fhd_set / width_org;
105                         this.magY = magY_org * height_fhd_set / height_org;
106
107                         if ( magX > magY )
108                         {
109                                 magX = magY;
110                                 px += (int) ( ( width_fhd_set - ( width_org * magY ) ) / 2 );
111                         }
112                         else
113                         {
114                                 magY = magX;
115                                 py += (int) ( ( height_fhd_set - ( height_org * magX ) ) / 2 );
116                         }
117                         #endregion
118                 }
119
120                 #region [ bIsPreviewによる配列→定数読み替え ]
121                 private int width_vga_set
122                 {
123                         get
124                         {
125                                 return WIDTH_VGA_SET[ (int)ePreviewType ];
126                         }
127                 }
128                 private int height_vga_set
129                 {
130                         get
131                         {
132                                 return HEIGHT_VGA_SET[ (int)ePreviewType ];
133                         }
134                 }
135                 private int width_hd_set
136                 {
137                         get
138                         {
139                                 return WIDTH_HD_SET[ (int)ePreviewType ];
140                         }
141                 }
142                 private int height_hd_set
143                 {
144                         get
145                         {
146                                 return HEIGHT_HD_SET[ (int)ePreviewType ];
147                         }
148                 }
149                 private int width_fhd_limit
150                 {
151                         get
152                         {
153                                 return WIDTH_FHD_LIMIT[ (int)ePreviewType ];
154                         }
155                 }
156                 private int height_fhd_limit
157                 {
158                         get
159                         {
160                                 return HEIGHT_FHD_LIMIT[ (int)ePreviewType ];
161                         }
162                 }
163                 private int width_fhd_set
164                 {
165                         get
166                         {
167                                 return WIDTH_FHD_SET[ (int)ePreviewType ];
168                         }
169                 }
170                 private int height_fhd_set
171                 {
172                         get
173                         {
174                                 return HEIGHT_FHD_SET[ (int)ePreviewType ];
175                         }
176                 }
177                 #endregion
178         }
179 }