首先將圖片通過掃描儀輸入到計算機,以*.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