|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Кнопки масштабирования изображения
Здравствуйте!
Подскажите пожалуйста, как сделать кнопки увеличения\уменьшения масштаба изображения, закруженного в image? |
#2
|
|||
|
|||
Ну, сами-то кнопки сделать легко.
А вот реакцию на их нажатие - сложно. В зависимости от потребностей, тебе придется использовать TImage с streach=true и самому пересчитывать размеры TImage, либо использовать TPaintBox и, соответсвенно, писать соответствующую отрисовку с нужным увеличением/уменьшением. |
#3
|
|||
|
|||
Цитата:
Допустим, картинка h=1825, w=1374. И если, например, я поставлю h=1798, то, как найти w? или наоборот, если w изменятся, то как найти h? |
#4
|
|||
|
|||
Вообще, просто заведи себе коэф. "увеличения".
Пусть у тебя оригинальная картинка (ее размер) лежит в ImgSize : TPoint (просто удобно использовать данный тип). Тогда: Код:
type TForm1 = class(TForm) ... Image1 : TImage; ... private ImgScale : Double; // default 1.0 - set in OnCreate ImgSize : TPoing; // Width and Height of original image, set when load image end; ... procedure TForm1.ResizeImage; begin Image1.Width := Round(ImgSize.x*ImgScale); Image1.Height := Round(ImgSize.y*ImgScale); end; procedure TForm1.btZoomInClick(Sender : TObject); begin ImgScale := ImgScale * 2; ResizeImage; end; procedure TForm1.btZoomOutClick(Sender : TObject); begin ImgScale := ImgScale / 2; ResizeImage; end; |
#5
|
||||
|
||||
Ещё вариант - использовать сторонние компоненты. Например, в EhLib-е есть соответствующий компонент с возможностью масштабирования. Но наилучшим из всех мне известных оказался ImageEn, вот он масштабирует очень качественно, и можно метод указать, с целью точной настройки между скоростью и качеством. При этом физические размеры самой картинки не меняются, меняется только масштаб отображения.
Последний раз редактировалось Guaho, 26.06.2019 в 20:18. |
#6
|
|||
|
|||
Почему при нажатии на кнопки картинка исчезает?:
Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ieview, imageenview, imageen, Vcl.StdCtrls, Vcl.ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ResizeImage; private { Private declarations } ImgScale : Double; // default 1.0 - set in OnCreate ImgSize : TPoint; // Width and Height of original image, set when load image public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ImgScale := ImgScale * 2; ResizeImage; end; procedure TForm1.Button2Click(Sender: TObject); begin ImgScale := ImgScale / 2; ResizeImage; end; procedure TForm1.ResizeImage; begin Image1.Width := Round(ImgSize.x*ImgScale); Image1.Height := Round(ImgSize.y*ImgScale); end; end. |
#7
|
|||
|
|||
Цитата:
Почему так? |
#8
|
||||
|
||||
Некоторые важные функции этого компонента почему-то не работают должным образом (по крайней мере, у меня это так). В частности, загрузить изображение получилось только из буфера обмена (загрузка из файла и из потока - не работает):
Код:
image1.Proc.PasteFromClipboard; Последний раз редактировалось Guaho, 13.07.2019 в 14:36. |