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); } } }
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); }
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); } } }