Модуль ImgTools предоставляет функции для работы с изображениями,

в частности для работы с визуальным объектом типа TImage.

 

Function FitBestSize - Подбор оптимального размера рисунка,

в соответствии с областью на которой он расположен

Function CenterImage - Центрирование рисунка в области, на которой он расположен

Function SetImageSize - Процентное изменение размера рисунка

 

Code:

{ **** UBPFD *********** ****

>> Функции для работы с объектом типа TImage

 

Модуль ImgTools предоставляет функции для работы с изображениями,

в частности для работы с визуальным объектом типа TImage.

 

Function FitBestSize - Подбор оптимального размера рисунка,

в соответствии с областью на которой он расположен

Function CenterImage - Центрирование рисунка в области, на которой он расположен

Function SetImageSize - Процентное изменение размера рисунка

 

Каждая функция возвращает результат типа TImageSizeParams;

type TImageSizeParams = record

OldImageWidth - ширина рисунка до преобразований

OldImageHeight - высота рисунка до преобразований

OldImageLeft - позиция X рисунка до преобразований

OldImageTop - позиция Y рисунка до преобразований

NewImageWidth - ширина рисунка после преобразований

NewImageHeight - высота рисунка после преобразований

NewImageLeft - позиция X рисунка после преобразований

NewImageTop - позиция Y рисунка после преобразований

NewImageSizePercent - размер рисунка в процентах после преобразования,

от размера рисунка до преобразования

end;

 

Зависимости: ExtCtrls

Автор:       VID,

***************************************************** }

 

unit ImgTools;

 

interface

 

uses ExtCtrls;

 

type

TImageSizeParams = record

   OldImgWidth, OldImgHeight, OldImageLeft, OldImageTop,

     NewImgWidth, NewImgHeight, NewImageLeft, NewImageTop,

     NewImgSizePercent: Integer;

end;

 

type

TTimeState = (tsBefore, tsAfter);

 

function FitBestSize(Img: TImage): TImageSizeParams;

function CenterImage(Img: TImage): TImageSizeParams;

function SetImageSize(Img: TImage; SizePercent: Integer): TImageSizeParams;

 

var

ImageSizeParams: TImageSizeParams;

 

implementation

 

//Обнуление полей переменной типа TImageSizeParams

 

function ClearImageSizeParams: TImageSizeParams;

begin

Result.OldImgWidth := 0;

Result.OldImgHeight := 0;

Result.OldImageLeft := 0;

Result.OldImageTop := 0;

Result.NewImgWidth := 0;

Result.NewImgHeight := 0;

Result.NewImageLeft := 0;

Result.NewImageTop := 0;

Result.NewImgSizePercent := 0;

end;

 

//Получение параметров рисунка до и после преобразований

 

function GetImageSizeParams(Img: TImage; TimeState: TTimeState):

TImageSizeParams;

begin

if img = nil then

begin

   result := ClearImageSizeParams;

   ImageSizeParams := Result;

   exit;

end;

if TimeState = tsBefore then

begin

   ImageSizeParams := ClearImageSizeParams;

   result.OldImgWidth := img.Width;

   Result.OldImgHeight := img.Height;

   result.OldImageLeft := img.Left;

   result.OldImageTop := img.Top;

end;

if TimeState = tsAfter then

begin

   Result := ImageSizeParams;

   Result.NewImgWidth := img.Width;

   Result.NewImgHeight := img.Height;

   result.NewImageLeft := img.Left;

   result.NewImageTop := img.Top;

   Result.NewImgSizePercent := Round(Result.NewImgWidth / Result.OldImgWidth *

     100);

end;

ImageSizeParams := Result;

end;

 

//Подбор оптимального размера рисунка, в соответствии с областью на которой он расположен

 

function FitBestSize(Img: Timage): TImageSizeParams;

var

h, w, i, x, y: Integer;

K, b, a: Double;

begin

if Img = nil then

   exit;

try

   Result := ClearImageSizeParams;

   Img.AutoSize := True;

   Img.AutoSize := False;

   GetImageSizeParams(Img, tsBefore);

   h := img.picture.Height;

   w := img.picture.Width;

   i := 0;

   repeat

     x := img.Parent.clientwidth - w;

     y := img.Parent.clientheight - h;

     i := i + 1;

     k := w / h;

     if y < x then

     begin

       b := y;

       h := h + Round(b);

       a := H * k - W;

       w := w + Round(a);

     end;

     if y >= x then

     begin

       a := x;

       w := w + Round(a);

       b := (w / k) - H;

       h := h + Round(b);

     end;

   until (w < img.Parent.width) or (h < img.Parent.height) or (i >= 2);

   img.Stretch := true;

   img.Width := w;

   img.height := h;

   Result := GetImageSizeParams(Img, tsAfter);

except

end;

end;

 

//Центрирование рисунка в области, на которой он расположен

 

function CenterImage(Img: TImage): TImageSizeParams;

begin

Result := ClearImageSizeParams;

if Img = nil then

   exit;

GetImageSizeParams(img, tsBefore);

img.left := (Img.parent.Width div 2) - (img.Width div 2);

img.Top := (Img.parent.Height div 2) - (img.height div 2);

Result := GetImageSizeParams(img, tsAfter);

end;

 

//Процентное изменение размера рисунка

 

function SetImageSize(Img: TImage; SizePercent: Integer): TImageSizeParams;

var

K: Double;

nw, nh: Integer;

begin

Result := ClearImageSizeParams;

if Img = nil then

   exit;

if SizePercent < 0 then

   exit;

Img.AutoSize := True;

Img.AutoSize := False;

GetImageSizeParams(img, tsBefore);

try

   K := img.height / img.width;

except exit;

end;

nw := Round(img.Width * SizePercent / 100);

nh := round(nw * k);

img.Stretch := true;

img.Width := nw;

img.Height := nh;

Result := GetImageSizeParams(img, tsAfter);

end;

 

end.

 

 

Добавить комментарий

Не использовать не нормативную лексику.

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

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить