コード例 #1
0
        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("不明な画像フォーマット");
                }
            }
        }
コード例 #2
0
        /// <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);
        }