怎样对jpg图像,进行任意角度的旋转?

j_xuhome 2003-11-06 12:23:37
如标题!!!!!!!
...全文
166 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiao197821 2003-11-08
  • 打赏
  • 举报
回复
只能用于NT下
xiaoxiao197821 2003-11-08
  • 打赏
  • 举报
回复
unit PlgBltU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, Math;
type
TForm1 = class(TForm)
Img: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
private
P : Array[0..3] of TPoint;
OAng : Array[0..3] of Double;
OverHandle : Integer;
BkBmp : TBitmap;
MidPt : TPoint;
Ang,R : Double;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
Pt : Integer;
begin
BkBmp := TBitmap.Create;
BkBmp.Width := Width;
BkBmp.Height := Height;
P[0] := Img.BoundsRect.TopLeft;
P[3] := Img.BoundsRect.BottomRight;
P[1] := P[0]; Inc(P[1].X,Img.Width);
P[2] := P[3]; Dec(P[2].X,Img.Width);
with Img do MidPt := Point(Left+Width div 2,Top + Height div 2);
with Img do R := SqRt(Sqr(Width div 2)+Sqr(Height div 2));
for Pt := 0 to 3 do with P[Pt] do
OAng[Pt]:= ArcTan2(Y-MidPt.Y,X-MidPt.X)+Pi;
OverHandle := -1;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BkBmp.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
Pt : Integer;
begin
with BkBmp.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(ClipRect);
if PlgBlt(Handle,P,Img.Canvas.Handle,0,0,Img.Width,Img.Height,0,0,0) then
begin
Brush.Color := clBlack;
for Pt := 0 to 3 do with P[Pt] do
FillRect(Rect(X-3,Y-3,X+3,Y+3));
end
else
TextOut(0,0,'PlgBlt currently supported only on WinNT');
end;
Canvas.Draw(0,0,BkBmp);
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var
Pt : Integer;
TmpRect : TRect;
begin
if ssLeft in Shift then
begin
if OverHandle = -1 then exit;
Ang := ArcTan2(Y-MidPt.Y,X-MidPt.X)-OAng[OverHandle]+Pi;
for Pt := 0 to 3 do
P[Pt] := Point(MidPt.X-Round(R*Cos(Ang+OAng[Pt])),
MidPt.Y-Round(R*Sin(Ang+OAng[Pt])));
Paint;
end
else
begin
OverHandle := -1;
for Pt := 0 to 3 do
begin
with P[Pt] do TmpRect := Rect(X-3,Y-3,X+3,Y+3);
if PtInRect(TmpRect,Point(X,Y)) then
begin
Cursor := crHandPoint;
OverHandle := Pt;
end;
end;
if OverHandle = -1 then Cursor := crDefault;
end;
end;
end.
第3章 图形技术 3.1 绘制图形 实例104 绘制正弦曲线 实例105 绘制蜗牛曲线 实例106 绘制贝塞尔曲线 实例107 画图程序 实例108 绘制立体模型 实例109 利用IFS算法绘制自然景物 3.2 图像预览 实例110 图片自动预览程序 实例111 图片批量浏览 实例112 浏览大幅BMP图片 实例113 放大和缩小图片 实例114 图像任意角度旋转 3.3 图片效果 实例115 图片马赛克效果 实例116 图片百叶窗效果 实例117 电影胶片特效 实例118 翻转图片效果 实例119 图片浮雕效果 3.4 图片颜色转换 实例120 图像的锐化处理 实例121 图片反色处理 实例122 图像的灰度化转换 实例123 显示JPG图片 3.5 图形转换与缩放 实例124 将位图转换为JPG 实例125 将位图转为GIF图标 实例126 图片的平滑缩放 3.6 图像的剪切、合成与识别 实例127 图像的剪切 实例128 图像的合成 实例129 获取鼠标任意位置的颜色值 实例130 提取图片中的对象 实例131 手写数字识别 3.7 图像字体 实例132 旋转的文字 实例133 当前系统字体列表 实例134 空心文字 实例135 彩虹文字 实例136 如何在图片上平滑移动文字 实例137 图像水印效果 3.8 图像管理 实例138 管理计算机内图片文件的程序 实例139 提取并保存应用程序图标 3.9 图片动画 实例140 利用图片制作屏幕保护程序 实例141 图片动画 实例142 指法练习软件 3.10 简单游戏设计 实例143 拼图游戏 实例144 黑白棋 实例145 俄罗斯方块 实例146 快来打地鼠 实例147 幸运转盘 3.11 OpenGL程序设计 实例148 制作OpenGL动画 实例149 利用OpenGL绘制立体模型 实例150 利用OpenGL绘制NURBS曲线 3.12 GDI+程序设计 实例151 使用GDI+显示GIF动画 实例152 使用GDI+实现图像格式转换

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧