![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Цитата:
Почему так? |
|
#7
|
|||
|
|||
|
Почему при нажатии на кнопки картинка исчезает?:
Код:
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. |