По аналогии берите ваши картинки в список и меняете как угодно - случайную, например.
Логику я понимаю, но как это практически реализовать?
Сейчас я сделал следующим образом:
Тяну в список все файлы из дирриктории, далее увеличиваю на 100% случайную картинку, эта картинка выступает основной (самой крупной) в коллаже. Тем самым я решил проблему повторений основной (нижней) картинки. Но как решить проблему дублей 2х верхних? Сейчас основная картинка может и сверху дублироваться....
Вот так выглядит у меня ваш C# код:
//три любых картинки склеиваем в коллаж в зависимости от их размеров без нарушения пропорций
//сначала определяем самую широкую картинку - она будет нижней, третьей
//потом скейлим вторую картинку под высоту первой
//затем скейлим третью картинку под ширину первой+второй
List <string> images = Directory.GetFiles(project.Directory + "/my_path").ToList();
int max = 0;
int index = -1;
for (int i = 0; i < images.Count; i++) {
Image img = Image.FromFile(images
);
if (img.Width > max) {
max= img.Width;
index = i;
}
}
Image img3 = Image.FromFile(project.Variables["big_img"].Value);
images.RemoveAt(index);
Random rnd = new Random();
index = rnd.Next(0, images.Count);
Image img1 = Image.FromFile(images[index]);
images.RemoveAt(index);
Image img2 = Image.FromFile(images[0]);
//вычисляем все размеры
float scale2 = (float)img2.Height / img2.Width; //пропорции второй картинки
int newheight2 = img1.Height; //новая высота второй картинки
int newidth2 = (int)(newheight2 / scale2); //новая ширина второй картинки
int newidth3 = (int)(newidth2 + img1.Width); //новая ширина третьей картинки
float scale3 = (float) img3.Height / img3.Width; //пропорции третьей картинки
int newheight3 = (int)(newidth3 * scale3); //новая высота третьей картинки
int newheight = (int)(img1.Height + newheight3); //высота всего коллажа
//создаём битмапу найденных размеров
Bitmap bmp = new Bitmap(newidth3, newheight);
Graphics g = Graphics.FromImage(bmp);
//вклеиваем картинки по одной
g.DrawImage(img1, 0, 0, img1.Width, img1.Height);
g.DrawImage(img2, img1.Width, 0, newidth2, newheight2);
g.DrawImage(img3, 0, img1.Height, newidth3, newheight3);
bmp.Save(project.Directory + @"\Collage\" + project.Variables["collage_fertig"].Value + " - img_name.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
g.Dispose();
bmp.Dispose();
img1.Dispose();
img2.Dispose();
img3.Dispose();