Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2021, 17:00   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию Коллаж изображений

Есть массив
Код:
Img: array [1..21] of TImage
Изображения могут быть разного размера. Точнее на экране, все Image имеют одинаковые размеры, а вот сами изображения (то что загрузилось из файлов) - могут быть разного

Нужно сделать из них коллаж в несколько строчек, при этом приведя все изображения к одинаковым размерам

При чем нужно этот коллаж потом скопировать напрямую в буффер обмена, не сохраняя больше нигде
Kronos913 вне форума Ответить с цитированием
Старый 21.03.2021, 17:02   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Также, в поле Memo хранится список имен файлов этих изображений
Может быть, лучше работать с загрузкой фото
Kronos913 вне форума Ответить с цитированием
Старый 24.03.2021, 01:23   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Пока ждал ответ, методом проб и экспериментов вывел следующий алгоритм
Код:
const
 hx=300;

var
  bmp, bmp2: TBitMap;
  jpg: TJPEGImage;
  Rect: TRect;

  i, kl, x, y:byte;
  a, b: real;
Пропущен кусок кода, который уже является спецификой программы.

В переменной kl хранится количество фотографий
В Memo1 хранится список файлов

Код:
     if kl>0 then begin
       {Формирую количество горизонталей и вертикалей в коллаже}
       y:=trunc(sqrt(kl));
       x:=kl div y;
       if kl mod y > 0 then inc(x);
       
       {Включил переменные}
       jpg := TJPEGImage.Create;
       bmp := TBitmap.Create;
       bmp2 := TBitMap.Create;

       {Задал размеры коллажа}
       bmp2.Height:=hx*y;
       bmp2.Width:=hx*x;

       For i:=1 to kl do begin
        jpg.LoadFromFile(Form1.memo1.Lines[i]);
        bmp.Assign(jpg);
    
        {Определяю какое изображение - вертикальное, или горизонтальное}
        if bmp.Height<bmp.Width then begin
         a:=1;
         b:= bmp.Height / bmp.Width;
        end else begin
         a:=bmp.Width / bmp.Height;
         b:=1;
        end;

      {Собственно, копирование}
        with Rect do begin
           Left := hx*((i-1) mod x);
           Top := hx *((i-1) div x);
           Right := Left + trunc(hx*a);
           Bottom := Top + trunc(hx*b);
        end;
         
         
        bmp2.Canvas.StretchDraw(Rect, bmp);
       end;

       {Ну и в буфер его}
       Clipboard.Assign(bmp2);
       bmp2.Free;
       bmp.Free;
       jpg.Free;
     end;

Последний раз редактировалось Kronos913; 24.03.2021 в 01:30.
Kronos913 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLE загрузка изображений через дополнительное поле если кто может помочь по настройке этого поля,,,а точнее вывод со значением ''Загружаемая галерея изображений'' которое на фото,, armn555 Фриланс 0 23.08.2017 10:15
WPF + C# Подгрузка изображений в память, без блокирования файлов изображений fezilk25 C# (си шарп) 0 02.01.2014 11:28
Загрузка изображений Axell C# (си шарп) 4 06.06.2011 08:40
Хостинг изображений... Flippp PHP 1 21.04.2010 20:40