⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcb_g1.htm

📁 C++Builder教学大全
💻 HTM
字号:
 

<html>

<head>

<title>在C++Builder中显示透明位图</title>

<meta http-equiv="目录类型" content="文本/html; 字符集=gb2312">

</head>

<body bgcolor="#FFFFFF">

<table width="100%" border="0" height="285">

  <tr> 

    <td height="35"> 

      <div align="center" class="p14"><font color="#000000">在C + + Builder   

              中 显 示 透 明 位 图</font></div>     

    </td>     

  </tr>     

  <tr valign="top">      

    <td>     

      <p>我 们 知 道,GIF 类 型 的 图 像 格 式 支 持 透 明 显 示, 而BMP 类 型 的 图 像 格 式 不 支 持 透 明 显      

        示。 在Microsoft 照 片 编 辑 器 中 位 图 若 以 设 置 成 透 明 色 方 式 存 储, 则 提 示 出 错。 然 而,      

        在C + + Builder 中, 却 可 以 轻 而 易 举 地 显 示 透 明 位 图。 透 明 位 图 与 透 明GIF 图 像 相      

        比 有 一 个 很 大 的 优 点, 即:GIF 图 像 格 式 最 大 支 持256 种 颜 色, 位 图 却 可 以 支 持 真 彩 色。      

      <p><font color=#ffffff>----</font>在C + + Builder 中 显 示 透 明 位 图      

      <p><font color=#ffffff>----</font><b>1. 采 用TImage 组 件。</b>      

      <p><font color=#ffffff>----</font>下 面, 我 们 制 作 一 幅 飞 机 凌 空 飞 过 蓝 天 的 简 单      

        动 画。 因 为 移 动 的 飞 机 是 用 透 明 位 图 显 示 的, 所 以 看 起 来 挺 逼 真 的。      

      <p><font color=#ffffff>----</font> (1) 在C + + Builder 下 激 活 菜 单"File /New      

        Application" 创 建 一 个 新 工 程, 窗 体 单 元 以 文 件planemain.cpp 存 盘, 工 程 文 件 以plane.cpp      

        存 盘。      

      <p><font color=#ffffff>----</font>(2) 在Form1 窗 体 上 新 增 一 个TButton 组 件Button1,      

      <p><font color=#ffffff>----</font>新 增 一 个TTimer 组 件Timer1, 新 增 三 个TImage      

        组 件Image1、Image2 和Image3, 新 增 一 个TLabel。      

      <p><font color=#ffffff>----</font> (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( 决 定 飞 机 飞 行 的      

        快 慢, 可 调 整)。      

      <p><font color=#ffffff>----</font>(4) Timer1 的OnTimer 事 件 控 制 飞 机 的 移 动,      

        代 码 如 下:      

      <pre> void __fastcall TForm1::Timer1Timer

    (TObject *Sender)

 {Image2 -&gt;Left=Image2 -&gt;Left +1;}

</pre>     

      <p><font color=#ffffff>----</font>Button1 的OnClick 事 件 启 动 飞 机, 代 码 如 下:      

      <pre>void __fastcall TForm1::Button1Click

    (TObject *Sender)

 {Timer1 -&gt;Enabled=true;}<font color=#ffffff>--</font></pre>     

      <p><font color=#ffffff>----</font>2. 直 接 从 文 件 中 调 入 位 图, 然 后 画 在 屏 幕 上。      

        这 种 方 法 灵 活, 且 占 用 内 存 少。 继 续 上 面 的 程 序 设 计:      

      <p><font color=#ffffff>----</font> (1) 在 窗 体 上 新 增 一 个TButton 组 件 Button2,      

        设 置 其Caption 属 性 为" 显 示 透 明 位 图"。      

      <p><font color=#ffffff>----</font> (2) Button2 的OnClick 事 件 显 示 透 明 的 位      

        图, 代 码 如 下:      

      <pre> void __fastcall TForm1::Button2Click(TObject *Sender)

 // 单 击&quot; 显 示 透 明 位 图&quot; 按 钮 时 进 入

     {

     Graphics::TBitmap *pBitmap=new Graphics::TBitmap();

     try

     {pBitmap -&gt;LoadFromFile(&quot;Plane.bmp&quot;); 

     // 调 入 位 图

    pBitmap -&gt;Transparent = true; 

     // 设 置 透 明 属 性

    pBitmap -&gt;TransparentColor=

    pBitmap -&gt;Canvas -&gt;Pixels[2][2];

    // 从 位 图 上 取 得 要 设 置 成 的

      透 明 颜 色, 也 可 以 直 接 给 出

    Form1 -&gt;Canvas -&gt;Draw(10,20,pBitmap); 

      //AA

    // 在 窗 体 上 显 示 透 明 位 图, 

         没 有 设 置TransparentMode

    // 以 位 图[2][2] 处 的 像 素 的 颜 色 为 透 明 色

    pBitmap -&gt;TransparentMode = tmAuto;

     // 设 置 透 明 模 式, tmAuto: 

         TransparentColor 属 性 返 回 位 

     // 图 最 左 下 角 像 素 的 颜 色, 作 为 透 明 色;  

      // tmFixed: TransparentColor 属 性 返 回 位 图

          上 某 一 像 素 的 颜 色, 作 为 透 明 色。



       Form1 -&gt;Canvas -&gt;Draw(10,100,pBitmap); 

 //BB

     // 在 窗 体 上 显 示 透 明 位 图, 

         与AA 行 有 所 不 同

     // 以 位 图 最 左 下 角 的 像 素 的 颜 色 为 透 明 色

       Image1 -&gt;Canvas -&gt;Draw(30,20,pBitmap);

     // 在 背 景 位 图 上 显 示 透 明 位 图

       }

       catch (...)

       {

       ShowMessage(&quot; 不 能 调 入 或 显 示 位 图 !&quot;); 

       / / 显 示 出 错 信 息

       }

       delete pBitmap;  / / 删 除 对 像

         }

</pre>     

      <p><font color=#ffffff>----</font>应 用 这 种 方 法 进 行 图 像 合 成 时, 背 景 图 像 要 求      

        是 位 图, 并 且 透 明 位 图 和 背 景 位 图 的 颜 色 位 数 要 尽 量 保 持 一 致, 这 样, 位 图 的 颜 色 才      

        不 会 改 变。      

      <p><font color=#ffffff>----</font>另 外, 我 们 利 用TImageList 组 件 也 可 以 显 示 透      

        明 图 像, 利 用TCanvas 类 的BrushCopy 方 法 可 以 实 现 被 拷 贝 图 像 的 部 分 透 明。      

      <p><font color=#ffffff>----</font> 以 上 程 序 在WIN 98 和C + + Builder3 下 调 试      

        通 过。      

     </td>     

  </tr>     

</table>     

<br>     

</body>     

</html>     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -