OSDN Git Service

DTXManiaソリューション、DTXManiaプロジェクト、DTXCreatorプロジェクト、FDKプロジェクトについて英語化。
[dtxmania/dtxmania.git] / DTXMania / コード / 全体 / TextureFactory.cs
diff --git a/DTXMania/コード/全体/TextureFactory.cs b/DTXMania/コード/全体/TextureFactory.cs
new file mode 100644 (file)
index 0000000..98575fe
--- /dev/null
@@ -0,0 +1,150 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using FDK;
+using System.Drawing;
+
+namespace DTXMania
+{
+       public class TextureFactory
+       {
+
+               #region [ 汎用ヘルパー ]
+               //-----------------
+               #region [ tテクスチャの生成 ]
+               public static CTexture tテクスチャの生成(string fileName)
+               {
+                       return tテクスチャの生成(fileName, false);
+               }
+
+               public static CTexture tテクスチャの生成(string fileName, bool b黒を透過する)
+               {
+                       if (CDTXMania.Instance == null)
+                       {
+                               return null;
+                       }
+                       try
+                       {
+                               return new CTexture(CDTXMania.Instance.Device, fileName, CDTXMania.Instance.TextureFormat, b黒を透過する);
+                       }
+                       catch (CTextureCreateFailedException)
+                       {
+                               Trace.TraceError("テクスチャの生成に失敗しました。({0})", fileName);
+                               return null;
+                       }
+                       catch (FileNotFoundException)
+                       {
+                               Trace.TraceError("テクスチャファイルが見つかりませんでした。({0})", fileName);
+                               return null;
+                       }
+               }
+
+               public static CTextureAf tテクスチャの生成Af(string fileName)
+               {
+                       return tテクスチャの生成Af(fileName, false);
+               }
+
+               public static CTextureAf tテクスチャの生成Af(string fileName, bool b黒を透過する)
+               {
+                       if (CDTXMania.Instance == null)
+                       {
+                               return null;
+                       }
+                       try
+                       {
+                               return new CTextureAf(CDTXMania.Instance.Device, fileName, CDTXMania.Instance.TextureFormat, b黒を透過する);
+                       }
+                       catch (CTextureCreateFailedException)
+                       {
+                               Trace.TraceError("テクスチャの生成に失敗しました。({0})", fileName);
+                               return null;
+                       }
+                       catch (FileNotFoundException)
+                       {
+                               Trace.TraceError("テクスチャファイルが見つかりませんでした。({0})", fileName);
+                               return null;
+                       }
+               }
+
+               public static void tテクスチャの解放(ref CTexture tx)
+               {
+                       t安全にDisposeする(ref tx);
+               }
+
+               public static void tテクスチャの解放(ref CTextureAf tx)
+               {
+                       t安全にDisposeする(ref tx);
+               }
+
+               public static CTexture tテクスチャの生成(byte[] txData)
+               {
+                       return tテクスチャの生成(txData, false);
+               }
+
+               public static CTexture tテクスチャの生成(byte[] txData, bool b黒を透過する)
+               {
+                       if (CDTXMania.Instance == null)
+                       {
+                               return null;
+                       }
+                       if (txData == null)
+                       {
+                               Trace.TraceError("テクスチャの生成に失敗しました。(txData==null)");
+                               return null;
+                       }
+                       try
+                       {
+                               return new CTexture(CDTXMania.Instance.Device, txData, CDTXMania.Instance.TextureFormat, b黒を透過する);
+                       }
+                       catch (CTextureCreateFailedException)
+                       {
+                               Trace.TraceError("テクスチャの生成に失敗しました。(txData)");
+                               return null;
+                       }
+               }
+
+               public static CTexture tテクスチャの生成(Bitmap bitmap)
+               {
+                       return tテクスチャの生成(bitmap, false);
+               }
+
+               public static CTexture tテクスチャの生成(Bitmap bitmap, bool b黒を透過する)
+               {
+                       if (CDTXMania.Instance == null)
+                       {
+                               return null;
+                       }
+                       if (bitmap == null)
+                       {
+                               Trace.TraceError("テクスチャの生成に失敗しました。(bitmap==null)");
+                               return null;
+                       }
+                       try
+                       {
+                               return new CTexture(CDTXMania.Instance.Device, bitmap, CDTXMania.Instance.TextureFormat, b黒を透過する);
+                       }
+                       catch (CTextureCreateFailedException)
+                       {
+                               Trace.TraceError("テクスチャの生成に失敗しました。(bitmap:{0}x{1} )", bitmap.Width, bitmap.Height);
+                               return null;
+                       }
+               }
+               #endregion
+
+               /// <summary>プロパティ、インデクサには ref は使用できないので注意。</summary>
+               public static void t安全にDisposeする<T>(ref T obj)
+               {
+                       if (obj == null)
+                               return;
+
+                       var d = obj as IDisposable;
+
+                       if (d != null)
+                               d.Dispose();
+
+                       obj = default(T);
+               }
+               //-----------------
+               #endregion
+       }
+}