Программа - это простой графический пользовательский интерфейс (GUI), написанный на Delphi, который позволяет пользователю загрузить файл изображения и затем масштабировать его либо по высоте, либо по ширине.
Процесс работы программы следующий:
Программа загружает файл изображения в компонент TImage с именем Image1.
Когда пользователь нажимает кнопку, процедура Button1Click выполняется.
Эта процедура рассчитывает текущую высоту и ширину изображения, а также их отношения к желаемым размерам (фиксированным в этом примере: 329x329 пикселей).
Программа затем определяет, нужно ли масштабировать изображение по высоте или ширине. Это делается сравнением отношения высоты изображения к его ширине с пороговым значением.
Если отношение больше 1, то это означает, что высота изображения больше ширины, поэтому программа масштабирует изображение вниз для включения в желаемые размеры, сохраняя соотношение сторон.
В противном случае, если отношение меньше или равно 1, то это означает, что ширина изображения больше высоты, поэтому программа масштабирует изображение по ширине.
После масштабирования изображения свойство Stretch компонента TImage устанавливается в True, что вызывает отображение изображения в его новых размерах.
Затем программа отображает сообщение об ошибке, указывающее, было ли изображение масштабировано по высоте или ширине.
Следующие предложения для улучшения программы:
Вместо фиксации желаемых размеровconsider позволить пользователю вводить эти значения в отдельном поле или диалоге.
Рассмотреть добавление болееadvanced масштабирования опций, таких как сохранение соотношения сторон, растяжение или уменьшение изображения без сохранения его пропорций и т.д.
Добавить обработку ошибок для случаев, когда файл не найден или изображение не может быть загружено.
Было бы полезно предоставить просмотр масштабированного изображения перед применением изменений.
Вот пример рефакторинга кода для его более динамического и пользовательского интерфейса:
typeTForm1=class(TForm)Image1:TImage;Edit1:TEdit;Button1:TButton;Bevel1:TBevel;procedureButton1Click(Sender:TObject);private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;implementation{$R *.DFM}procedureTForm1.Button1Click(Sender:TObject);varDesiredWidth,DesiredHeight:integer;ImageRatio:real;beginDesiredWidth:=StrToInt(Edit1.Text);DesiredHeight:=StrToInt(Edit2.Text);// add another edit field for heightImage1.Picture.LoadFromFile(Edit3.Text);// add an edit field for the file pathImage1.AutoSize:=True;ImageRatio:=Image1.Height/Image1.Width;if(ImageRatio>DesiredWidth/DesiredHeight)thenbeginImage1.Height:=trunc(Image1.Height*DesiredWidth/DesiredHeight);Image1.Width:=trunc(Image1.Width*DesiredWidth/DesiredHeight);Image1.Stretch:=True;//ShowMessage('Scaled by height');endelsebeginImage1.Height:=trunc(Image1.Height*DesiredHeight/DesiredWidth);Image1.Width:=trunc(Image1.Width*DesiredHeight/DesiredWidth);Image1.Stretch:=True;//ShowMessage('Scaled by width');end;// add a preview of the scaled image before applying the changesend;
В этом обновленном коде пользователь может вводить свои желаемые размеры и путь к файлу, что делает программу более гибкой и пользовательской. Он также сохраняет соотношение сторон изображения при масштабировании вниз для включения в желаемые размеры.
В статье рассматривается пример программирования масштабирования изображения по ширине или высоте в Delphi с помощью компонента TImage и описывается алгоритм решения этой задачи.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.