Ejemplo n.º 1
0
        /// <summary>
        /// Returns the format information. The header of the image in the array of bytes is used to
        /// determine the format.
        /// </summary>
        /// <param name="data">The array of bytes to read the image header from.</param>
        /// <returns>The format information.</returns>
        public static MagickFormatInfo?Create(byte[] data)
        {
            Throw.IfNullOrEmpty(nameof(data), data);

            var instance = new NativeMagickFormatInfo();

            instance.GetInfoWithBlob(data, data.Length);

            return(Create(instance));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns the format information. The header of the image in the span of bytes is used to
        /// determine the format.
        /// </summary>
        /// <param name="data">The span of bytes to read the image header from.</param>
        /// <returns>The format information.</returns>
        public static MagickFormatInfo?Create(ReadOnlySpan <byte> data)
        {
            Throw.IfEmpty(nameof(data), data);

            var instance = new NativeMagickFormatInfo();

            instance.GetInfoWithBlob(data, data.Length);

            return(Create(instance));
        }
Ejemplo n.º 3
0
        private static Dictionary <MagickFormat, MagickFormatInfo> LoadFormats()
        {
            var result = new Dictionary <MagickFormat, MagickFormatInfo>();

            var list     = IntPtr.Zero;
            var length   = (UIntPtr)0;
            var instance = new NativeMagickFormatInfo();

            try
            {
                list = instance.CreateList(out length);

                var ptr = list;
                MagickFormatInfo formatInfo;
                for (int i = 0; i < (int)length; i++)
                {
                    instance.GetInfo(list, i);

                    formatInfo = Create(instance);
                    if (formatInfo != null)
                    {
                        result[formatInfo.Format] = formatInfo;
                    }

                    ptr = new IntPtr(ptr.ToInt64() + i);
                }

                /* stealth coders */

                formatInfo = Create(instance, "DIB");
                if (formatInfo != null)
                {
                    result[formatInfo.Format] = formatInfo;
                }

                formatInfo = Create(instance, "TIF");
                if (formatInfo != null)
                {
                    result[formatInfo.Format] = formatInfo;
                }
            }
            finally
            {
                if (list != IntPtr.Zero)
                {
                    NativeMagickFormatInfo.DisposeList(list, (int)length);
                }
            }

            return(result);
        }
Ejemplo n.º 4
0
        private static void AddStealthCoders(NativeMagickFormatInfo instance, Dictionary <MagickFormat, MagickFormatInfo> formats)
        {
            var formatInfo = Create(instance, "DIB");

            if (formatInfo != null)
            {
                formats[formatInfo.Format] = formatInfo;
            }

            formatInfo = Create(instance, "TIF");
            if (formatInfo != null)
            {
                formats[formatInfo.Format] = formatInfo;
            }
        }
Ejemplo n.º 5
0
        private static MagickFormatInfo Create(NativeMagickFormatInfo instance)
        {
            MagickFormatInfo formatInfo = new MagickFormatInfo();

            formatInfo.Format                = GetFormat(instance.Format);
            formatInfo.Description           = instance.Description;
            formatInfo.CanReadMultithreaded  = instance.CanReadMultithreaded;
            formatInfo.CanWriteMultithreaded = instance.CanWriteMultithreaded;
            formatInfo.IsMultiFrame          = instance.IsMultiFrame;
            formatInfo.IsReadable            = instance.IsReadable;
            formatInfo.IsWritable            = instance.IsWritable;
            formatInfo.MimeType              = instance.MimeType;
            formatInfo.Module                = GetFormat(instance.Module);

            return(formatInfo);
        }
Ejemplo n.º 6
0
        private static MagickFormatInfo Create(NativeMagickFormatInfo instance)
        {
            if (!instance.HasInstance)
            {
                return(null);
            }

            return(new MagickFormatInfo
            {
                Format = GetFormat(instance.Format),
                Description = instance.Description,
                CanReadMultithreaded = instance.CanReadMultithreaded,
                CanWriteMultithreaded = instance.CanWriteMultithreaded,
                IsMultiFrame = instance.IsMultiFrame,
                IsReadable = instance.IsReadable,
                IsWritable = instance.IsWritable,
                MimeType = instance.MimeType,
                ModuleFormat = GetFormat(instance.Module),
            });
        }
Ejemplo n.º 7
0
        private static Dictionary <MagickFormat, MagickFormatInfo> LoadFormats()
        {
            var formats = new Dictionary <MagickFormat, MagickFormatInfo>();

            var list     = IntPtr.Zero;
            var length   = (UIntPtr)0;
            var instance = new NativeMagickFormatInfo();

            try
            {
                list = instance.CreateList(out length);

                var ptr = list;
                for (int i = 0; i < (int)length; i++)
                {
                    instance.GetInfo(list, i);

                    var formatInfo = Create(instance);
                    if (formatInfo != null)
                    {
                        formats[formatInfo.Format] = formatInfo;
                    }

                    ptr = new IntPtr(ptr.ToInt64() + i);
                }

                AddStealthCoders(instance, formats);
            }
            finally
            {
                if (list != IntPtr.Zero)
                {
                    NativeMagickFormatInfo.DisposeList(list, (int)length);
                }
            }

            return(formats);
        }
Ejemplo n.º 8
0
 private static MagickFormatInfo Create(NativeMagickFormatInfo instance, string name)
 {
     instance.GetInfoByName(name);
     return(Create(instance));
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Unregisters this format.
 /// </summary>
 /// <returns>True when the format was found and unregistered.</returns>
 public bool Unregister()
 => NativeMagickFormatInfo.Unregister(EnumHelper.GetName(Format));