top
Loading...
在VB中實現位圖的透明放置
p>我們在開發一個軟件中,通過掃描儀輸進了大量實景圖片,這些圖片是以位圖格式存儲的,實際需要將這些圖片透明放置到多彩色背景上,而在我們所使用的Visual Basic for Windows開發環境中,只能將WMF格式的矢量圖(通過Image控件裝載)透明放置到多彩色復雜背景圖上,對位圖只能象照片一樣將圖片上的每一個點陣信息貼到復雜背景上。本文討論的問題就是如何將位圖透明放置到多色彩背景上,用于實現不規則前景在復雜背景上的動畫,并給出了源程序。
首先將圖片通過掃描儀輸入到計算機,以*.BMP格式存盤,然后利用圖象處理軟件對掃進的圖片進行加工,加工過程中應注意:將來準備放到復雜背景上的信息不能是黑色,不準備放到復雜背景上的信息要過濾掉,一律置成黑色。只有這樣才能實現將位圖上所關注的形狀不規則信息透明放置到多彩復雜背景上,且不覆蓋背景。我們主要使用Windows的API函數BITBLT產生此效果。

基本步驟如下:
(1)首先在Forml上創建3個Picture控制,Name屬性分別為PicCel(裝載前景位圖)、Picmatte(存放前景位圖的黑白模板)、Bkgrd(存放復雜背景圖象),再創建一個命令控制按鈕Commondl。在PicCel上裝入一幅黑色背景下的彩色位圖;
(2)將PicCel上的圖象拷貝到Picmatte上,然后在Picmatte上進行工作,即在Picmatte上逐行逐點掃描位圖信息,凡是非黑色象素點將其置成白色,這樣在Picmatte上產生了PicCel的一個黑白模板,Picmatte上的彩色圖象大小和PicCel一樣,只是將PicCel上的非黑色信息轉換成白色;
(3)PicCel和Picmatte作反相invert運算產生PicCel的反相圖象存于PicCel中;
(4)用或運算將Picmatte貼于復雜背景Bkgrd上;
(5)用異或運算將PicCel貼于復雜背景Bkgrd上。
程序清單如下:
1 Const srccopy=&HCC0020
2 Const srcinvert=&H660046
3 Const srcpaint=&HEE0086
4 Sub Command1 Click()
5 black=RGB(0,0,0)
6 white=RGB(255,255,255)
7 position=0’拷貝piccel到picmatte上
8 r%=bitblt(ByVal picmatte.hDC,ByVal 0,ByVal 0,ByVal piccel.width,ByVal piccel.Height,ByVal piccel.hDC,ByVal 0,ByVal 0,ByVal srccopy)
9 For scanline=0 To(piccel.Height-1)
10 Do‘取得picmatte上坐標為(position,scanline)點的顏色
11 currentcolor=getpixel(picmatte.hDC,position,scanline)
12 If current or$#@60;$#@62;black Then‘如果該點不為黑色,則置為白色
13 retlong=setpixel(picmatte.hDC,position,scanline,white)
14 End If
15 position=position+1
16 Loop While position$#@60;piccel.Width
17 position=0
18 Next scanline ‘創建原位圖piccel的反相圖象
19 r%=bitblt(ByVal piccel.hDC,ByVal 0,ByVal 0,ByVal piccel.Width,ByVal piccel.Height,ByVal picmatte.hDC,ByVal 0,ByVal 0,srcinvert)
20 r%=bitblt(ByVal bkgrd.hDC,ByVal 10,ByVal 10,ByVal piccel.Width-1,ByVal piccel.Height-1,ByVal picmatte.hDC,ByVal 0,ByVal 0,srcpaint)
21 r%=bitblt(ByVal bkgrd.hDC,ByVal 10,ByVal 10,ByVal piccel.Width-1,ByVal piccel.Height-1,ByVal piccel.hDC,ByVal 0,ByVal 0,ByVal srcinvert)
22 End Sub
23 Sub Command2-Click()
24 End
25 End Sub
26 Sub Form-Load()
27 picmatte.Width=piccel.Width
28 picmatte.Height=piccel.Height
29 End Sub

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗