public ImageFileInfo(string filename) { Stream stream; bool isFile = false; Type = MC_FILE_TYPE.UNKNOWN; try { if (File.Exists(filename)) { Type = FileType.Get(filename); stream = new FileStream(filename, FileMode.Open, FileAccess.Read); isFile = true; } else { var assm = Assembly.GetExecutingAssembly(); stream = assm.GetManifestResourceStream(filename); Type = FileType.Get(stream); isFile = false; } //画像を読み込む System.Drawing.Image img = System.Drawing.Image.FromStream(stream); Width = img.Width; Height = img.Height; } catch { if (Type == MC_FILE_TYPE.DDS) { IScratchImage si; if (isFile) { si = DirectXTexNet.DirectXTex.LoadFromDDSFile(filename, DDSFlags.FORCE_RGB); } else { si = DirectXTexNet.DirectXTex.LoadFromDDSResource(filename, DDSFlags.FORCE_RGB); } MetadataDDS = si.MetaData; Width = (int)si.MetaData.width; Height = (int)si.MetaData.height; si.Dispose(); } else { throw new Exception("不明な画像フォーマット"); } } }
/// <summary> /// WICを使用してビットマップをロードします。 /// </summary> /// <param name="factory"></param> /// <param name="filename">ファイル名またはリソース名</param> /// <param name="fileType"></param> /// <returns></returns> protected static BitmapSource LoadBitmap(ImagingFactory2 factory, string filename, out MC_FILE_TYPE fileType) { BitmapDecoder bitmapDecoder = null; fileType = MC_FILE_TYPE.UNKNOWN; if (File.Exists(filename)) { fileType = FileType.Get(filename); try { bitmapDecoder = new BitmapDecoder( factory, filename, DecodeOptions.CacheOnDemand ); } catch { if (fileType == MC_FILE_TYPE.DDS) { return(LoadDDS(factory, filename)); } } } else { var assm = Assembly.GetExecutingAssembly(); Stream stream = assm.GetManifestResourceStream(filename); fileType = FileType.Get(stream); try { bitmapDecoder = new BitmapDecoder( factory, stream, DecodeOptions.CacheOnDemand ); if (fileType == MC_FILE_TYPE.UNKNOWN) { if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Jpeg)) { fileType = MC_FILE_TYPE.JPG; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Bmp)) { fileType = MC_FILE_TYPE.BMP; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Png)) { fileType = MC_FILE_TYPE.PNG; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Emf)) { fileType = MC_FILE_TYPE.EMF; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Exif)) { fileType = MC_FILE_TYPE.EXIF; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Gif)) { fileType = MC_FILE_TYPE.GIF; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Icon)) { fileType = MC_FILE_TYPE.ICON; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Tiff)) { fileType = MC_FILE_TYPE.TIFF; } if (bitmapDecoder.ContainerFormat.Equals(ImageFormat.Wmf)) { fileType = MC_FILE_TYPE.WMF; } } } catch { if (fileType == MC_FILE_TYPE.DDS) { return(LoadDDS(factory, filename, stream)); } } //stream.Dispose(); } var formatConverter = new FormatConverter(factory); formatConverter.Initialize( bitmapDecoder.GetFrame(0), SharpDX.WIC.PixelFormat.Format32bppPRGBA, BitmapDitherType.None, null, 0.0, BitmapPaletteType.Custom); return(formatConverter); }