正在阅读:用Delphi来DIY一个软件"变脸"功能用Delphi来DIY一个软件"变脸"功能

2004-12-30 10:36 出处: 作者:islet8 责任编辑:linjixiong

  < 想法 >

  软件的“换肤”技术早已不是什么新鲜事了,但细心的朋友一定已经发现了,现在正悄悄地流行了一种新的改善视觉效果的方法——这里我斗胆定义为“换肤色”技术吧!用过Winamp 5、Windows MediaPlay 9、MSN Messenger 6、QQ2004这些新版本软件了吧,呵呵,全都采用了所谓换汤不换药的“换肤色”技术。挺有意思是吧,下面我们就“自己动手,丰衣足食”。

  < 准备 >

  首先我用eXeScrope打开了WMP9和MSN6的相关可执行文件和动态链接库,没找到有关界面的资源,晚辈才疏学浅,猜想可能它们的界面是实时计算出来的吧。QQ2004和Winamp5就比较直观了,一个是直接用BMP文件的,另一个采用的是PNG格式。

  BMP文件没什么好说的,关于PNG格式我这里略说两句。PNG(Portable Network Graphics)是为了适应网络数据传输而设计的一种图像格式,用于取代格式较为简单、专利限制严格的GIF图像文件格式。PNG格式大致具有以下优点:高压缩率、支持Alpha通道(全透明、全不透明、可变透明)、提供Gamma(图像亮点)校正机制、提供二维交叉存取机制、支持真彩/灰度/颜色索引的图像。

  分析了一下Winamp5的图形界面布局,他许多漂亮的阴影、渐变效果可不是BMP通过指定颜色透明能做到的;另外考虑到一个程序使用图片皮肤的话文件都会比较多,BMP的话一般都至少有几百K的总大小;所以我觉得PNG图片更适合来做绚丽的界面皮肤。

  Delphi默认是不支持PNG格式的图片的,只能去下载第三方控件了。到DFW论坛里去搜了很多终于让我找到了PNGImage这么个好东东,带源代码、帮助文件,无需安装,支持PNG透明。呵呵,这样我们就可以开工了!

  < 动手 >

  我先看了一下PNGImage的帮助文件,里面的《Example 3: Drawing png over other formats》是一个将一幅指定的PNG图片读入后覆盖到一幅JPG图片上的示例,我尝试了一下能很好的支持带透明的PNG文件。因为是要拿这些PNG文件来作程序界面的,所以我首先打算要把这个PNG图片画到窗体上去:


  uses
  ..., pngimage;  // 加上这个

  procedure TForm1.FormPaint(Sender: TObject);
  var
  Png: TPngObject;
  Rect: TRect;
  begin
  Png := TPngObject.Create;
  Png.LoadFromFile('1.png');

  Rect.Left := 0;
  Rect.Top := 0;
  Rect.Right := Rect.Left + Png.Width;
  Rect.Bottom := Rect.Top + Png.Height;

  Png.Draw(Canvas, Rect);

  Png.Free;
  end;

  以上代码实现了将1.png文件读入后画到窗体上去,这张图片是Winamp5的默认主界面,其中右下角有一块凹入的是透明部分,怎么样,效果出来了吧(如图1)。

热点推荐: 
教你如何成为一名Java初级程序员变态级JAVA程序员面试32问(附答案)
将Asp.Net页面输出到EXCEL里去读书笔记:程序员的个人性格
Java编程学习:自己DIY一个JSP日历Java 的破解和反破解之道
网页编程必看:XML文法分析设计模式的有趣解释-追MM

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

302 Found

302 Found


Powered by Tengine
tengine