Я создал метод, который может объединять список изображений, чтобы они тоже образовывали одно изображение.
Код может обрабатывать только 4 изображения прямо сейчас, которые я хочу изменить, чтобы он мог обрабатывать более 4 *.
Я пытаюсь создать простой способ сделать это.
Вот код и дайте мне знать, если есть хороший простой способ сделать это.
public static byte[] CombineImages(params string[] imageUrl)
{
var staticWidth = 200;
var staticHeight = 200;
// download the images from the url and then resize them
List<Bitmap> images = imageUrl
.Select((x, i) => i <= 3 ? GenerateThumbImage(GetImage(x), staticWidth, staticHeight) : null)
.Where(x => x != null).ToList();
var nIndex = 0;
var max_Height = 0;
var max_Width = 0;
var counter = 0;
foreach (var image in images)
{
max_Height = Math.Max(max_Height, image.Height);
if (counter <= 1)
max_Width += image.Width;
counter++;
}
// the container of the joined images
var imgContainer = new Bitmap(max_Width, imageUrl.Count() > 2 ? max_Height * 2 : max_Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var g = Graphics.FromImage(imgContainer);
g.Clear(Color.Transparent);
// and here is where i need your help to simplify it
// and make it more dynamic so it could handle more then 4 images
for (var i = 0; i < images.Count(); i++)
{
var img = images[i];
if (i == 0 || nIndex == 0)
{
g.DrawImage(img, new Point(0, i == 0 ? 0 : max_Height));
max_Width = img.Width;
}
else
{
g.DrawImage(img, new Point(max_Width, i > 2 ? max_Height : 0));
max_Width += img.Width;
}
if (nIndex >= 1)
nIndex = 0;
else nIndex++;
img.Dispose();
}
g.Dispose();
using (var memoryStream = new MemoryStream())
{
imgContainer.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
return memoryStream.ToArray();
//var base64String = Convert.ToBase64String(memoryStream.ToArray());
//img3.Dispose();
//return base64String;
}
}