位图局部拉伸问题,高手请进!

zhourongbiao 2005-06-13 05:33:17
怎样将位图的一个圆形区域拉伸成圆角矩形,要能朝各个方向拉伸?
...全文
177 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
redmoon_line 2005-06-24
  • 打赏
  • 举报
回复
关注
jadeluo 2005-06-24
  • 打赏
  • 举报
回复
很难的, 关键在于如何插值,即因拉伸而扩展出的部分用原来位图的哪部分填充?

To chijingde(AD): 没看明白你的代码。
wintergoes 2005-06-24
  • 打赏
  • 举报
回复
很难哦!
chijingde 2005-06-24
  • 打赏
  • 举报
回复
简单写了一下
自己改进吧


type
TMyRect=class
DC:HDC;
public
left,right,top,bottom:integer;
width,height:integer;
procedure draw;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
private
MB:boolean;
MX,MY:integer;
public
MYRGN:TMyRect;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
with MYRGN do
begin
DC:=getdc(handle);
left:=100;right:=300;top:=100;bottom:=300;
width:=200;height:=200;
draw;
end;
end;
{ TMyRect }

procedure TMyRect.draw;
begin
RoundRect(DC,left,top,right,bottom,width,height);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MB:=True;
MX:=X;
MY:=Y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MB:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
subX,SubY:integer;
begin
if MB then
begin
subX:=X-MX;
subY:=Y-MY;
if X<=MYRGN.left then
begin
MYRGN.left:=x;
MYRGN.width:=MYRGN.width+subX;
end;
if X>=MYRGN.right then
begin
MYRGN.right:=x;
MYRGN.width:=MYRGN.width+subX;
end;
if Y<=MYRGN.top then
begin
MYRGN.top:=Y;
MYRGN.height:=MYRGN.height+subY;
end;
if Y>=MYRGN.bottom then
begin
MYRGN.bottom:=Y;
MYRGN.height:=MYRGN.height+subY;
end;
Canvas.Pen.Color:=color;
Canvas.Brush.Color:=color;
Canvas.FillRect(self.ClientRect);
MYRGN.draw;

MX:=X;
MY:=Y;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MYRGN:=TMyRect.Create;
DoubleBuffered:=True;
end;

end.
aiirii 2005-06-21
  • 打赏
  • 举报
回复
>>将位图的一个圆形区域拉伸成圆角矩形

估计比较难,涉及你如何定义拉伸规则的算法
mqjshanghai 2005-06-14
  • 打赏
  • 举报
回复
帮你顶下,大哥给我5分,我要求不高

1,185

社区成员

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

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