游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12574|回复: 19

如何更有效率地在DelphiX中画半透明的PNG图片?

[复制链接]

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2005-9-17 15:33:00 | 显示全部楼层 |阅读模式
发现用Suface只能画不透明和全透明的图,不知如何画半透明的PNG图?
用的笨方法是用PNGImage类库,用PNGObject的Draw方法覆盖在Suface.canvas对象现有的图片上,可以实现效果,但问题是PNGObject的Draw方法用的CPU时间太多,如果每秒画25帧的话P4 2.6的CPU占用基本保持在90%以上,那位大侠有更好的方法?望不吝赐教!!! [em24]

27

主题

295

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2005-9-17 18:04:00 | 显示全部楼层

Re:如何更有效率地在DelphiX中画半透明的PNG图片?

其??surface是可以?半透明的,?是有些??

var
  Form1: TForm1;
  MySurface, MySurface2, AlphaSurface: TDirectDrawSurface;

implementation

{$R *.DFM}

procedure TForm1.DXDraw1InitializeSurface(Sender: TObject);
begin
  MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  MySurface2 := TDirectDrawSurface.Create(DXDraw1.DDraw);
  AlphaSurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  AlphaSurface.LoadFromGraphic(DXImageList1.Items[0].Picture.Graphic);
  MySurface.LoadFromGraphic(DXImageList1.Items[1].Picture.Graphic);
  MySurface2.LoadFromGraphic(DXImageList1.Items[1].Picture.Graphic);
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXDraw1.Surface.Fill(0);
  DXDraw1.BeginScene;
  MySurface.Fill(0);
  MySurface.Draw(0, 0, MySurface2.ClientRect, MySurface2, True);
  MySurface.DrawAlpha(AlphaSurface.ClientRect, AlphaSurface.ClientRect, AlphaSurface, True, 100);
  DXDraw1.Surface.Draw(0, 0, MySurface.ClientRect, MySurface, True);
  DXDraw1.Flip;
  DXDraw1.EndScene;
end;

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2005-9-25 01:01:00 | 显示全部楼层

Re:如何更有效率地在DelphiX中画半透明的PNG图片?

楼上的能详细说说看吗?AlphaSurface中的图像如何做?有何要求?

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2005-9-25 01:34:00 | 显示全部楼层

Re:如何更有效率地在DelphiX中画半透明的PNG图片?

不知道做那种从左到右渐变透明的效果,对图像的颜色有什么要求

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2005-9-26 14:35:00 | 显示全部楼层

Re:如何更有效率地在DelphiX中画半透明的PNG图片?

试了试,DrawAlpha会让整幅图片都变成半透明的,会让不该透的地方图片色彩有损失,不知道有没有更好的方法,尤其是画那种从从左到右渐变透明的效果,最左全透明,最右全不透明的那种图片怎样画更好呢

27

主题

295

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2005-9-26 18:18:00 | 显示全部楼层

Re: 如何更有效率地在DelphiX中画半透明的PNG图片?

DrawAlpha4

sf_200592618180.rar

504.92 KB, 下载次数:

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2005-9-26 20:09:00 | 显示全部楼层

Re: 如何更有效率地在DelphiX中画半透明的PNG图片?

谢谢DraculaLin的Demo,如果图像中的变化比较复杂怎么处理呢?

sf_200592620927.rar

782.97 KB, 下载次数:

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2005-9-26 20:18:00 | 显示全部楼层

Re: 如何更有效率地在DelphiX中画半透明的PNG图片?

截图

sf_2005926201754.rar

297.88 KB, 下载次数:

27

主题

295

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2005-9-26 23:57:00 | 显示全部楼层

Re:如何更有效率地在DelphiX中画半透明的PNG图片?

?了一大圈,原?砟闶且?@?效果
早?清楚就好了
DelphiX?K不支持??功能

你要用Asphyre才?得到

http://www.afterwarp.com/

2

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2005-9-27 10:43:00 | 显示全部楼层

Re:如何更有效率地在DelphiX中画半透明的PNG图片?

AsphyrePro看过了,性能好强,功能也好强!原来还有这样一个好东东!只是好像很复杂的样子,得多花时间研究一下了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 18:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表