Delphi实现图像文本旋转特效完整代码,本程序利用的控件主要是Panel 控件、Image 控件、Edit 控件、Label 控件和Button 控件。本程序的关键是利用Delphi 的bmp_rotate()函数来实现旋转图像。并巧妙地调用相关Windows API 函数来实现对文本的旋转。以下是完整代码:

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 / ) * pi; //将文本框内的内容转换角度
c1x := src.Width div ;
c1y := src.Height div ;
c2x := dst.Width div ;
c2y := dst.Height div ;
if c2x < c2y then
n := c2y
else
n := c2x;
dec (n,); //使n 值减少1,n:=n-1
for p2x := to n do begin
for p2y := to n do begin
if p2x = then
alpha:= pi/
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:=;
Brush.Style:= bsClear;
tf:= TFont.Create;
try
tf.Assign(Font);
GetObject(tf.Handle, Sizeof(lf), @lf); //将当前实例句柄赋给tf 这个Font 对象
lf.lfEscapement:=TheAngle*;
lf.lfOrientation := TheAngle * ; //使输入时的横坐标线与水平线呈所指定的角度
tf.Handle := CreateFontIndirect(lf); //创建一个Font 具体对象
Font.Assign(tf); //使这个对象运用到程序中
finally
tf.Free; //释放对象
end;
TextOut(Image3.left, Image3.top+ , TheText); //绘制文本到指定区域
end;
end;
procedure TForm1.RotatedTextClick(Sender: TObject);
Var
TheAngle : Integer;
begin
TheAngle := StrToInt(Edit2.Text); //将文本框中的文本转换角度
DrawRotatedText(Image3.Canvas, TheAngle, ’276678295@qq.com’); //调用旋转文本函数
end;
procedure TForm1.FormCreate(Sender: TObject);
var
tf : TFont;
theText:string;
begin
theText:=’276678295@qq.com’; //设置文本
with Image3.Canvas do
begin
Font.Name := ’Arial’; //设置字体
Font.Size := ; //设置字体大小
Brush.Style := bsClear; //设置笔刷样式
tf:= TFont.Create; //创建一个Font 具体对象
TextOut(Image3.left, Image3.top+ , TheText); //绘制文本到指定区域
end;
end;
end.

Delphi实现图像文本旋转特效完整代码的更多相关文章

  1. C++ 彩色图像(RGB)三通道直方图计算和绘制,图像逆时针旋转90° 实现代码

    #include "iostream" #include "opencv2/opencv.hpp" #include "vector" us ...

  2. jquery环形3D立体旋转特效

      jquery环形3D立体旋转特效 作者/代码整理:站长素材  (转载请附加本文地址,带有“懒人原生”字样的谢绝转载)发布日期:2013-07-20   立体效果比较强的jquery特效,周围小图组 ...

  3. Java 设置PDF中的文本旋转、倾斜

    本文介绍通过Java程序在PDF文档中设置文本旋转.倾斜的方法.设置文本倾斜时,通过定义方法TransformText(page);并设置page.getCanvas().skewTransform( ...

  4. OpenCV文本图像的旋转矫正

    用户在使用Android手机拍摄过程中难免会出现文本图像存在旋转角度.这里采用霍夫变换.边缘检测等数字图像处理算法检测图像的旋转角度,并根据计算结果对输入图像进行旋转矫正. 首先定义一个结构元素,再通 ...

  5. jQuery弹出窗口完整代码

    jQuery弹出窗口完整代码 效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/1.htm 1 <!DOCTYPE html PUBLIC "- ...

  6. 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)

    ☆ 写在前面 之前答应大家的毕业答辩之后把所有文档贡献出来,现在答辩已过,LZ信守承诺,把所有文档开源到了GitHub(这个地址包含所有的代码和文档以及PPT,外层为简单的代码).还望喜欢的朋友们,不 ...

  7. C# vb .net实现旋转特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的旋转特效呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  8. jQuery可拖拽3D万花筒旋转特效

    这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...

  9. 使用delphi+intraweb进行微信开发1~4代码示例

    前几讲重点阐述的是使用iw进行微信开发的技术难点及解决方法,提供的都是代码片段(微信消息加解密是完整代码),实际上我始终感觉按照教程实作是掌握一门技术的最重要的方法!不过对于刚刚接触这类开发的朋友来说 ...

随机推荐

  1. 2-java内省机制(Introspector)

    来一个简单的示例吧 package com.my.test; import java.beans.BeanInfo; import java.beans.Introspector; import ja ...

  2. CS RANK: AI & ML

    http://csrankings.org/#/index?ai&mlmining 权威学术排名:30-100

  3. Windows NAT端口映射

    由于有需求进行端口映射,又不想装乱七八糟的软件,Windows本身自带的路由远程访问配置太麻烦,还要两块网卡,坑爹啊. 其实Windows本身命令行支持配置端口映射,条件是已经安装了IPV6,启不启用 ...

  4. css的优化规则

    1.避免过度约束: // 不推荐 ul.nav{..} // 推荐 .nav{..}  2.避免过长的后代选择符: // 不推荐 html div tr td {..} 3.避免链式(交集)选择符: ...

  5. hive使用map字段

    create table role_bigtable(table_name string, record_date string, server_id string, map_col map<s ...

  6. Java SPI机制简介

    SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现 ...

  7. c++官方文档-copy constructor

    #include <iostream> using namespace std; class Example5 { string* ptr; public: Example5(const ...

  8. beego生成 api 项目 && api 文档

    目标 生成 api 项目,并且自动生成db的mapper.module等:同时生成api文档 操作步骤 1.生成 api 项目,并且自动生成db全表的映射 bee api [projectName] ...

  9. delphi多语言

    LoadLangFromStrings http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Types.TLang http://blog.c ...

  10. 最详细安装Esxi

    https://www.vmware.com/cn/products/vsphere-hypervisor.html Exsi 是一款虚拟化系统,与VMware,VirtualBox不同,它不需要安装 ...