示例#1
0
        public static SoundInput FindFormat(Stream file)
        {
            uint signature = FormatCatalog.ReadSignature(file);

            for (;;)
            {
                var range = FormatCatalog.Instance.LookupSignature <AudioFormat> (signature);
                foreach (var impl in range)
                {
                    try
                    {
                        file.Position = 0;
                        SoundInput sound = impl.TryOpen(file);
                        if (null != sound)
                        {
                            return(sound);
                        }
                    }
                    catch (System.Exception X)
                    {
                        FormatCatalog.Instance.LastError = X;
                    }
                }
                if (0 == signature)
                {
                    break;
                }
                signature = 0;
            }
            return(null);
        }
示例#2
0
        public static System.Tuple <ImageFormat, ImageMetaData> FindFormat(Stream file, string filename = null)
        {
            if (file.Length < 4)
            {
                return(null);
            }
            uint          signature = FormatCatalog.ReadSignature(file);
            Lazy <string> ext       = null;

            if (!string.IsNullOrEmpty(filename))
            {
                ext = new Lazy <string> (() => Path.GetExtension(filename).TrimStart('.').ToLowerInvariant());
            }
            for (;;)
            {
                var range = FormatCatalog.Instance.LookupSignature <ImageFormat> (signature);
                // check formats that match filename extension first
                if (ext != null && range.Skip(1).Any())
                {
                    range = range.OrderByDescending(f => f.Extensions.Any(e => e == ext.Value));
                }
                foreach (var impl in range)
                {
                    try
                    {
                        file.Position = 0;
                        ImageMetaData metadata = impl.ReadMetaData(file);
                        if (null != metadata)
                        {
                            metadata.FileName = filename;
                            return(Tuple.Create(impl, metadata));
                        }
                    }
                    catch { }
                }
                if (0 == signature)
                {
                    break;
                }
                signature = 0;
            }
            return(null);
        }