public WicImageContainer(IWICBitmapDecoder *dec, SafeHandle?src, FileFormat fmt) { WicDecoder = dec; handle = src; uint fcount; HRESULT.Check(dec->GetFrameCount(&fcount)); FrameCount = (int)fcount; ContainerFormat = fmt; }
public static WicImageContainer Create(IWICBitmapDecoder *dec, SafeHandle?src = null) { var guid = default(Guid); HRESULT.Check(dec->GetContainerFormat(&guid)); var fmt = WicImageDecoder.FormatMap.GetValueOrDefault(guid, FileFormat.Unknown); if (fmt == FileFormat.Gif) { return(new WicGifContainer(dec, src)); } return(new WicImageContainer(dec, src, fmt)); }
public WicGifContainer(IWICBitmapDecoder *dec, SafeHandle?src) : base(dec, src, FileFormat.Gif) { using var meta = default(ComPtr <IWICMetadataQueryReader>); HRESULT.Check(dec->GetMetadataQueryReader(meta.GetAddressOf())); ScreenWidth = meta.GetValueOrDefault <ushort>(Wic.Metadata.Gif.LogicalScreenWidth); ScreenHeight = meta.GetValueOrDefault <ushort>(Wic.Metadata.Gif.LogicalScreenHeight); if (meta.GetValueOrDefault <bool>(Wic.Metadata.Gif.GlobalPaletteFlag)) { using var pal = default(ComPtr <IWICPalette>); HRESULT.Check(Wic.Factory->CreatePalette(pal.GetAddressOf())); HRESULT.Check(dec->CopyPalette(pal)); uint pcc; HRESULT.Check(pal.Get()->GetColorCount(&pcc)); uint idx = meta.GetValueOrDefault <byte>(Wic.Metadata.Gif.BackgroundColorIndex); if (idx < pcc) { using var buff = new PoolBuffer <uint>((int)pcc); fixed(uint *pbuff = buff.Span) { HRESULT.Check(pal.Get()->GetColors(pcc, pbuff, &pcc)); BackgroundColor = pbuff[idx]; } } } var sbuff = (Span <byte>) stackalloc byte[16]; var appext = meta.GetValueOrDefault(Wic.Metadata.Gif.AppExtension, sbuff); if (appext.Length == 11 && netscape2_0.SequenceEqual(appext) || animexts1_0.SequenceEqual(appext)) { var appdata = meta.GetValueOrDefault(Wic.Metadata.Gif.AppExtensionData, sbuff); if (appdata.Length >= 4 && appdata[0] >= 3 && appdata[1] == 1) { LoopCount = BinaryPrimitives.ReadUInt16LittleEndian(appdata.Slice(2)); } } }
public int CreateFastMetadataEncoderFromDecoder([NativeTypeName("IWICBitmapDecoder *")] IWICBitmapDecoder *pIDecoder, [NativeTypeName("IWICFastMetadataEncoder **")] IWICFastMetadataEncoder **ppIFastEncoder) { return(((delegate * unmanaged[Stdcall] < IWICImagingFactory2 *, IWICBitmapDecoder *, IWICFastMetadataEncoder **, int >)(lpVtbl[24]))((IWICImagingFactory2 *)Unsafe.AsPointer(ref this), pIDecoder, ppIFastEncoder)); }
public HRESULT CreateFastMetadataEncoderFromDecoder(IWICBitmapDecoder *pIDecoder, IWICFastMetadataEncoder **ppIFastEncoder) { return(((delegate * unmanaged <IWICComponentFactory *, IWICBitmapDecoder *, IWICFastMetadataEncoder **, int>)(lpVtbl[24]))((IWICComponentFactory *)Unsafe.AsPointer(ref this), pIDecoder, ppIFastEncoder)); }