Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** UBPFD *********** by delphibase.endimus.com **** >> Наклон изображения по вертикали и горизонтали Зависимости: Classes, Graphics Автор: Fenik, chook_nu@uraltc.ru, Новоуральск Copyright: Автор Федоровских Николай Дата: 2 июня 2002 г. ***************************************************** } procedureInclinationBitmap(Bitmap: TBitmap; Hor, Ver: Double; BackColor: TColor); function
Tan(X: Extended): Extended; // Tan := Sin(X) / Cos(X) asm
FLD X FPTAN FSTP ST(0) // FPTAN pushes 1.0 after result FWAIT end
; type
TRGB = record
B, G, R: Byte; end
; pRGB = ^TRGB; var
x, y, WW, HH, alpha: Integer; OldPx, NewPx: PRGB; T: Double; Bmp: TBitmap; begin
Bitmap.PixelFormat := pf24Bit; Bmp := TBitmap.Create; try
Bmp.Assign(Bitmap); WW := Bitmap.Width; HH := Bitmap.Height; if
Hor <> 0.0 then
begin
// По горизонтали T := Tan(Hor * (Pi / 180)); Inc(WW, Abs(Round(HH * T))); Bitmap.Width := WW; Bitmap.Canvas.Brush.Color := BackColor; Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height)); for
y := 0 to
HH - 1 do
begin
if
T > 0 then
alpha := Round((HH - y) * T) else
alpha := -Round(y * T); OldPx := Bmp.ScanLine[y]; NewPx := Bitmap.ScanLine[y]; Inc(NewPx, Alpha); for
x := 0 to
Bmp.Width - 1 do
begin
NewPx^ := OldPx^; Inc(NewPx); Inc(OldPx); end
; end
; Bmp.Assign(Bitmap); end
; if
Ver <> 0.0 then
begin
// По вертикали T := Tan(Ver * (Pi / 180)); Bitmap.Height := HH + Abs(Round(WW * T)); Bitmap.Canvas.Brush.Color := BackColor; Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height)); for
x := 0 to
WW - 1 do
begin
if
T > 0 then
alpha := Round((WW - x) * T) else
alpha := -Round(x * T); for
y := 0 to
Bmp.Height - 1 do
begin
NewPx := Bitmap.ScanLine[y + alpha]; OldPx := Bmp.ScanLine[y]; Inc(OldPx, x); Inc(NewPx, x); NewPx^ := OldPx^; end
; end
; end
; finally
Bmp.Free; end
; end
;
Пример использования:
InclinationBitmap(FBitmap, 7.151, -5.8, clWhite);