// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.IO; using SharpDX.IO; using SharpDX.Win32; namespace SharpDX.WIC { public partial class BitmapDecoder { private WICStream internalWICStream; /// /// Initializes a new instance of the class from a . /// /// The bitmap decoder info. /// HRESULT IWICBitmapDecoderInfo::CreateInstance([Out, Fast] IWICBitmapDecoder** ppIBitmapDecoder) public BitmapDecoder(BitmapDecoderInfo bitmapDecoderInfo) { bitmapDecoderInfo.CreateInstance(this); } /// /// Initializes a new instance of the class from a guid. for a list of default supported decoder. /// /// The factory. /// The container format GUID. /// HRESULT IWICImagingFactory::CreateDecoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, Guid containerFormatGuid) { factory.CreateDecoder(containerFormatGuid, null, this); } /// /// Initializes a new instance of the class. /// /// The factory. /// The container format GUID. /// The GUID vendor ref. /// HRESULT IWICImagingFactory::CreateDecoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, Guid containerFormatGuid, System.Guid guidVendorRef) { factory.CreateDecoder(containerFormatGuid, guidVendorRef, this); } /// /// Initializes a new instance of the class from a . /// /// The factory. /// The stream ref. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, IStream streamRef, SharpDX.WIC.DecodeOptions metadataOptions) { factory.CreateDecoderFromStream(streamRef, null, metadataOptions, this); } /// /// Initializes a new instance of the class from a . /// /// The factory. /// The stream ref. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, Stream streamRef, SharpDX.WIC.DecodeOptions metadataOptions) { internalWICStream = new WICStream(factory, streamRef); factory.CreateDecoderFromStream(internalWICStream, null, metadataOptions, this); } /// /// Initializes a new instance of the class from a . /// /// The factory. /// The stream ref. /// The GUID vendor ref. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, IStream streamRef, System.Guid guidVendorRef, SharpDX.WIC.DecodeOptions metadataOptions) { factory.CreateDecoderFromStream(streamRef, guidVendorRef, metadataOptions, this); } /// /// Initializes a new instance of the class from a . /// /// The factory. /// The stream ref. /// The GUID vendor ref. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, Stream streamRef, System.Guid guidVendorRef, SharpDX.WIC.DecodeOptions metadataOptions) { internalWICStream = new WICStream(factory, streamRef); factory.CreateDecoderFromStream(internalWICStream, guidVendorRef, metadataOptions, this); } /// /// Initializes a new instance of the class from a file in read mode. /// /// The factory. /// The filename. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, string filename, SharpDX.WIC.DecodeOptions metadataOptions) : this(factory, filename, null, NativeFileAccess.Read, metadataOptions) { } /// /// Initializes a new instance of the class from a file. /// /// The factory. /// The filename. /// The desired access. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, string filename, NativeFileAccess desiredAccess, SharpDX.WIC.DecodeOptions metadataOptions) : this(factory, filename, null, desiredAccess, metadataOptions) { } /// /// Initializes a new instance of the class from a file. /// /// The factory. /// The filename. /// The GUID vendor ref. /// The desired access. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, string filename, System.Guid? guidVendorRef, NativeFileAccess desiredAccess, SharpDX.WIC.DecodeOptions metadataOptions) { factory.CreateDecoderFromFilename(filename, guidVendorRef, (int)desiredAccess, metadataOptions, this); } /// /// Initializes a new instance of the class from a file stream. /// /// The factory. /// The filename. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromFileHandle([In] unsigned int hFile,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, NativeFileStream fileStream, SharpDX.WIC.DecodeOptions metadataOptions) { factory.CreateDecoderFromFileHandle(fileStream.Handle, null, metadataOptions, this); } /// /// Initializes a new instance of the class from a file stream. /// /// The factory. /// The filename. /// The GUID vendor ref. /// The metadata options. /// HRESULT IWICImagingFactory::CreateDecoderFromFileHandle([In] unsigned int hFile,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) public BitmapDecoder(ImagingFactory factory, NativeFileStream fileStream, System.Guid guidVendorRef, SharpDX.WIC.DecodeOptions metadataOptions) { factory.CreateDecoderFromFileHandle(fileStream.Handle, guidVendorRef, metadataOptions, this); } /// /// Initializes the decoder with the provided stream. /// /// The stream to use for initialization. /// The cache options. /// If the method succeeds, it returns . Otherwise, it throws an exception. /// HRESULT IWICBitmapDecoder::Initialize([In, Optional] IStream* pIStream,[In] WICDecodeOptions cacheOptions) public void Initialize(IStream stream, SharpDX.WIC.DecodeOptions cacheOptions) { if (this.internalWICStream != null) throw new InvalidOperationException("This instance is already initialized with an existing stream"); Initialize_(stream, cacheOptions); } protected override unsafe void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { if (this.internalWICStream != null) internalWICStream.Dispose(); internalWICStream = null; } } /// /// Get the of the image (if any) /// /// The factory for creating new color contexts /// The color context array, or null /// /// When the image format does not support color contexts, /// is returned. /// /// HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[Out, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) public Result TryGetColorContexts(ImagingFactory imagingFactory, out ColorContext[] colorContexts) { return ColorContextsHelper.TryGetColorContexts(GetColorContexts, imagingFactory, out colorContexts); } /// /// Get the of the image (if any) /// /// /// null if the decoder does not support color contexts; /// otherwise an array of zero or more ColorContext objects /// /// HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[Out, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] public ColorContext[] TryGetColorContexts(ImagingFactory imagingFactory) { return ColorContextsHelper.TryGetColorContexts(GetColorContexts, imagingFactory); } [Obsolete("Use TryGetColorContexts instead")] public ColorContext[] ColorContexts { get { return new ColorContext[0]; } } } }