X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=DTXMania%2F%E3%82%B3%E3%83%BC%E3%83%89%2F%E5%85%A8%E4%BD%93%2FTextureFactory.cs;fp=DTXMania%2F%E3%82%B3%E3%83%BC%E3%83%89%2F%E5%85%A8%E4%BD%93%2FTextureFactory.cs;h=98575fe289b4db8f04faf5d632453e09057ea3cf;hb=7bf3e650c7c6f5afac463ea6e288fcd3fad4387b;hp=0000000000000000000000000000000000000000;hpb=296446998eeba408353da55a275458b590e4ebf5;p=dtxmania%2Fdtxmania.git diff --git a/DTXMania/コード/全体/TextureFactory.cs b/DTXMania/コード/全体/TextureFactory.cs new file mode 100644 index 00000000..98575fe2 --- /dev/null +++ b/DTXMania/コード/全体/TextureFactory.cs @@ -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 + + /// プロパティ、インデクサには ref は使用できないので注意。 + public static void t安全にDisposeする(ref T obj) + { + if (obj == null) + return; + + var d = obj as IDisposable; + + if (d != null) + d.Dispose(); + + obj = default(T); + } + //----------------- + #endregion + } +}