예제 #1
0
        public unsafe static ImageInfo?FromStream(Stream stream)
        {
            int width, height, comp;
            var context = new StbImage.stbi__context(stream);

            var is16Bit = StbImage.stbi__is_16_main(context) == 1;

            StbImage.stbi__rewind(context);

            var infoResult = StbImage.stbi__info_main(context, &width, &height, &comp);

            StbImage.stbi__rewind(context);

            if (infoResult == 0)
            {
                return(null);
            }

            return(new ImageInfo
            {
                Width = width,
                Height = height,
                ColorComponents = (ColorComponents)comp,
                BitsPerChannel = is16Bit ? 16 : 8
            });
        }
        public AnimatedGifEnumerator(Stream input, ColorComponents colorComponents)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            _context = new StbImage.stbi__context(input);

            if (StbImage.stbi__gif_test(_context) == 0)
            {
                throw new Exception("Input stream is not GIF file.");
            }

            _gif            = new StbImage.stbi__gif();
            ColorComponents = colorComponents;
        }
예제 #3
0
        public static unsafe ImageResultFloat FromStream(Stream stream, ColorComponents requiredComponents = ColorComponents.Default)
        {
            float *result = null;

            try
            {
                int x, y, comp;

                var context = new StbImage.stbi__context(stream);

                result = StbImage.stbi__loadf_main(context, &x, &y, &comp, (int)requiredComponents);

                return(FromResult(result, x, y, (ColorComponents)comp, requiredComponents));
            }
            finally
            {
                if (result != null)
                {
                    CRuntime.free(result);
                }
            }
        }