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

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

我 们 知 道,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 __fastcall TForm1::Timer1Timer
    (TObject *Sender)
 {Image2 ->Left=Image2 ->Left +1;}

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

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

----下 图 是 程 序 的 运 行 结 果:

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

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

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

 void __fastcall TForm1::Button2Click(TObject *Sender)
 // 单 击" 显 示 透 明 位 图" 按 钮 时 进 入
     {
     Graphics::TBitmap *pBitmap=new Graphics::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(" 不 能 调 入 或 显 示 位 图 !"); 
       / / 显 示 出 错 信 息
       }
       delete pBitmap;  / / 删 除 对 像
         }

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

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

---- 以 上 程 序 在WIN 98 和C + + Builder3 下 调 试 通 过。

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

蝈蝈俊

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值