Delphi 이미지 텍스트 회전 효과 구현 인 스 턴 스 코드
전체 인 스 턴 스 코드 는 다음 과 같 습 니 다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,math,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Image1: TImage;
bmprotate: TButton;
Label1: TLabel;
Panel1: TPanel;
Image2: TImage;
Panel2: TPanel;
Image3: TImage;
Edit2: TEdit;
RotatedText: TButton;
Label2: TLabel;
procedure bmprotateClick(Sender: TObject);
procedure RotatedTextClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure bmp_rotate(src,dst:Tbitmap;angle:extended);
Procedure DrawRotatedText(TheCanvas : TCanvas; TheAngle : Integer;
TheText : String);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.bmp_rotate(src,dst:Tbitmap;angle:extended);//
var
c1x,c1y,c2x,c2y:integer;
p1x,p1y,p2x,p2y:integer;
radius,n:integer;
alpha:extended;
c0,c1,c2,c3:tcolor;
begin
angle := (angle / 180) * pi; //
c1x := src.Width div 2;
c1y := src.Height div 2;
c2x := dst.Width div 2;
c2y := dst.Height div 2;
if c2x < c2y then
n := c2y
else
n := c2x;
dec (n,1); // n 1,n:=n-1
for p2x := 0 to n do begin
for p2y := 0 to n do begin
if p2x = 0 then
alpha:= pi/2
else
alpha := arctan2(p2y,p2x);
radius := round(sqrt((p2x*p2x)+(p2y*p2y)));//
p1x := round(radius * cos(angle+alpha)); //
p1y := round(radius * sin(angle+alpha)); //
c0 := src.Canvas.pixels[c1x+p1x,c1y+p1y];//
c1 := src.Canvas.pixels[c1x-p1x,c1y-p1y];
c2 := src.Canvas.pixels[c1x+p1y,c1y-p1x];
c3 := src.Canvas.pixels[c1x-p1y,c1y+p1x];
dst.Canvas.pixels[c2x+p2x,c2y+p2y]:=c0; //
dst.Canvas.pixels[c2x-p2x,c2y-p2y]:=c1;
dst.Canvas.pixels[c2x+p2y,c2y-p2x]:=c2;
dst.Canvas.pixels[c2x-p2y,c2y+p2x]:=c3;
end;
application.processmessages //
end;
end;
procedure TForm1.bmprotateClick(Sender: TObject);
Var
RAngle : Extended;
begin
RAngle := StrToFloat(Edit1.Text); //
bmp_rotate(Image1.Picture.bitmap,Image2.Picture.bitmap, RAngle);// ,
end;
Procedure TForm1.DrawRotatedText(TheCanvas : TCanvas; TheAngle : Integer;
TheText : String);
var
lf : TLogFont;
tf : TFont;
begin
Image3.Canvas.refresh;
with TheCanvas do begin
Font.Name:='Arial';
Font.Size:=18;
Brush.Style:= bsClear;
tf:= TFont.Create;
try
tf.Assign(Font);
GetObject(tf.Handle, Sizeof(lf), @lf); // tf Font
lf.lfEscapement:=TheAngle*10;
lf.lfOrientation := TheAngle * 10; //
tf.Handle := CreateFontIndirect(lf); // Font
Font.Assign(tf); //
finally
tf.Free; //
end;
TextOut(Image3.left, Image3.top+20 , TheText); //
end;
end;
procedure TForm1.RotatedTextClick(Sender: TObject);
Var
TheAngle : Integer;
begin
TheAngle := StrToInt(Edit2.Text); //
DrawRotatedText(Image3.Canvas, TheAngle, 'Delphi '); //
end;
procedure TForm1.FormCreate(Sender: TObject);
var
tf : TFont;
theText:string;
begin
theText:='Delphi '; //
with Image3.Canvas do
begin
Font.Name := 'Arial'; //
Font.Size := 18; //
Brush.Style := bsClear; //
tf:= TFont.Create; // Font
TextOut(Image3.left, Image3.top+20 , TheText); //
end;
end;
end.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.