Пример #1
0
        public void LoadImageSequenceData(Stream stream, ImageSequence sequence)
        {
            lock (locker)
            {
                System.Drawing.Image image;
                try
                {
                    image = System.Drawing.Image.FromStream(stream);
                }
                catch
                {
                    return;
                }

                sequence.Frames.Clear();
                sequence.FrameTimesMs.Clear();

                var dimension = new System.Drawing.Imaging.FrameDimension(image.FrameDimensionsList[0]);
                // Number of frames
                int frameCount = image.GetFrameCount(dimension);

                if (frameCount > 1)
                {
                    var minFrameTimeMs = int.MaxValue;
                    for (var i = 0; i < frameCount; i++)
                    {
                        // Return an Image at a certain index
                        image.SelectActiveFrame(dimension, i);
                        ImageBuffer imageBuffer = new ImageBuffer();
                        if (ImageIOWindowsPlugin.ConvertBitmapToImage(imageBuffer, new Bitmap(image)))
                        {
                            var frameDelay = BitConverter.ToInt32(image.GetPropertyItem(20736).Value, i * 4) * 10;

                            sequence.AddImage(imageBuffer, frameDelay);
                            minFrameTimeMs = Math.Max(10, Math.Min(frameDelay, minFrameTimeMs));
                        }
                    }
                    var item = image.GetPropertyItem(0x5100);                     // FrameDelay in libgdiplus
                    // Time is in milliseconds
                    sequence.SecondsPerFrame = minFrameTimeMs / 1000.0;
                }
                else
                {
                    ImageBuffer imageBuffer = new ImageBuffer();
                    if (ImageIOWindowsPlugin.ConvertBitmapToImage(imageBuffer, new Bitmap(image)))
                    {
                        sequence.AddImage(imageBuffer);
                    }
                }
            }
        }
        public void LoadSequence(string pathToImages, ImageSequence sequence)
        {
            if (DirectoryExists(pathToImages))
            {
                string propertiesPath = Path.Combine(pathToImages, "properties.json");
                if (FileExists(propertiesPath))
                {
                    string jsonData = ReadAllText(propertiesPath);

                    var properties = JsonConvert.DeserializeObject <ImageSequence.Properties>(jsonData);
                    sequence.FramePerSecond = properties.FramePerFrame;
                    sequence.Looping        = properties.Looping;
                }

                var pngFiles = GetFiles(pathToImages).Where(fileName => Path.GetExtension(fileName).ToUpper() == ".PNG").OrderBy(s => s);
                foreach (string path in pngFiles)
                {
                    ImageBuffer image = LoadImage(path);
                    sequence.AddImage(image);
                }
            }
        }
Пример #3
0
        public ImageSequence LoadSequence(string path)
        {
            ImageSequence sequence = null;

            if (DirectoryExists(path))
            {
                sequence = new ImageSequence();
                string propertiesPath = Path.Combine(path, "properties.json");
                if (FileExists(propertiesPath))
                {
                    string jsonData = ReadAllText(propertiesPath);

                    var properties = JsonConvert.DeserializeObject <ImageSequence.Properties>(jsonData);
                    sequence.FramesPerSecond = properties.FramePerFrame;
                    sequence.Looping         = properties.Looping;
                }

                var pngFiles = GetFiles(path).Where(fileName => Path.GetExtension(fileName).ToUpper() == ".PNG").OrderBy(s => s);
                foreach (string pngPath in pngFiles)
                {
                    ImageBuffer image = LoadImage(pngPath);
                    sequence.AddImage(image);
                }
            }
            else if (this.FileExists(path) &&
                     string.Equals(Path.GetExtension(path), ".gif", StringComparison.OrdinalIgnoreCase))
            {
                sequence = new ImageSequence();

                using (var fileStream = this.OpenStream(path))
                {
                    LoadImageSequenceData(fileStream, sequence);
                }
            }

            return(sequence);
        }
Пример #4
0
        public void LoadSequence(string pathToImages, ImageSequence sequence)
        {
            if (DirectoryExists(pathToImages))
            {
                string propertiesPath = Path.Combine(pathToImages, "properties.json");
                if (FileExists(propertiesPath))
                {
                    string jsonData = ReadAllText(propertiesPath);
                    ImageSequence.Properties properties = JsonConvert.DeserializeObject <ImageSequence.Properties>(jsonData);
                    sequence.FramePerSecond = properties.FramePerFrame;
                    sequence.Looping        = properties.Looping;
                }

                string[]      pngFilesIn = GetFiles(pathToImages).Where(fileName => Path.GetExtension(fileName).ToUpper() == ".PNG").ToArray();
                List <string> pngFiles   = new List <string>(pngFilesIn);
                pngFiles.Sort();
                foreach (string pngFile in pngFiles)
                {
                    ImageBuffer image = new ImageBuffer();
                    LoadImage(pngFile, image);
                    sequence.AddImage(image);
                }
            }
        }