• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C++Builder讓你的任務欄圖標動起來

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    信息產業部電子第二十二研究所 牛有田 我們知道,GIF 類型的圖像格式支持透明顯示,而BMP 類型的圖像格式不支持透明顯示。在Microsoft 照片編輯器中位圖若以設置成透明色方式存儲,則提示出錯。然而,在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;}

      下圖是程序的運行結果:

    http://www.kjueaiud.com/uploads/2007/07/1_200707042008574.jpg (26255 bytes)

      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];

     ?。瘡奈粓D上取得要設置成的

       透明顏色, 也可以直接給出

       Form1 ->Canvas ->Draw(10,20,pBitmap);

      ?。疉A

      ?。诖绑w上顯示透明位圖,

         沒有設置TransparentMode

      ?。晕粓D[2][2] 處的像素的顏色為透明色

       pBitmap ->TransparentMode = tmAuto;

        //設置透明模式, tmAuto:

         TransparentColor 屬性返回位

        //圖最左下角像素的顏色, 作為透明色; 

      ?。痶mFixed: TransparentColor 屬性返回位圖

         上某一像素的顏色, 作為透明色。

        Form1 ->Canvas ->Draw(10,100,pBitmap);

    //BB

       //在窗體上顯示透明位圖,

         與AA 行有所不同

       //以位圖最左下角的像素的顏色為透明色

        Image1 ->Canvas ->Draw(30,20,pBitmap);

       //在背景位圖上顯示透明位圖

        }

        catch (...)

        {

        ShowMessage(" 不能調入或顯示位圖!");

        //顯示出錯信息

        }

        delete pBitmap;?。瘎h除對像

         }

      應用這種方法進行圖像合成時,背景圖像要求是位圖,并且透明位圖和背景位圖的顏色位數要盡量保持一致,這樣,位圖的顏色才不會改變。

      另外,我們利用TImageList 組件也可以顯示透明圖像,利用TCanvas 類的BrushCopy 方法可以實現被拷貝圖像的部分透明。

      以上程序在WIN 98 和C ++Builder3 下調試通過。   

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>