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;
Масштабирорвание или - как приблизить или отдалить картинку
Задача в следующем:
- загрузить картинку типа *.jpg или *.bmp и отобразить
- организовать возможность приближения и отдаления изображения
( как в любом вьюивере - zoom / out )
Я загружал картинку в TImage (непрорпорциональный).
Создал TBitmap, загрузил картинку и в него.
Потом при приближении копировал небольшую область битмапа
на весь Image, при этом он автоматически растягивался до его
размера. При уменьшении примерно тоже самое только наобарот.
Использовал - Image.Canvas.CopyRect();
При этом возникала проблема - когда я отдалял картинку больше её
размера, пикселы наслаивальсь друг на друга и выглядло это всё очень плохо.
Кто знает что можно сделать, может есть готовые рещения или методы?
Вот тебе один из вариантов - написан на GDI+
Компоненту 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.
1. кидаешь на форму TScrollBox
2. в сколбокс кидаешь TImage
TImage.Stretch := true;
После остается только менять размеры TImage.