Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Масштабирорвание или - как приблизить или отдалить картинку

14K
08 февраля 2006 года
Хиларион
6 / / 08.02.2006
Уважаеммые программисты, помогите с графикой.

Задача в следующем:
- загрузить картинку типа *.jpg или *.bmp и отобразить
- организовать возможность приближения и отдаления изображения
( как в любом вьюивере - zoom / out )

Я загружал картинку в TImage (непрорпорциональный).
Создал TBitmap, загрузил картинку и в него.

Потом при приближении копировал небольшую область битмапа
на весь Image, при этом он автоматически растягивался до его
размера. При уменьшении примерно тоже самое только наобарот.

Использовал - Image.Canvas.CopyRect();

При этом возникала проблема - когда я отдалял картинку больше её
размера, пикселы наслаивальсь друг на друга и выглядло это всё очень плохо.

Кто знает что можно сделать, может есть готовые рещения или методы?
5
08 февраля 2006 года
hardcase
4.5K / / 09.08.2005
Вот тебе один из вариантов - написан на GDI+
Код:
Procedure OnPaint(DC: HDC);
var
  graphics : TGPGraphics;
  Image: TGPImage;
const

  destinationPoints : array[0..2] of TGPPoint =
   ((x: 0; y: 0),  // destination for upper-left point of original
    (x: 100; y: 0),  // destination for upper-right point of original
    (x: 0; y: 50)); // destination for lower-left point of original

begin
  graphics := TGPGraphics.Create(DC);
  Image:= TGPImage.Create('..\..\Media\FRUIT.JPG');

  // Draw the image unaltered with its upper-left corner at (0, 0).
  graphics.DrawImage(image, 0, 0);

  // Draw the image mapped to owr rect
  graphics.DrawImage(image, PGPPoint(@destinationPoints), 3);

  Image.Free;
  graphics.Free;
end;
14K
18 февраля 2006 года
Хиларион
6 / / 08.02.2006
Спасибо попробую. А в тот раз выкрутилися примерно следующим образом:

Компоненту TImage свойства Stretch=True, Proportional=False.

var
Form1: TForm1;
w,h,ow,oh:integer;
k:real;

implementation {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if not fileexists(edit1.Text) then exit;
image1.Picture.LoadFromFile(edit1.Text);
image1.Width:=image1.Picture.Width;
image1.Height:=image1.picture.Height;
h:=image1.picture.Height; oh:=h;
w:=image1.Picture.Width; ow:=w;
K:=w/h;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
h:=h+10; w:=round(k*h);
image1.Width:=w; image1.Height:=h;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
h:=h-10; w:=round(k*h);
image1.Width:=w; image1.Height:=h;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
image1.Width:=ow;
image1.Height:=oh;
end;

end.
302
21 февраля 2006 года
Sagittarius
648 / / 12.04.2003
Я делал следующим образом:
1. кидаешь на форму TScrollBox
2. в сколбокс кидаешь TImage
TImage.Stretch := true;

После остается только менять размеры TImage.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог