手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

在C Builder中显示透明位图

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
我们知道,GIF类型的图像格式支持透明显示,而BMP类型的图像格式不支持透明显示。在Microsoft照片编辑器中位图若以配置成透明色方式存储,则提示出错。然而,在C++Builder中,却能够轻而易举地显示透明位图。透明位图和透明GIF图像相比有一个很大的长处,即:GIF图像格式最大支持256种颜色,位图却能够支持真彩色。

----在C++Builder中显示透明位图

----1.采用TImage组件。

----下面,我们制作一幅飞机凌空飞过蓝天的简单动画。因为移动的飞机是用透明位图显示的,所以看起来挺逼真的。

----(1)在C++Builder下激活菜单"File/New Application"创建一个新工程,窗体单元以文档planemain.cpp存盘,工程文档以plane.cpp存盘。

----(2)在Form1窗体上新增一个TButton组件Button1,

----新增一个TTimer组件Timer1,新增三个TImage组件Image1、Image2和Image3,新增一个TLabel。

----(3)在窗体上双击Image1,调入蓝天的位图BlueSky.bmp,配置其Transpartant属性为false,即为不透明,作为背景;双击Image2,调入飞机的位图Plane.bmp,配置其Transparent属性为true,即为透明,Autosize属性为true,把Image2放在Image1上面。此时能够看出,飞机已融入蓝天中。作为对比,双击Image3,调入飞机的位图Plane.bmp,配置其Transparent属性为false,即为不透明,Autosize属性为true。配置Label1的Caption属性为"源位图"。配置Button1的Caption属性为"开始"。配置Timer1的Enabled属性为false,Interval属性为100(决定飞机飞行的快慢,可调整)。

----(4)Timer1的OnTimer事件控制飞机的移动,代码如下:

void__fastcallTForm1::Timer1Timer
(TObject*Sender)
{Image2->Left=Image2->Left+1;}

----Button1的OnClick事件启动飞机,代码如下:

void__fastcallTForm1::Button1Click
(TObject*Sender)
{Timer1->Enabled=true;}

------2.直接从文档中调入位图,然后画在屏幕上。这种方法灵活,且占用内存少。继续上面的程式设计:

----(1)在窗体上新增一个TButton组件Button2,配置其Caption属性为"显示透明位图"。

----(2)Button2的OnClick事件显示透明的位图,代码如下:

void__fastcallTForm1::Button2Click(TObject*Sender)
//单击"显示透明位图"按钮时进入
{
Graphics::TBitmap*pBitmap=newGraphics::TBitmap();
try
{pBitmap->LoadFromFile("Plane.bmp");
//调入位图
   pBitmap->Transparent=true;
//配置透明属性
   pBitmap->TransparentColor=
   pBitmap->Canvas->Pixels[2][2];
  //从位图上取得要配置成的
透明颜色,也能够直接给出
   Form1->Canvas->Draw(10,20,pBitmap);
//AA
   //在窗体上显示透明位图,
没有配置TransparentMode
   //以位图[2][2]处的像素的颜色为透明色
   pBitmap->TransparentMode=tmAuto;
   //配置透明模式,tmAuto:
TransparentColor属性返回位
   //图最左下角像素的颜色,作为透明色;
//tmFixed:TransparentColor属性返回位图
上某一像素的颜色,作为透明色。

Form1->Canvas->Draw(10,100,pBitmap);
//BB
//在窗体上显示透明位图,
和AA行有所不同
//以位图最左下角的像素的颜色为透明色
Image1->Canvas->Draw(30,20,pBitmap);
//在背景位图上显示透明位图
}
catch(...)
{
ShowMessage("不能调入或显示位图!");
//显示出错信息
}
deletepBitmap;//删除对像
}

----应用这种方法进行图像合成时,背景图像需要是位图,并且透明位图和背景位图的颜色位数要尽量保持一致,这样,位图的颜色才不会改变。

----另外,我们利用TImageList组件也能够显示透明图像,利用TCanvas类的BrushCopy方法能够实现被拷贝图像的部分透明。

----以上程式在WIN98和C++Builder3下调试通过。



文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS