| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | using MediaBrowser.Common.IO;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.IO;using CommonIO;namespace Emby.Drawing.GDI{    public static class DynamicImageHelpers    {        public static void CreateThumbCollage(List<string> files,            IFileSystem fileSystem,            string file,            int width,            int height)        {            const int numStrips = 4;            files = ImageHelpers.ProjectPaths(files, numStrips);            const int rows = 1;            int cols = numStrips;            int cellWidth = 2 * (width / 3);            int cellHeight = height;            var index = 0;            using (var img = new Bitmap(width, height, PixelFormat.Format32bppPArgb))            {                using (var graphics = Graphics.FromImage(img))                {                    graphics.CompositingQuality = CompositingQuality.HighQuality;                    graphics.SmoothingMode = SmoothingMode.HighQuality;                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;                    graphics.CompositingMode = CompositingMode.SourceCopy;                    for (var row = 0; row < rows; row++)                    {                        for (var col = 0; col < cols; col++)                        {                            var x = col * (cellWidth / 2);                            var y = row * cellHeight;                            if (files.Count > index)                            {                                using (var fileStream = fileSystem.GetFileStream(files[index], FileMode.Open, FileAccess.Read, FileShare.Read, true))                                {                                    using (var memoryStream = new MemoryStream())                                    {                                        fileStream.CopyTo(memoryStream);                                        memoryStream.Position = 0;                                        using (var imgtemp = Image.FromStream(memoryStream, true, false))                                        {                                            graphics.DrawImage(imgtemp, x, y, cellWidth, cellHeight);                                        }                                    }                                }                            }                            index++;                        }                    }                    img.Save(file);                }            }        }        public static void CreateSquareCollage(List<string> files,            IFileSystem fileSystem,            string file,            int width,            int height)        {            files = ImageHelpers.ProjectPaths(files, 4);            const int rows = 2;            const int cols = 2;            int singleSize = width / 2;            var index = 0;            using (var img = new Bitmap(width, height, PixelFormat.Format32bppPArgb))            {                using (var graphics = Graphics.FromImage(img))                {                    graphics.CompositingQuality = CompositingQuality.HighQuality;                    graphics.SmoothingMode = SmoothingMode.HighQuality;                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;                    graphics.CompositingMode = CompositingMode.SourceCopy;                    for (var row = 0; row < rows; row++)                    {                        for (var col = 0; col < cols; col++)                        {                            var x = col * singleSize;                            var y = row * singleSize;                            using (var fileStream = fileSystem.GetFileStream(files[index], FileMode.Open, FileAccess.Read, FileShare.Read, true))                            {                                using (var memoryStream = new MemoryStream())                                {                                    fileStream.CopyTo(memoryStream);                                    memoryStream.Position = 0;                                    using (var imgtemp = Image.FromStream(memoryStream, true, false))                                    {                                        graphics.DrawImage(imgtemp, x, y, singleSize, singleSize);                                    }                                }                            }                            index++;                        }                    }                    img.Save(file);                }            }        }        private static Stream GetStream(Image image)        {            var ms = new MemoryStream();            image.Save(ms, ImageFormat.Png);            ms.Position = 0;            return ms;        }    }}
 |