Ejemplo n.º 1
0
        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));
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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());
        }