日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

容易介紹透明位圖的完成辦法

容易介紹透明位圖的完成辦法

更新時間:2022-05-14 文章作者:未知 信息來源:網絡 閱讀次數:

作者:吳斌

  在VB中顯示位圖,通常都是通過各種控件實現的。通過控件顯示的位圖,或全部或局部,始終是以一個規則的矩形圖像出現在屏幕上,無法做到只顯示位圖中某個不規則的局部圖像,而使位圖的其它部分具有透明性以露出其下原有的屏幕顯示,即所謂“透明位圖”,因此透明位圖的實現只能另辟蹊徑。下面,筆者將向大家介紹一種方法。

  原理

  其實,Windows中隨處可見的圖標就是一個透明位圖的典型實例。
  圖標是由兩個單獨的位圖組成的。第一個位圖是由黑色(顏色位全為0)背景與彩色圖標圖案組成的,該位圖將與當前屏幕顯示通過異或(XOR)操作結合起來,故稱其為XOR位圖。第二個位圖是由白色(顏色位全為1)背景與黑色(顏色位全為0)圖標圖案組成的,該位圖將與當前屏幕顯示通過與(AND)操作結合起來,故稱其為AND位圖。圖標的顯示是通過兩個步驟完成的:

  當前屏幕顯示與AND位圖通過AND操作結合起來;
  當前屏幕顯示與XOR位圖通過XOR操作結合起來。

  大家知道,1與任何數值AND操作的結果將維持原數值,而0與任何數值AND操作的結果則是0,因此在步驟1中,AND位圖中白色(1)與屏幕顯示經過AND操作后被原色彩屏蔽,而黑色(0)則將原色彩屏蔽。步驟1結束后,屏幕上將留下一個黑色的圖標圖案。在隨后的步驟2中,由于0與任何數值異或的結果都將是原數值,因此,XOR位圖與屏幕顯示經過異或操作后,位圖和屏幕中的黑色部分都將被各自對應的彩色部分屏蔽。步驟2結束后,一個形狀不規則的圖標圖案就出現在屏幕上了。這就是圖標顯示的原理。

  方法

  首先,根據源位圖和應用需求,制作出AND位圖和XOR位圖,然后,按照上述步驟,依次將AND位圖和XOR位圖與屏幕顯示結合起來,便可實現透明位圖了。
  AND位圖和XOR位圖的制作,在許多圖像處理軟件中都可以輕而易舉地完成,筆者不再詳細描述。AND位圖和XOR位圖與屏幕顯示的結合,可以通過像素迭加時的光柵操作完成,具體實現可以使用VB4中為Form和PictureBox新增的方法PaintPicture。該方法的功能是將一個圖像文件的內容傳送到Form或PictureBox的顯示屏幕上,也就是將源圖像中的像素與當前顯示屏幕上對應的像素疊加在一起。PaintPicture的語法為:object.PaintPicturepicture,x1,y1,width1,height1,x2,y2,width2,height2,opcode。其中,object是調用方法的Form或PictureBox對象實例;picture指定源圖像,該參數必須是Form或PictureBox控件的Picture屬性;x1,y1指定目標對象中用于擺放被傳送圖像的矩形區域左上角的邏輯坐標點;width1,height1指定目標對象中用于擺放被傳送圖像的矩形區域的寬度和高度;x2,y2指定源圖像中被傳送的矩形區域左上角的邏輯坐標點;width2,height2指定源圖像中被傳送部分的寬度和高度;opcode指定傳送過程中使用的光柵操作代碼值,AND操作代碼值為H8800C6,XOR操作代碼值為H660046。

  實例

  下面,本文介紹一個透明位圖的應用實例,實例演示一個卡通人物在窗口頂部循環地從左到右穿越窗口的動畫。動畫的播放采用PictureClip控件和Timer控件來實現,動畫畫面的顯示則使用本文的透明位圖技術。
  新建一個VB項目,在Form1中加入一個Timer控件Timer1,兩個PictureClip控件bmpXOR和bmpAND,將它們的Picture屬性分別設置為XOR.BMP和AND.BMP,這兩個位圖就是透明位圖所使用的XOR位圖和AND位圖,如右所示。
  在Form的Generaldeclaration部分加入下列常量聲明:

  Const SRCAND As Long=&H8800C6
  Const SRCINVERT AsLong=&H660046
  Const StepLength = 10
  Const AnimateSpeed = 100

  項目代碼如下:
  Private Sub Form_Load()
   Me.ScaleMode=3
   With bmpAND
    .Cols=4
    .Rows=2
   End With
   With bmpXOR
    .Cols=4
    .Rows=2
    End With
   Timer1.Interval=AnimateSpeed
  EndSub

  Private Sub Timer1_Timer()
   Static CurPic As Integer
   Static CurX As Single
   Me.Refresh
   If CurPic > bmpAND.Cols*bmpAND.Rows-1 Then CurPic=0
   If CurX > Me.ScaleWidth Then CurX=0
   Me.PaintPicture bmpAND.GraphicCell(CurPic),CurX,0,,,,,,,SRCAND
   Me.PaintPicture bmpXOR.GraphicCell(CurPic),CurX,0,,,,,,,SRCINVERT
   CurPic=CurPic+1
   CurX=CurX+StepLength
  End Sub

  按F5運行,Form1中就會出現一個在窗口頂部從左到右循環地行走的卡通人物。人物行走的速度和步長可以通過常量AnimateSpeed和StepLength控制。為了檢驗透明位圖的效果,可以為Form1設置各種背景。您會看到,使用透明位圖技術顯示的動畫與各種背景都能自然地融合在一起,如同事先渲染生成的動畫影片一樣。這就是透明位圖技術希望達到的目的。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

主站蜘蛛池模板: 欧美日韩在线成人免费 | 亚洲综合亚洲综合网成人 | 国产日韩欧美不卡www | 欧美在线va在线播放 | 99精品久久久久中文字幕 | 亚洲 国产 日韩 欧美 | 日本久久色| 亚洲呦呦 | 97天天做天天爱夜夜爽 | 内地精品露脸自拍视频香蕉 | 日本不卡在线视频 | 久久欧美精品欧美久久欧美 | 亚洲福利 影院 | 丁香婷婷色综合亚洲小说 | 免费看日韩欧美一级毛片 | 久久国产精品99久久久久久牛牛 | 精品国产免费第一区二区三区日韩 | 亚洲va精品中文字幕 | 中文字幕一区二区在线视频 | 亚洲精品成人一区二区 | 91最新91精品91蝌蚪 | 韩国三级精品 | 篠崎かんな超肉感在线播放 | 99久久久免费精品免费 | 免费高清不卡毛片在线看 | 亚洲一欧洲中文字幕在线 | 永久看日本大片免费 | 国产高清视频一区二区 | 亚洲不卡视频在线 | 中国一级特黄 | 国产亚洲精品国产一区 | 亚洲大片免费观看 | 日本a在线观看 | 老司机成人精品视频lsj | 狠狠狠狼鲁欧美综合网免费 | 在线不卡国产 | 国产末成年女av片 | 国产日韩精品一区在线不卡 | 日本亚洲天堂网 | 国产精品成人免费综合 | 狠狠色丁香久久综合婷婷 |