예제 #1
0
        public WicPixelFormatConverter(object comObject)
            : base(comObject)
        {
            using (var info = new ComObjectWrapper <IWICFormatConverterInfo>(comObject))
            {
                info.Object.GetPixelFormats(0, null, out var len);
                var pf = new Guid[len];
                if (len > 0)
                {
                    info.Object.GetPixelFormats(len, pf, out _);
                }

                PixelFormats      = pf;
                _pixelFormatsList = new Lazy <IReadOnlyList <WicPixelFormat> >(GetPixelFormatsList, true);
            }
        }
예제 #2
0
        protected WicMetadataHandler(object comObject)
            : base(comObject)
        {
            using (var info = new ComObjectWrapper <IWICMetadataHandlerInfo>(comObject))
            {
                info.Object.GetMetadataFormat(out Guid guid);
                Guid = guid;

                info.Object.GetDeviceManufacturer(0, null, out var len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetDeviceManufacturer(len + 1, sb, out _);
                    DeviceManufacturer = sb.ToString();
                }

                info.Object.GetDeviceModels(0, null, out len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetDeviceModels(len + 1, sb, out _);
                    DeviceModels = sb.ToString();
                }

                info.Object.GetContainerFormats(0, null, out var count);
                if (count > 0)
                {
                    var guids = new Guid[count];
                    if (info.Object.GetContainerFormats(count, guids, out _) == 0)
                    {
                        ContainerFormats = guids;
                    }
                }

                ContainerFormats = ContainerFormats ?? Array.Empty <Guid>();

                info.Object.DoesRequireFullStream(out var b);
                RequiresFullStream = b;

                info.Object.DoesSupportPadding(out b);
                SupportsPadding = b;

                info.Object.DoesRequireFixedSize(out b);
                RequiresFixedSize = b;
            }
        }
예제 #3
0
        protected WicImagingComponent(object comObject)
        {
            var wrapper = new ComObjectWrapper <IWICComponentInfo>(comObject);

            wrapper.Object.GetCLSID(out Guid guid);
            Clsid = guid;

            wrapper.Object.GetSigningStatus(out var status);
            SigningStatus = status;

            wrapper.Object.GetComponentType(out var type);
            Type = type;

            wrapper.Object.GetFriendlyName(0, null, out var len);
            if (len >= 0)
            {
                var sb = new StringBuilder(len);
                wrapper.Object.GetFriendlyName(len + 1, sb, out _);
                FriendlyName = sb.ToString();
            }

            wrapper.Object.GetAuthor(0, null, out len);
            if (len >= 0)
            {
                var sb = new StringBuilder(len);
                wrapper.Object.GetAuthor(len + 1, sb, out _);
                Author = sb.ToString();
            }

            wrapper.Object.GetVersion(0, null, out len);
            if (len >= 0)
            {
                var sb = new StringBuilder(len);
                wrapper.Object.GetVersion(len + 1, sb, out _);
                Version = sb.ToString();
            }

            wrapper.Object.GetSpecVersion(0, null, out len);
            if (len >= 0)
            {
                var sb = new StringBuilder(len);
                wrapper.Object.GetSpecVersion(len + 1, sb, out _);
                SpecVersion = sb.ToString();
            }
        }
예제 #4
0
        public WicBitmapLock(object comObject)
        {
            using (var wrapper = new ComObjectWrapper <IWICBitmapLock>(comObject))
            {
                wrapper.Object.GetDataPointer(out var size, out var ptr);
                DataSize    = size;
                DataPointer = ptr;

                wrapper.Object.GetPixelFormat(out var format);
                PixelFormat = WicImagingComponent.FromClsid <WicPixelFormat>(format);

                wrapper.Object.GetSize(out var width, out var height);
                Width  = width;
                Height = height;

                wrapper.Object.GetStride(out var stride);
                Stride = stride;
            }
        }
예제 #5
0
        public WicPixelFormat(object comObject)
            : base(comObject)
        {
            using (var info = new ComObjectWrapper <IWICPixelFormatInfo2>(comObject))
            {
                info.Object.GetFormatGUID(out var guid);
                Guid = guid;

                info.Object.GetChannelCount(out var i);
                ChannelCount = (int)i;

                info.Object.GetBitsPerPixel(out i);
                BitsPerPixel = (int)i;

                info.Object.GetNumericRepresentation(out var nr);
                NumericRepresentation = nr;

                info.Object.SupportsTransparency(out bool b);
                SupportsTransparency = b;
            }
        }
예제 #6
0
파일: WicCodec.cs 프로젝트: smourier/WicNet
        protected WicCodec(object comObject)
            : base(comObject)
        {
            using (var info = new ComObjectWrapper <IWICBitmapCodecInfo>(comObject).ComObject)
            {
                _pixelFormatsList = new Lazy <IReadOnlyList <WicPixelFormat> >(GetPixelFormatsList, true);
                info.Object.GetContainerFormat(out Guid guid);
                ContainerFormat = guid;

                info.Object.GetFileExtensions(0, null, out var len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetFileExtensions(len + 1, sb, out _);
                    FileExtensions = sb.ToString();
                }

                info.Object.GetColorManagementVersion(0, null, out len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetColorManagementVersion(len + 1, sb, out _);
                    ColorManagementVersion = sb.ToString();
                }

                info.Object.GetDeviceManufacturer(0, null, out len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetDeviceManufacturer(len + 1, sb, out _);
                    DeviceManufacturer = sb.ToString();
                }

                info.Object.GetDeviceModels(0, null, out len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetDeviceModels(len + 1, sb, out _);
                    DeviceModels = sb.ToString();
                }

                info.Object.GetMimeTypes(0, null, out len);
                if (len >= 0)
                {
                    var sb = new StringBuilder(len);
                    info.Object.GetMimeTypes(len + 1, sb, out _);
                    MimeTypes = sb.ToString();
                }

                info.Object.DoesSupportAnimation(out bool b);
                SupportsAnimation = b;

                info.Object.DoesSupportChromakey(out b);
                SupportsChromakey = b;

                info.Object.DoesSupportLossless(out b);
                SupportsLossless = b;

                info.Object.DoesSupportMultiframe(out b);
                SupportsMultiframe = b;

                FileExtensionsList = FileExtensions.SplitToList(',').Select(s => s.ToLowerInvariant()).OrderBy(s => s).ToList().AsReadOnly();
                MimeTypesList      = MimeTypes.SplitToList(',').OrderBy(s => s).ToList().AsReadOnly();

                info.Object.GetPixelFormats(0, null, out len);
                if (len > 0)
                {
                    var pf = new Guid[len];
                    info.Object.GetPixelFormats(len, pf, out _).ThrowOnError();
                    PixelFormats = pf;
                }
                else
                {
                    PixelFormats = Array.Empty <Guid>();
                }
            }
        }