OSDN Git Service

#34192 BGAとAVIの表示に関する問題を修正
authorchnmr0 <chnmr0@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 16 Nov 2015 14:44:47 +0000 (14:44 +0000)
committerchnmr0 <chnmr0@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 16 Nov 2015 14:44:47 +0000 (14:44 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@877 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏AVI.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏BGA.cs
実行時フォルダ(DTXCreator)/dll/FDK.dll
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll

index d322af7..ebf6f2e 100644 (file)
@@ -283,7 +283,8 @@ namespace DTXMania
                                        // 旧動画 (278x355以下)の場合と、それ以上の場合とで、拡大/表示位置補正ロジックを変えること。\r
                                        // 旧動画の場合は、「278x355の領域に表示される」ことを踏まえて扱う必要あり。\r
                                        // 例: 上半分だけ動画表示するような場合は・・・「上半分だけ」という表示意図を維持すべきか?それとも無視して全画面拡大すべきか??\r
-                                       // chnmr0 (2015/10/31) : フルスクリーンかどうかにかかわらず、表示領域いっぱいにアス比保持で拡縮します。\r
+                                       // chnmr0 : プレビューの場合表示領域いっぱいにアス比保持で拡縮します。\r
+                                       //          プレビューでない場合単純に縦横2倍、位置変更なしで表示します。\r
 \r
                                        float magX = 1, magY = 1;\r
                                        int xx = x, yy = y;\r
@@ -294,18 +295,27 @@ namespace DTXMania
                                                xx = 0;\r
                                                yy = 0;\r
                                        }\r
+\r
                                        #region [ アスペクト比を維持した拡大縮小 ]\r
                                        magX = (float)areaDrawingWidth / this.rAVI.avi.nフレーム幅;\r
                                        magY = (float)areaDrawingHeight / this.rAVI.avi.nフレーム高さ;\r
-                                       if (magX > magY)\r
+                                       if (!bFullScreenMovie && !bIsPreviewMovie )\r
                                        {\r
-                                               magX = magY;\r
-                                               xx += (int)((areaDrawingWidth - (this.rAVI.avi.nフレーム幅 * magY)) / 2);\r
+                                               magX = magY = 2;\r
                                        }\r
                                        else\r
                                        {\r
-                                               magY = magX;\r
-                                               yy += (int)((areaDrawingHeight - (this.rAVI.avi.nフレーム高さ * magX)) / 2);\r
+                                               // フルスクリーンまたはプレビュー\r
+                                               if (magX > magY)\r
+                                               {\r
+                                                       magX = magY;\r
+                                                       xx += (int)((areaDrawingWidth - (this.rAVI.avi.nフレーム幅 * magY)) / 2);\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       magY = magX;\r
+                                                       yy += (int)((areaDrawingHeight - (this.rAVI.avi.nフレーム高さ * magX)) / 2);\r
+                                               }\r
                                        }\r
                                        #endregion\r
 \r
index 3ab7407..4279b7e 100644 (file)
@@ -178,138 +178,170 @@ namespace DTXMania
                                                Point ptDispEnd = this.stLayer[ i ].pt表示側終了位置;\r
                                                long timeTotal = this.stLayer[ i ].n総移動時間ms;\r
                                                long timeMoveStart = this.stLayer[ i ].n移動開始時刻ms;\r
+                                               \r
                                                if( CDTXMania.Timer.n現在時刻 < timeMoveStart )\r
                                                {\r
                                                        timeMoveStart = CDTXMania.Timer.n現在時刻;\r
                                                }\r
                                                // Size size3 = new Size( 0x116, 0x163 );\r
-                                               Size size3 = new Size(556, 710);\r
-                                               // #34192 2015/10/30 (chnrm0)\r
+                                               Size size表示域 = new Size(556, 710);\r
+                                               // chnrm0 : #34192\r
                                                // 表示域を2倍に変更した。\r
                                                // x,yについては次のように変更した。\r
                                                // 338,57 => 1014+139,128 (Dr.) 139は278の半分で、GR領域の中央によせるためにすこし右側にずらした。\r
                                                // 181,50 => 682, 112 (Gt.)\r
-                                               Size size4 = new Size( ( this.stLayer[ i ].rBMP != null ) ? this.stLayer[ i ].rBMP.n幅 : this.stLayer[ i ].rBMPTEX.tx画像.sz画像サイズ.Width, ( this.stLayer[ i ].rBMP != null ) ? this.stLayer[ i ].rBMP.n高さ : this.stLayer[ i ].rBMPTEX.tx画像.sz画像サイズ.Height );\r
-                                               int num4 = (int) ( ( CDTXMania.Timer.n現在時刻 - timeMoveStart ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
-                                               if( ( timeTotal != 0 ) && ( timeTotal < num4 ) )\r
+                                               Size sizeBMP = new Size(\r
+                                                       ( this.stLayer[ i ].rBMP != null ) ? this.stLayer[ i ].rBMP.n幅 : this.stLayer[ i ].rBMPTEX.tx画像.sz画像サイズ.Width,\r
+                                                       ( this.stLayer[ i ].rBMP != null ) ? this.stLayer[ i ].rBMP.n高さ : this.stLayer[ i ].rBMPTEX.tx画像.sz画像サイズ.Height );\r
+\r
+                                               int n再生位置 = (int) ( ( CDTXMania.Timer.n現在時刻 - timeMoveStart ) * ( ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );\r
+                                               \r
+                                               if( ( timeTotal != 0 ) && ( timeTotal < n再生位置 ) )\r
                                                {\r
                                                        this.stLayer[ i ].pt画像側開始位置 = ptImgStart = ptImgEnd;\r
                                                        this.stLayer[ i ].pt表示側開始位置 = ptDispStart = ptDispEnd;\r
                                                        this.stLayer[ i ].sz開始サイズ = sizeStart = sizeEnd;\r
                                                        this.stLayer[ i ].n総移動時間ms = timeTotal = 0;\r
                                                }\r
-                                               Rectangle rectangle = new Rectangle();\r
-                                               Rectangle rectangle2 = new Rectangle();\r
+                                               \r
+                                               Rectangle rect画像側 = new Rectangle();\r
+                                               Rectangle rect表示側 = new Rectangle();\r
+                                               \r
                                                if( timeTotal == 0 )\r
                                                {\r
-                                                       rectangle.X = ptImgStart.X;\r
-                                                       rectangle.Y = ptImgStart.Y;\r
-                                                       rectangle.Width = sizeStart.Width;\r
-                                                       rectangle.Height = sizeStart.Height;\r
-                                                       rectangle2.X = ptDispStart.X;\r
-                                                       rectangle2.Y = ptDispStart.Y;\r
-                                                       rectangle2.Width = sizeStart.Width;\r
-                                                       rectangle2.Height = sizeStart.Height;\r
+                                                       rect画像側.X = ptImgStart.X;\r
+                                                       rect画像側.Y = ptImgStart.Y;\r
+                                                       rect画像側.Width = sizeStart.Width;\r
+                                                       rect画像側.Height = sizeStart.Height;\r
+                                                       rect表示側.X = ptDispStart.X;\r
+                                                       rect表示側.Y = ptDispStart.Y;\r
+                                                       rect表示側.Width = sizeStart.Width;\r
+                                                       rect表示側.Height = sizeStart.Height;\r
                                                }\r
                                                else\r
                                                {\r
-                                                       double coefSizeWhileMoving = ( (double) num4 ) / ( (double) timeTotal );\r
+                                                       double coefSizeWhileMoving = ( (double) n再生位置 ) / ( (double) timeTotal );\r
                                                        Size sizeWhileMoving = new Size( sizeStart.Width + ( (int) ( ( sizeEnd.Width - sizeStart.Width ) * coefSizeWhileMoving ) ), sizeStart.Height + ( (int) ( ( sizeEnd.Height - sizeStart.Height ) * coefSizeWhileMoving ) ) );\r
-                                                       rectangle.X = ptImgStart.X + ( (int) ( ( ptImgEnd.X - ptImgStart.X ) * coefSizeWhileMoving ) );\r
-                                                       rectangle.Y = ptImgStart.Y + ( (int) ( ( ptImgEnd.Y - ptImgStart.Y ) * coefSizeWhileMoving ) );\r
-                                                       rectangle.Width = sizeWhileMoving.Width;\r
-                                                       rectangle.Height = sizeWhileMoving.Height;\r
-                                                       rectangle2.X = ptDispStart.X + ( (int) ( ( ptDispEnd.X - ptDispStart.X ) * coefSizeWhileMoving ) );\r
-                                                       rectangle2.Y = ptDispStart.Y + ( (int) ( ( ptDispEnd.Y - ptDispStart.Y ) * coefSizeWhileMoving ) );\r
-                                                       rectangle2.Width = sizeWhileMoving.Width;\r
-                                                       rectangle2.Height = sizeWhileMoving.Height;\r
+                                                       rect画像側.X = ptImgStart.X + ( (int) ( ( ptImgEnd.X - ptImgStart.X ) * coefSizeWhileMoving ) );\r
+                                                       rect画像側.Y = ptImgStart.Y + ( (int) ( ( ptImgEnd.Y - ptImgStart.Y ) * coefSizeWhileMoving ) );\r
+                                                       rect画像側.Width = sizeWhileMoving.Width;\r
+                                                       rect画像側.Height = sizeWhileMoving.Height;\r
+                                                       rect表示側.X = ptDispStart.X + ( (int) ( ( ptDispEnd.X - ptDispStart.X ) * coefSizeWhileMoving ) );\r
+                                                       rect表示側.Y = ptDispStart.Y + ( (int) ( ( ptDispEnd.Y - ptDispStart.Y ) * coefSizeWhileMoving ) );\r
+                                                       rect表示側.Width = sizeWhileMoving.Width;\r
+                                                       rect表示側.Height = sizeWhileMoving.Height;\r
                                                }\r
-                                               if( ( ( ( rectangle.Right > 0 ) && ( rectangle.Bottom > 0 ) ) && ( ( rectangle.Left < size4.Width ) && ( rectangle.Top < size4.Height ) ) ) && ( ( ( rectangle2.Right > 0 ) && ( rectangle2.Bottom > 0 ) ) && ( ( rectangle2.Left < size3.Width ) && ( rectangle2.Top < size3.Height ) ) ) )\r
+                                               if(\r
+                                                       ( rect画像側.Right > 0 ) &&\r
+                                                       ( rect画像側.Bottom > 0 ) &&\r
+                                                       ( rect画像側.Left < sizeBMP.Width ) &&\r
+                                                       ( rect画像側.Top < sizeBMP.Height ) && \r
+                                                       ( rect表示側.Right > 0 ) &&\r
+                                                       ( rect表示側.Bottom > 0 ) &&\r
+                                                       ( rect表示側.Left < size表示域.Width ) &&\r
+                                                       ( rect表示側.Top < size表示域.Height )\r
+                                                       )\r
                                                {\r
-                                                       if( rectangle.X < 0 )\r
+                                                       // 画像側の表示指定が画像の境界をまたいでいる場合補正\r
+                                                       if( rect画像側.X < 0 )\r
                                                        {\r
-                                                               rectangle2.Width -= -rectangle.X;\r
-                                                               rectangle2.X += -rectangle.X;\r
-                                                               rectangle.Width -= -rectangle.X;\r
-                                                               rectangle.X = 0;\r
+                                                               rect表示側.Width -= -rect画像側.X;\r
+                                                               rect表示側.X += -rect画像側.X;\r
+                                                               rect画像側.Width -= -rect画像側.X;\r
+                                                               rect画像側.X = 0;\r
                                                        }\r
-                                                       if( rectangle.Y < 0 )\r
+                                                       if( rect画像側.Y < 0 )\r
                                                        {\r
-                                                               rectangle2.Height -= -rectangle.Y;\r
-                                                               rectangle2.Y += -rectangle.Y;\r
-                                                               rectangle.Height -= -rectangle.Y;\r
-                                                               rectangle.Y = 0;\r
+                                                               rect表示側.Height -= -rect画像側.Y;\r
+                                                               rect表示側.Y += -rect画像側.Y;\r
+                                                               rect画像側.Height -= -rect画像側.Y;\r
+                                                               rect画像側.Y = 0;\r
                                                        }\r
-                                                       if( rectangle.Right > size4.Width )\r
+                                                       if( rect画像側.Right > sizeBMP.Width )\r
                                                        {\r
-                                                               rectangle2.Width -= rectangle.Right - size4.Width;\r
-                                                               rectangle.Width -= rectangle.Right - size4.Width;\r
+                                                               rect表示側.Width -= rect画像側.Right - sizeBMP.Width;\r
+                                                               rect画像側.Width -= rect画像側.Right - sizeBMP.Width;\r
                                                        }\r
-                                                       if( rectangle.Bottom > size4.Height )\r
+                                                       if( rect画像側.Bottom > sizeBMP.Height )\r
                                                        {\r
-                                                               rectangle2.Height -= rectangle.Bottom - size4.Height;\r
-                                                               rectangle.Height -= rectangle.Bottom - size4.Height;\r
+                                                               rect表示側.Height -= rect画像側.Bottom - sizeBMP.Height;\r
+                                                               rect画像側.Height -= rect画像側.Bottom - sizeBMP.Height;\r
                                                        }\r
-                                                       if( rectangle2.X < 0 )\r
+\r
+                                                       // 表示側の表示指定が表示域の境界をまたいでいる場合補正\r
+                                                       if( rect表示側.X < 0 )\r
                                                        {\r
-                                                               rectangle.Width -= -rectangle2.X;\r
-                                                               rectangle.X += -rectangle2.X;\r
-                                                               rectangle2.Width -= rectangle2.X;\r
-                                                               rectangle2.X = 0;\r
+                                                               rect画像側.Width -= -rect表示側.X;\r
+                                                               rect画像側.X += -rect表示側.X;\r
+                                                               rect表示側.Width -= rect表示側.X;\r
+                                                               rect表示側.X = 0;\r
                                                        }\r
-                                                       if( rectangle2.Y < 0 )\r
+                                                       if( rect表示側.Y < 0 )\r
                                                        {\r
-                                                               rectangle.Height -= -rectangle2.Y;\r
-                                                               rectangle.Y += -rectangle2.Y;\r
-                                                               rectangle2.Height -= -rectangle2.Y;\r
-                                                               rectangle2.Y = 0;\r
+                                                               rect画像側.Height -= -rect表示側.Y;\r
+                                                               rect画像側.Y += -rect表示側.Y;\r
+                                                               rect表示側.Height -= -rect表示側.Y;\r
+                                                               rect表示側.Y = 0;\r
                                                        }\r
-                                                       if( rectangle2.Right > size3.Width )\r
+                                                       if( rect表示側.Right > size表示域.Width )\r
                                                        {\r
-                                                               rectangle.Width -= rectangle2.Right - size3.Width;\r
-                                                               rectangle2.Width -= rectangle2.Right - size3.Width;\r
+                                                               rect画像側.Width -= rect表示側.Right - size表示域.Width;\r
+                                                               rect表示側.Width -= rect表示側.Right - size表示域.Width;\r
                                                        }\r
-                                                       if( rectangle2.Bottom > size3.Height )\r
+                                                       if( rect表示側.Bottom > size表示域.Height )\r
                                                        {\r
-                                                               rectangle.Height -= rectangle2.Bottom - size3.Height;\r
-                                                               rectangle2.Height -= rectangle2.Bottom - size3.Height;\r
+                                                               rect画像側.Height -= rect表示側.Bottom - size表示域.Height;\r
+                                                               rect表示側.Height -= rect表示側.Bottom - size表示域.Height;\r
                                                        }\r
-                                                       if( ( ( ( ( rectangle.Left < rectangle.Right ) && ( rectangle.Top < rectangle.Bottom ) ) && ( ( rectangle2.Left < rectangle2.Right ) && ( rectangle2.Top < rectangle2.Bottom ) ) ) && ( ( ( rectangle.Right >= 0 ) && ( rectangle.Bottom >= 0 ) ) && ( ( rectangle.Left <= size4.Width ) && ( rectangle.Top <= size4.Height ) ) ) ) && ( ( ( rectangle2.Right >= 0 ) && ( rectangle2.Bottom >= 0 ) ) && ( ( rectangle2.Left <= size3.Width ) && ( rectangle2.Top <= size3.Height ) ) ) )\r
+\r
+                                                       if ((rect表示側.Width * 2 <= size表示域.Width) && (rect表示側.Height * 2 <= size表示域.Height))\r
                                                        {\r
-                                                               bool b2倍可能 = false;\r
-                                                               if( ( rectangle2.Left * 2 <= size3.Width ) && (rectangle2.Top * 2 <= size3.Height ) )\r
+                                                               // 2倍可能\r
+                                                               if ((this.stLayer[i].rBMP != null) && (this.stLayer[i].rBMP.tx画像 != null))\r
+                                                               {\r
+                                                                       this.stLayer[i].rBMP.tx画像.vc拡大縮小倍率 = new Vector3(2f, 2f, 1f);\r
+                                                                       rect表示側.X *= 2;\r
+                                                                       rect表示側.Y *= 2;\r
+                                                               }\r
+                                                               else if ((this.stLayer[i].rBMPTEX != null) && (this.stLayer[i].rBMPTEX.tx画像 != null))\r
                                                                {\r
-                                                                       b2倍可能 = true;\r
+                                                                       this.stLayer[i].rBMPTEX.tx画像.vc拡大縮小倍率 = new Vector3(2f, 2f, 1f);\r
+                                                                       rect表示側.X *= 2;\r
+                                                                       rect表示側.Y *= 2;\r
                                                                }\r
+                                                       }\r
+\r
+                                                       if(\r
+                                                               ( rect画像側.Width > 0 ) &&\r
+                                                               ( rect画像側.Height > 0 ) &&\r
+                                                               ( rect表示側.Width > 0 ) && \r
+                                                               ( rect表示側.Height > 0 ) &&\r
+\r
+                                                               ( rect画像側.Right >= 0 ) &&\r
+                                                               ( rect画像側.Bottom >= 0 ) &&\r
+                                                               ( rect画像側.Left <= sizeBMP.Width ) &&\r
+                                                               ( rect画像側.Top <= sizeBMP.Height ) &&\r
+                                                               ( rect表示側.Right >= 0 ) &&\r
+                                                               ( rect表示側.Bottom >= 0 ) &&\r
+                                                               ( rect表示側.Left <= size表示域.Width ) &&\r
+                                                               ( rect表示側.Top <= size表示域.Height )\r
+                                                               )\r
+                                                       {\r
                                                                if ( ( this.stLayer[ i ].rBMP != null ) && ( this.stLayer[ i ].rBMP.tx画像 != null ) )\r
                                                                {\r
-                                                                       //this.stLayer[ i ].rBMP.tx画像.vc拡大縮小倍率 = new Vector3( Scale.X, Scale.Y, 1f );\r
-                                                                       if (b2倍可能)\r
-                                                                       {\r
-                                                                               this.stLayer[i].rBMP.tx画像.vc拡大縮小倍率 = new Vector3(2f, 2f, 1f);\r
-                                                                               rectangle2.X *= 2;\r
-                                                                               rectangle2.Y *= 2;\r
-                                                                       }\r
                                                                        this.stLayer[ i ].rBMP.tx画像.t2D描画(\r
                                                                                CDTXMania.app.Device,\r
-                                                                               (x + rectangle2.X),\r
-                                                                               (y + rectangle2.Y),\r
-                                                                               rectangle );\r
+                                                                               (x + rect表示側.X),\r
+                                                                               (y + rect表示側.Y),\r
+                                                                               rect画像側 );\r
                                                                }\r
                                                                else if( ( this.stLayer[ i ].rBMPTEX != null ) && ( this.stLayer[ i ].rBMPTEX.tx画像 != null ) )\r
                                                                {\r
-                                                                       //this.stLayer[ i ].rBMPTEX.tx画像.vc拡大縮小倍率 = new Vector3( Scale.X, Scale.Y, 1f );\r
-                                                                       if (b2倍可能)\r
-                                                                       {\r
-                                                                               this.stLayer[i].rBMPTEX.tx画像.vc拡大縮小倍率 = new Vector3(2f, 2f, 1f);\r
-                                                                               rectangle2.X *= 2;\r
-                                                                               rectangle2.Y *= 2;\r
-                                                                       }\r
                                                                        this.stLayer[ i ].rBMPTEX.tx画像.t2D描画(\r
                                                                                CDTXMania.app.Device,\r
-                                                                               (x + rectangle2.X),\r
-                                                                               (y + rectangle2.Y),\r
-                                                                               rectangle );\r
+                                                                               (x + rect表示側.X),\r
+                                                                               (y + rect表示側.Y),\r
+                                                                               rect画像側 );\r
                                                                }\r
                                                        }\r
                                                }\r
index b10dd16..c21a688 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ
index 40f9fc2..26095a3 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index b10dd16..c21a688 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ