private void Check(MainForm form, IWICFormatConverterInfo info, object tag) { Guid[] pixelFormats = PixelFormatInfoRule.CheckPixelFormats(form, this, info.GetPixelFormats); Type type = Type.GetTypeFromCLSID(Parent.Clsid); if (type == null) { form.Add(this, Resources.PixelFormatConverterNotCreatable); } else { IWICImagingFactory factory = (IWICImagingFactory) new WICImagingFactory(); foreach (Guid g in pixelFormats) { bool supportsTo = false; bool supportsFrom = false; foreach (Guid c in canonical) { supportsTo |= CheckConvertion(form, info, g, c); supportsFrom |= CheckConvertion(form, info, c, g); } if (!supportsTo) { form.Add(this, Resources.ToCannonicalNotSupported, new DataEntry(Resources.PixelFormat, g)); } if (!supportsFrom) { form.Add(this, Resources.FromCannonicalNotSupported, new DataEntry(Resources.PixelFormat, g)); } } } }
private bool CheckConvertion(MainForm form, IWICFormatConverterInfo info, Guid from, Guid to) { if (from == to) { return(true); } IWICImagingFactory factory = (IWICImagingFactory) new WICImagingFactory(); IWICPalette palette = factory.CreatePalette(); palette.InitializePredefined(WICBitmapPaletteType.WICBitmapPaletteTypeFixedBW, false); IWICBitmap bitmap = null; IWICFormatConverter converter = null; try { try { converter = info.CreateInstance(); } catch (Exception e) { form.Add(this, e.TargetSite.ToString(Resources._0_Failed), new DataEntry(e)); return(false); } try { bitmap = factory.CreateBitmap(1, 1, from, WICBitmapCreateCacheOption.WICBitmapCacheOnLoad); bitmap.SetPalette(palette); } catch (Exception e) { form.Add(this, e.TargetSite.ToString(Resources._0_Failed), new DataEntry(e), new DataEntry(Resources.PixelFormat, from)); return(false); } try { converter.Initialize(bitmap, to, WICBitmapDitherType.WICBitmapDitherTypeNone, palette, 0, WICBitmapPaletteType.WICBitmapPaletteTypeCustom); } catch (Exception e) { form.CheckHRESULT(this, WinCodecError.WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT, e, new DataEntry(Resources.Source, from), new DataEntry(Resources.Destination, to)); return(false); } return(true); } finally { palette.ReleaseComObject(); converter.ReleaseComObject(); bitmap.ReleaseComObject(); factory.ReleaseComObject(); } }
public static IComObject <IWICFormatConverter> CreateInstance(this IWICFormatConverterInfo info) { if (info == null) { throw new ArgumentNullException(nameof(info)); } info.CreateInstance(out var converter).ThrowOnError(); return(new ComObject <IWICFormatConverter>(converter)); }
public static Guid[] GetPixelFormats(this IWICFormatConverterInfo formatConverterInfo) { return(FetchIntoBufferHelper.FetchArray <Guid>(formatConverterInfo.GetPixelFormats)); }
public static Guid[] GetPixelFormats(this IWICFormatConverterInfo formatConverterInfo) { FetchIntoBuffer <Guid> fetcher = formatConverterInfo.GetPixelFormats; return(fetcher.FetchArray()); }