示例#1
0
        /// <summary>
        /// Sets a metadata item to a specific location.
        /// </summary>
        /// <param name="name">The name of the metadata item.</param>
        /// <param name="value">The metadata to set.</param>
        ///  <remarks>
        /// SetMetadataByName uses metadata query expressions to set metadata. For more information on the metadata query language, see the Metadata Query Language Overview.
        /// </remarks>
        public static void SetMetadataByName(this IWICMetadataQueryWriter metadataQueryWriter, string name, object value)
        {
            if (metadataQueryWriter is null)
            {
                throw new NullReferenceException();
            }
            if (name is null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (value is null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            var variant = PropVariantHelper.Encode(value);

            try
            {
                metadataQueryWriter.SetMetadataByName(name, ref variant);
            }
            finally
            {
                PropVariantHelper.Free(variant);
            }
        }
        public static bool TrySetMetadataByName(this IWICMetadataQueryWriter meta, string name, PropVariant value)
        {
            var pvMarshal = PropVariant.Marshaler.GetInstance(null);
            var pvNative  = pvMarshal.MarshalManagedToNative(value);
            int hr        = ProxyFunctions.SetMetadataByName(meta, name, pvNative);

            pvMarshal.CleanUpNativeData(pvNative);

            return(hr >= 0);
        }
        public static void RemoveMetadataByName(this IWICMetadataQueryWriter writer, string name)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            writer.RemoveMetadataByName(name).ThrowOnError();
        }
        public static void SetMetadataByName(this IWICMetadataQueryWriter writer, string name, object value, PropertyType?type = null)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            using (var pv = new PropVariant(value, type))
            {
                writer.SetMetadataByName(name, pv).ThrowOnError();
            }
        }
        public static void EncodeMetadata(this IWICMetadataQueryWriter writer, IEnumerable <WicMetadataKeyValue> metadata)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (metadata == null)
            {
                return;
            }

            if (!metadata.Any())
            {
                return;
            }

            WICImagingFactory.WithFactory(factory =>
            {
                foreach (var kv in metadata)
                {
                    if (kv.Value is IEnumerable <WicMetadataKeyValue> childMetadata)
                    {
                        if (!childMetadata.Any())
                        {
                            continue;
                        }

                        factory.CreateQueryWriter(kv.Key.Format, IntPtr.Zero, out var childWriter).ThrowOnError();
                        using (var pv = new PropVariant(childWriter))
                        {
                            var hr = writer.SetMetadataByName(kv.Key.Key, pv).ThrowOnError();
                        }
                        EncodeMetadata(childWriter, childMetadata);
                    }
                    else
                    {
                        using (var pv = new PropVariant(kv.Value, kv.Type))
                        {
                            var hr = writer.SetMetadataByName(kv.Key.Key, pv).ThrowOnError();
                        }
                    }
                }
            });
        }
        public static void SetMetadataByName(this IWICMetadataQueryWriter writer, string name, PropVariant pv)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (pv == null)
            {
                throw new ArgumentNullException(nameof(pv));
            }

            writer.SetMetadataByName(name, pv).ThrowOnError();
        }
        public static bool TrySetMetadataByName(this IWICMetadataQueryWriter meta, string name, PropVariant value)
        {
            int hr = ProxyFunctions.SetMetadataByName(meta, name, value);

            return(hr >= 0);
        }
        public static bool TryGetMetadataQueryWriter(this IWICBitmapFrameEncode frame, out IWICMetadataQueryWriter wri)
        {
            int hr = ProxyFunctions.GetMetadataQueryWriter(frame, out wri);

            return(hr >= 0);
        }
示例#9
0
        public static bool SetMetadataByNameNoThrow(this IWICMetadataQueryWriter meta, string name, PropVariant value)
        {
            int hr = SetMetadataByName(meta, name, value);

            return(hr >= 0);
        }
示例#10
0
 private extern static int SetMetadataByName(IWICMetadataQueryWriter THIS_PTR, [MarshalAs(UnmanagedType.LPWStr)] string wzName, [In, MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PropVariant.Marshaler))] PropVariant pvarValue);
示例#11
0
 private extern static int GetMetadataQueryWriter(IWICBitmapFrameEncode THIS_PTR, out IWICMetadataQueryWriter ppIMetadataQueryWriter);