static Guid[] GetAllPixelFormats() { List <Guid> res = new List <Guid>(); IWICImagingFactory factory = (IWICImagingFactory) new WICImagingFactory(); IEnumUnknown eu = factory.CreateComponentEnumerator(WICComponentType.WICPixelFormat, WICComponentEnumerateOptions.WICComponentEnumerateRefresh); int hr = 0; object[] o = new object[1]; while (hr == 0) { uint fetched = 0; hr = eu.Next(1, o, ref fetched); if (fetched == 1) { IWICPixelFormatInfo info = (IWICPixelFormatInfo)o[0]; Guid guid; info.GetFormatGUID(out guid); res.Add(guid); info.ReleaseComObject(); } o.ReleaseComObject(); } return(res.ToArray()); }
public static IComObject <IEnumUnknown> CreateComponentEnumerator(this IWICImagingFactory factory, WICComponentType type = WICComponentType.WICAllComponents, WICComponentEnumerateOptions options = WICComponentEnumerateOptions.WICComponentEnumerateDefault) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } factory.CreateComponentEnumerator(type, options, out var value).ThrowOnError(); return(new ComObject <IEnumUnknown>(value)); }
public static IEnumerable <IComObject <IWICComponentInfo> > EnumerateComponents(this IWICImagingFactory factory, WICComponentType type, WICComponentEnumerateOptions options) { using (var enumerator = factory.CreateComponentEnumerator(type, options)) { do { var o = new object[1]; var fetched = 0; enumerator.Object.Next(1, o, ref fetched); if (fetched != 1) { break; } if (o[0] is IWICComponentInfo info) { yield return(new ComObject <IWICComponentInfo>(info)); } }while (true); } }
private static IEnumerable <IWICComponentInfo> GetComponentInfos(WICComponentType type) { IWICImagingFactory factory = (IWICImagingFactory) new WICImagingFactoryCoClass(); IEnumUnknown eu = null; object[] o = new object[1]; try { eu = factory.CreateComponentEnumerator(type, WICComponentEnumerateOptions.WICComponentEnumerateDefault); int hr = 0; while (hr == 0) { uint fetched = 0; hr = eu.Next(1, o, ref fetched); Marshal.ThrowExceptionForHR(hr); if (fetched == 1) { IWICComponentInfo ci = (IWICComponentInfo)o[0]; try { yield return(ci); } finally { Marshal.ReleaseComObject(ci); } } } } finally { if (eu != null) { Marshal.ReleaseComObject(eu); } Marshal.ReleaseComObject(factory); } }
public static IEnumerable <IWICComponentInfo> GetComponentInfos(WICComponentType type) { IWICImagingFactory factory = (IWICImagingFactory) new WICImagingFactory(); IEnumUnknown eu = null; object[] o = new object[1]; try { eu = factory.CreateComponentEnumerator(type, WICComponentEnumerateOptions.WICComponentEnumerateRefresh | WICComponentEnumerateOptions.WICComponentEnumerateDisabled); int hr = 0; while (hr == 0) { uint fetched = 0; hr = eu.Next(1, o, ref fetched); Marshal.ThrowExceptionForHR(hr); if (fetched == 1) { IWICComponentInfo ci = (IWICComponentInfo)o[0]; try { yield return(ci); } finally { ci.ReleaseComObject(); } } } } finally { factory.ReleaseComObject(); eu.ReleaseComObject(); } }
static IEnumerable <IWICBitmapEncoderInfo> EnumEncoders(IWICImagingFactory wic) { return(wic.CreateComponentEnumerator(WICComponentType.WICEncoder, WICComponentEnumerateOptions.WICComponentEnumerateDefault) .AsEnumerable() .OfType <IWICBitmapEncoderInfo>()); }