一種圖形繪制方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種圖形繪制方法及裝置。
【背景技術(shù)】
[0002]圖形設(shè)備接口(⑶I+,Graphics Device Interface)是一個(gè)開(kāi)源項(xiàng)目,它的主要任務(wù)是負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。
[0003]在客戶端應(yīng)用程序中,可以調(diào)用⑶I+繪制圖形,也可以直接加載已經(jīng)處理好的UI圖,有些情況下,采用GDI+繪圖比直接采用UI圖會(huì)更靈活,性能更高。例如:現(xiàn)在辦公軟件上的日歷控件一般都會(huì)具有業(yè)務(wù)標(biāo)記功能,標(biāo)記的形態(tài)多種多樣,有用紅點(diǎn)表示的,有高亮顯示的,有圓邊顯示的,這些標(biāo)記可以直接采用⑶I+進(jìn)行繪制。
[0004]但是米用⑶I+繪制弧狀圖形,例如圓圈時(shí),會(huì)出現(xiàn)毛邊,從而影響圖形的視覺(jué)效果O
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供了一種圖形繪制方法及裝置,能夠解決圖形的毛邊問(wèn)題,改善圖形的視覺(jué)效果。
[0006]第一方面,本發(fā)明實(shí)施例提供了一種圖形繪制方法,包括:
[0007]在控件上繪制目標(biāo)圖形;
[0008]在控件上繪制透明背景層,背景層位于目標(biāo)圖形的下一層;
[0009]在控件上繪制無(wú)邊框窗口,無(wú)邊框窗口的背景為與透明背景層重疊的位置的位圖,無(wú)邊框窗口位于目標(biāo)圖形的上一層。
[0010]結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,在控件上繪制目標(biāo)圖形包括:調(diào)用UpdateLayerdWindow應(yīng)用程序編程接口 API函數(shù),基于alpha通道在控件上繪制目標(biāo)圖形。
[0011]結(jié)合第一方面,在第一方面的第二種可能的實(shí)現(xiàn)方式中,在控件上繪制透明背景層包括:調(diào)用UpdateLayerdWindow API函數(shù),基于alpha通道在控件上繪制透明背景層。
[0012]結(jié)合第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式或第一方面的第二種可能的實(shí)現(xiàn)方式中任一一種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,該方法還包括:通過(guò)自定義用戶控件Usercontrol函數(shù)編寫(xiě)以生成控件;或,在Windows控件基礎(chǔ)上重寫(xiě)以生成控件。
[0013]結(jié)合第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式中或第一方面的第二種可能的實(shí)現(xiàn)方式中任一一種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,該目標(biāo)圖形為弧狀圖形。
[0014]第二方面,本發(fā)明實(shí)施例提供了一種圖形繪制裝置,包括:
[0015]第一繪制模塊,用于在控件上繪制目標(biāo)圖形;
[0016]第二繪制模塊,用于在控件上繪制透明背景層,背景層位于目標(biāo)圖形的下一層;
[0017]第三繪制模塊,用于在控件上繪制無(wú)邊框窗口,無(wú)邊框窗口的背景為與透明背景層重疊的位置的位圖,無(wú)邊框窗口位于目標(biāo)圖形的上一層。
[0018]結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,第一繪制模塊具體用于:調(diào)用UpdateLayerdWindow應(yīng)用程序編程接口 API函數(shù),基于alpha通道在控件上繪制目標(biāo)圖形。
[0019]結(jié)合第二方面,在第二方面的第二種可能的實(shí)現(xiàn)方式中,第二繪制模塊具體用于:調(diào)用UpdateLayerdWindow API函數(shù),基于alpha通道在控件上繪制透明背景層。
[0020]結(jié)合第二方面、第二方面的第一種可能的實(shí)現(xiàn)方式中或第二方面的第二種可能的實(shí)現(xiàn)方式中任一一種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,圖形繪制裝置還包括:
[0021]第一生成單元,用于通過(guò)自定義用戶控件Usercontrol函數(shù)編寫(xiě)以生成控件;
[0022]或,第二生成單元,用于在Windows控件基礎(chǔ)上重寫(xiě)以生成控件。
[0023]結(jié)合第二方面、第二方面的第一種可能的實(shí)現(xiàn)方式中或第二方面的第二種可能的實(shí)現(xiàn)方式中任--種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,第一繪制模塊具體用于在控件上繪制弧狀圖形。
[0024]從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例的方案具有如下有益效果:
[0025]本發(fā)明實(shí)施例中,在控件上繪制目標(biāo)圖形,然后在控件上繪制透明背景層,該透明背景層位于目標(biāo)圖形的下一層,再在控件上繪制無(wú)邊框窗口,無(wú)邊框窗口的背景為與背景層重疊的位置的位圖,該無(wú)邊框窗口位于目標(biāo)圖形的上一層。因?yàn)闊o(wú)邊框窗口的背景與目標(biāo)圖形的透明背景層相同,所以當(dāng)無(wú)邊框窗口覆蓋在目標(biāo)圖形上時(shí),可以遮蓋目標(biāo)圖形的毛邊,從而能夠改善圖形的視覺(jué)效果。
【附圖說(shuō)明】
[0026]圖1為本發(fā)明實(shí)施例中圖形繪制方法的一種流程圖;
[0027]圖2為本發(fā)明實(shí)施例中圖形繪制方法的另一種流程圖;
[0028]圖3為本發(fā)明實(shí)施例中日歷控件示意圖;
[0029]圖4為本發(fā)明實(shí)施例中圖形繪制裝置的功能模塊示意圖;
[0030]圖5為本發(fā)明實(shí)施例中圖形繪制裝置的另一種功能模塊示意圖。
【具體實(shí)施方式】
[0031]本發(fā)明實(shí)施例提供了一種圖形繪制方法及裝置,用于解決圖形的毛邊問(wèn)題,改善圖形的視覺(jué)效果。下面分別進(jìn)行詳細(xì)說(shuō)明。
[0032]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
[0033]本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三…第四”等(如果存在)是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的實(shí)施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0034]本發(fā)明實(shí)施例應(yīng)用于PC客戶端應(yīng)用程序中控件的圖形繪制,在PC客戶端程序中可以通過(guò)C++等編程語(yǔ)言調(diào)用Windows自身的應(yīng)用程序編程接口(API,Applicat1nProgramming Interface)函數(shù)進(jìn)行繪制控件,以及在控件上繪制圖形。
[0035]下面結(jié)合圖1,對(duì)本發(fā)明實(shí)施例中圖形繪制的方法進(jìn)行詳細(xì)說(shuō)明。
[0036]101、在控件上繪制目標(biāo)圖形;
[0037]在客戶端程序的開(kāi)發(fā)中,可以通過(guò)控件封裝重復(fù)的工作,所以很多共用的程序可以封裝成控件,例如:辦公自動(dòng)化(0A,Office Automat1n)系統(tǒng)中的日歷顯示模塊,即可以封裝成控件以供多個(gè)功能模塊使用??丶纳煽梢允菆D形繪制裝置自行創(chuàng)建控件,也可以是圖形繪制裝置使用現(xiàn)成的控件進(jìn)行擴(kuò)展。
[0038]如果在控件上需要加載圖形時(shí),可以通過(guò)調(diào)用API函數(shù)進(jìn)行繪制,在本發(fā)明實(shí)施例中,在圖形繪制裝置生成好控件后,圖形繪制裝置在控件上繪制目標(biāo)圖形,例如日歷控件上用于標(biāo)記日期的紅點(diǎn)標(biāo)記。
[0039]本發(fā)明實(shí)施例中的圖形繪制裝置可以是計(jì)算機(jī)中的處理器,具體此處不做限定。
[0040]102、在控件上繪制透明背景層;
[0041]圖形繪制裝置在控件上繪制好目標(biāo)圖形后,為了解決目標(biāo)圖形會(huì)出現(xiàn)毛邊的問(wèn)題,再在控件上繪制透明背景層,該背景層可以是透明的PNG圖,作為目標(biāo)圖形的承載層,位于目標(biāo)圖形的下一層。
[0042]需要說(shuō)明的是,透明背景層除了可以是PNG圖以外,還可以是其他格式的圖,例如:JPEG、BMP、TIFF格式,具體此處不做限定。
[0043]103、在控件上繪制無(wú)邊框窗口。
[0044]圖形繪制裝置在繪制好透明背景層后,再繪制無(wú)邊框的窗口,該無(wú)邊框窗口位于目標(biāo)圖形的上一層,將該無(wú)邊框窗口的背景設(shè)為透明背景層對(duì)應(yīng)的位置的位圖,呈現(xiàn)透明的視覺(jué)效果,如此,就能遮蓋掉目標(biāo)圖形的毛邊,且不會(huì)遮蓋掉目標(biāo)圖形。
[0045]本發(fā)明實(shí)施例中,圖形繪制裝置在控件上繪制目標(biāo)圖形,然后在控件上繪制透明背景層,該透明背景層位于目標(biāo)圖形的下一層,再在控件上繪制無(wú)邊框窗口,無(wú)邊框窗口的背景為與背景層重疊的位置的位圖,該無(wú)邊框窗口位于目標(biāo)圖形的上一層。因?yàn)闊o(wú)邊框窗口的背景與目標(biāo)圖形的透明背景層相同,所以當(dāng)無(wú)邊框窗口覆蓋在目標(biāo)圖形上時(shí),可以遮蓋目標(biāo)圖形的毛邊,從而能夠改善圖形的視覺(jué)效果。
[0046]在具體的實(shí)施例中,圖形繪制裝置繪制目標(biāo)圖形以及透明背景層、無(wú)邊框窗口都可以調(diào)用API函數(shù)進(jìn)行繪制,下面結(jié)合圖2,對(duì)本發(fā)明實(shí)施例中圖形繪制的方法進(jìn)行詳細(xì)說(shuō)明。
[0047]201、通過(guò)自定義用戶控件Usercontrol函數(shù)編寫(xiě)以生成控件;
[0048]在客戶端程序的開(kāi)發(fā)中,可以通過(guò)控件封裝重復(fù)的工作,所以很多共用的程序可以封裝成控件,例如:辦公自動(dòng)化(0A,Office Automat1n)系統(tǒng)中的日歷顯示模塊,即可以封裝成控件以供多個(gè)功能模塊使用??丶纳煽梢允菆D形繪制裝置自行創(chuàng)建控件,也可以使用現(xiàn)成的控件進(jìn)行擴(kuò)展。
[0049]具體的,可以通過(guò)圖形繪制裝置調(diào)用自定義用戶控件Usercontrol函數(shù)編寫(xiě)以生成控件?;蛘?,通過(guò)繼承Windows控件,在Windows控件基礎(chǔ)上進(jìn)行重寫(xiě)以形成目標(biāo)控件。
[0050]本發(fā)明實(shí)施例中的圖形繪制裝置可以是計(jì)算機(jī)中的處理器,具體此處不做限定。
[0051]202、調(diào)用UpdateLayerdWindow應(yīng)用程序編程接口 API函數(shù),基于alpha通道在控件上繪制目標(biāo)圖形;
[0052]在生成好控件后,圖形繪制裝置可以調(diào)用UpdateLayerdWindow接口函數(shù),基于alpha通道在控件上繪制目標(biāo)圖形。
[0053]具體的,目標(biāo)圖形為弧狀圖形,可以為圓形、圓點(diǎn)、橢圓等,例如日歷控件上用于標(biāo)記日期的紅點(diǎn)標(biāo)記。
[0054]203、調(diào)用UpdateLayerdWindow API函數(shù),基于alpha通道在控件上繪制透明背景層;
[0055]圖形繪制裝置在調(diào)用UpdateLayerdWindow函數(shù)控件上繪制好目標(biāo)圖形后,因?yàn)橛昧?WS_EX_LAYERED屬性,當(dāng)前的窗體不處理paint事件,所以窗體上無(wú)法繪制控件,但這個(gè)控件確實(shí)存在,而且可以響應(yīng)時(shí)間,所以之后可以采用雙層窗口,先在控件上繪制透明背景層,該背景層可以是透明的PNG圖,作為目標(biāo)圖形的承載層,位于目標(biāo)圖形的下一層。
[0056]需要說(shuō)明的是,透明背景層除了可以是PNG圖以外,還可以是其他格式的圖,例如:JPEG、BMP、TIFF格式,具體此處不做限定。
[0057]204、在控件上繪制無(wú)邊框窗口,無(wú)邊框窗口的背景為與透明背景層重疊的位置的位圖。
[0058]圖形繪制裝置繪制后透明背景層后,再繪制頂層控