本發(fā)明涉及圖像處理技術領域,尤其涉及一種利用畫布繪制彈幕的方法及裝置。
背景技術:
canvas是html中的畫布元素,canvas既能支持腳本化瀏覽器端繪圖操作,還能夠響應用戶的操作,如鼠標點擊和鍵盤按鍵等,并且還能夠應用到動畫的制作中,繪制2d和3d畫面。在瀏覽器支持方面,只要是支持html5的瀏覽器均支持canvas。
然而,現(xiàn)有技術在利用canvas繪制彈幕時,采用即時繪制的方式對彈幕進行繪制,以及顯示,即,針對某一待顯示彈幕字符而言,將該待顯示彈幕字符中的字符逐個繪制到彈幕顯示區(qū)域進行顯示,當該待顯示彈幕字符中存在重復的字符時,針對重復的字符會進行重復的繪制,當該待顯示彈幕字符中存在已不是第一次在該彈幕顯示區(qū)域中顯示的字符時,對字符仍然會重新繪制,從而,采用該方式繪制彈幕當彈幕量較大時,彈幕顯示區(qū)域?qū)霈F(xiàn)閃爍。
技術實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的利用畫布繪制彈幕的方法及裝置。
本發(fā)明實施例提供一種利用畫布繪制彈幕的方法,所述方法包括:
獲取待顯示彈幕字符串;
將所述待顯示彈幕字符串分解成單個字符;
依次判斷各個字符的字符圖像是否存在于預設的字庫畫布中;
若所述字庫畫布中存在字符的字符圖像,則從所述字庫畫布中提取出字符的字符圖像,若所述字庫畫布中不存在字符的字符圖像,則在所述字庫畫布中繪制字符的字符圖像,并從所述字庫畫布中提取出繪制好的字符的字符圖像;
按照提取先后順序依次將提取出的字符圖像繪制到預設的彈幕對象畫布中,對提取出的所有字符圖像進行拼接,獲得與所述待顯示彈幕字符串對應的彈幕圖像;
在彈幕顯示區(qū)域?qū)λ鰪椖粓D像進行顯示。
優(yōu)選的,所述依次判斷各個字符的字符圖像是否存在于預設的字庫畫布中,包括:
依次判斷各個字符是否存在于彈幕散列表中,所述彈幕散列表用于記錄字符以及記錄字符圖像在所述字庫畫布中的位置;
其中,當字符存在于所述彈幕散列表中,則表明字符的字符圖像存在于所述字庫畫布中,當字符不存在于所述彈幕散列表中,則表明字符對應的字符圖像不存在于所述字庫畫布中。
優(yōu)選的,在所述在所述字庫畫布中繪制字符的字符圖像之后,所述方法包括:
將字符保存到所述彈幕散列表中,同時將字符的字符圖像在所述字庫畫布中的位置保存在所述彈幕散列表中。
優(yōu)選的,所述對在彈幕顯示區(qū)域?qū)λ鰪椖粓D像進行顯示,包括:
將所述彈幕圖像繪制到彈幕即時幀畫布中;
將所述彈幕即時幀畫布中的所述彈幕圖像推送到彈幕緩沖畫布中進行緩沖;
將所述彈幕緩沖畫布中緩沖好的所述彈幕圖像渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示。
優(yōu)選的,所述將所述彈幕圖像繪制到彈幕即時幀畫布中,包括:
將所述彈幕圖像放置于所述彈幕顯示區(qū)域的閑置彈道中;
將所述閑置彈道內(nèi)的所述彈幕圖像繪制到所述彈幕即時幀畫布中。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種利用畫布繪制彈幕的裝置,所述裝置包括:
獲取模塊,用于獲取待顯示彈幕字符串;
分解模塊,用于將所述待顯示彈幕字符串分解成單個字符;
判斷模塊,用于依次判斷各個字符的字符圖像是否存在于預設的字庫畫布中;
提取模塊,用于若所述字庫畫布中存在字符的字符圖像,則從所述字庫畫布中提取出字符的字符圖像,若所述字庫畫布中不存在字符的字符圖像,則在所述字庫畫布中繪制字符的字符圖像,并從所述字庫畫布中提取出繪制好的字符的字符圖像;
拼接模塊,用于按照提取先后順序依次將提取出的字符圖像繪制到預設的彈幕對象畫布中,對提取出的所有字符圖像進行拼接,獲得與所述待顯示彈幕字符串對應的彈幕圖像;
顯示模塊,用于在彈幕顯示區(qū)域?qū)λ鰪椖粓D像進行顯示。
優(yōu)選的,所述判斷模塊具體用于:
依次判斷各個字符是否存在于彈幕散列表中,所述彈幕散列表用于記錄字符以及記錄字符圖像在所述字庫畫布中的位置;
其中,當字符存在于所述彈幕散列表中,則表明字符的字符圖像存在于所述字庫畫布中,當字符不存在于所述彈幕散列表中,則表明字符對應的字符圖像不存在于所述字庫畫布中。
優(yōu)選的,所述裝置還包括:
保存模塊,用于將字符保存到所述彈幕散列表中,同時將字符的字符圖像在所述字庫畫布中的位置保存在所述彈幕散列表中。
優(yōu)選的,所述顯示模塊,包括:
繪制單元,用于將所述彈幕圖像繪制到彈幕即時幀畫布中;
推送單元,用于將所述彈幕即時幀畫布中的所述彈幕圖像推送到彈幕緩沖畫布中進行緩沖;
渲染單元,用于將所述彈幕緩沖畫布中緩沖好的所述彈幕圖像渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示。
優(yōu)選的,所述繪制單元,包括:
圖形放置子單元,用于將所述彈幕圖像放置于所述彈幕顯示區(qū)域的閑置彈道中;
繪制子單元,用于將所述閑置彈道內(nèi)的所述彈幕圖像繪制到所述彈幕即時幀畫布中。
本發(fā)明實施例中的一個或多個技術方案,至少具有如下技術效果或優(yōu)點:
本發(fā)明在獲取到待顯示彈幕字符串之后,將待顯示彈幕字符串分解成單個字符,通過判斷各個字符的字符圖像是否存在于字庫畫布,若存在,則直接從字庫畫布中提取出該字符的字符圖像,無需重新繪制,若不存在,則將該字符的字符圖像繪制到字庫畫布中,以實現(xiàn)對該字符的字符圖像的緩存,在按照提取先后順序依次將提取出的字符圖像繪制到彈幕對象畫布之后,得到與該待顯示彈幕字符串對應的彈幕圖像,并在彈幕顯示區(qū)域?qū)υ搹椖粓D像進行顯示,從而能夠避免當彈幕量大時彈幕顯示區(qū)域出現(xiàn)閃爍,加快了彈幕的渲染效率。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考圖形表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例中的一種利用畫布繪制彈幕的方法的流程圖;
圖2示出了本發(fā)明實施例中的一種利用畫布繪制彈幕的裝置的結構圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領域的技術人員。
本發(fā)明實施例提供一種利用畫布繪制彈幕的方法,應用于瀏覽器中,如圖1所示,所述方法包括:
步驟101:獲取待顯示彈幕字符串。
步驟102:將所述待顯示彈幕字符串分解成單個字符。
具體來講,在本申請中,當獲取到的待顯示彈幕字符串為m時,可以使用m.split(‘’)對待顯示彈幕字符串m進行分解,最終將m分解為若干單個字符,分解得到的所有字符構成一個字符數(shù)組,該字符數(shù)組與待顯示彈幕字符串對應。例如,當待顯示彈幕字符串為“每個人的直播平臺”時,將該待顯示彈幕字符串分解后得到字符數(shù)組[‘每’,‘個’,‘人’,‘的’,‘直’,‘播’,‘平’,‘臺’]。
步驟103:依次判斷各個字符的字符圖像是否存在于預設的字庫層的字庫畫布中。
步驟104:若所述字庫畫布中存在字符的字符圖像,則從所述字庫畫布中提取出字符的字符圖像,若所述字庫畫布中不存在字符的字符圖像,則在所述字庫畫布中繪制字符的字符圖像,并從所述字庫畫布中提取出繪制好的字符的字符圖像。
在本申請中,針對每個字符而言,若所述字庫畫布中存在該字符的字符圖像,則從所述字庫畫布中提取出該字符的字符圖像,若所述字庫畫布中不存在該字符的字符圖像,則在所述字庫畫布中繪制該字符的字符圖像,并從所述字庫畫布中提取出繪制好的該字符的字符圖像。
在本申請中,預先在瀏覽器中建立一個字庫層,并在該字庫層中建立一個隱藏的字庫畫布(canvas),該字庫畫布為一個畫布對象,對于字庫畫布的建立可以采用varcanv=document.createelement(‘canvas’);函數(shù),并使用varcontext=canv.getcontext(‘2d’);函數(shù)獲取字庫畫布繪制上下文對象。在分解得到單個字符之后,依次對每個字符進行判斷,判斷該字符的字符圖像是否存在于字庫畫布中,若字庫畫布中存在該字符的字符圖像,則無需將該字符的字符圖像重復繪制的字庫畫布中,直接提取該字符的字符圖像,若字庫畫布中不存在該字符的字符圖像,則將該字符的字符圖像繪制到字庫畫布中。
在一種具體的實施方式中,步驟103具體為:依次判斷各個字符是否存在于彈幕散列表中,所述彈幕散列表用于記錄字符以及記錄字符圖像在所述字庫畫布中的位置;其中,當字符存在于所述彈幕散列表中,則表明該字符的字符圖像存在于所述字庫畫布中,當字符不存在于所述彈幕散列表中,則表明該字符對應的字符圖像不存在于所述字庫畫布中。并且,當字符不存在于彈幕散列表中,當在字庫畫布中繪制該字符的字符圖像之后,將該字符保存到彈幕散列表中,同時將該字符的字符圖像在字庫畫布中的位置保存到彈幕散列表中。
在本申請中,在字庫層中預先建立一個彈幕散列表,該彈幕散列表可以表示為varrepo={};,該彈幕散列表用于對字符進行記錄,以及用于對字符的字符圖像在字庫畫布中的位置進行記錄,字符圖像在字庫畫布中的位置可以通過以下方法進行表示:在字庫畫布中建立包含x軸和y軸的直角坐標系,并利用x軸坐標、y軸坐標和字符寬度對字符圖像的位置進行記錄,對應地,在代碼實現(xiàn)過程中,建立變量endx、endy分別記錄字庫畫布中繪制的最后一個字符結尾處的x軸坐標和y軸坐標,當字庫畫布中不存在字符圖像時,默認endx和endy均為0。
進一步來講,在判斷字符是否存在于彈幕散列表中時,可以采用函數(shù)if(??!r[‘字’])。當在彈幕散列表中查找到該字符時,表明字庫畫布中存在該字符的字符圖像,根據(jù)彈幕散列表中記錄的該字符的字符圖像的位置信息,在字庫畫布中定位該字符的字符圖像的位置,并提取出該字符的字符圖像。當在彈幕散列表中未查找到該字符時,計算該字符的字符寬度,將該字符的字符圖像繪制到字庫畫布中,同時,將該字符保存到彈幕散列表中,具體地,首先使用代碼varw=math.ceil(context.measuretext(‘字’).width);獲得字符的字符寬度w,接著使用context.filltext(‘字’,endx,endy);將字符的字符圖像繪制到字庫畫布中,使用endx=endx+w,更新endx,當需要換行時,使用endy=endy+行高;更新endy,同時,將使用repo[‘字’]={x:endx,y:endy,width:w};將字符和字符圖像的位置更新到彈幕散列表中。本申請通過彈幕散列表對字符以及字符圖像在字庫畫布中的位置進行記錄,便于對字符圖像的檢索查詢。
步驟105:按照提取先后順序依次將提取出的字符圖像繪制到預設的彈幕對象畫布中,對提取出的所有字符圖像進行拼接,獲得與所述待顯示彈幕字符串對應的彈幕圖像。
在具體實施過程中,本申請預先在瀏覽器中建立一個彈幕對象緩沖層,并在彈幕對象緩沖層中建立一個預設的彈幕對象畫布,一個彈幕對象畫布對應于一個待顯示彈幕字符串,彈幕對象緩沖層中可以存放多個彈幕對象畫布??梢圆捎胿ardanmakucanv=document.createelement(‘canvas’);建立彈幕對象畫布,并使用vardanmakuctx=danmakucanv.getcontext(‘2d’);獲取彈幕對象畫布繪制上下文。本申請利用某一畫布能夠以其他畫布作為圖像繪制源的特性,在從字庫畫布中提取出字符圖像之后,將字符圖像作為圖像源,以增量繪制的方式將字符圖像繪制到彈幕對象畫布中,例如,在字庫層中檢索到與字符對應的信息為varc={x:10,y:0,w:10},字庫畫布中的圖像源為repocanv,當前時刻彈幕對象畫布中最后繪制的x軸坐標為x,則,使用danmakuctx.drawimage(repocanv,x,0,c.w,行高,c.x,c.y,c.w,行高)將提取出的字符圖像繪制到彈幕對象畫布中,最后更新彈幕對象畫布中最后繪制的x軸坐標為,x=x+c.w;。本申請按照提取先后順序,通過循環(huán)上述過程將字符數(shù)組中的各個字符的字符圖像繪制到彈幕對象畫布中,實現(xiàn)了對提取出的所有字符圖像的拼接,最終獲得與待顯示彈幕字符串對應的彈幕圖像。
步驟106:在彈幕顯示區(qū)域?qū)λ鰪椖粓D像進行顯示。
在一種具體的實施方式中,步驟106包括:
將所述彈幕圖像繪制到彈幕即時幀畫布中;
將所述彈幕即時幀畫布中的所述彈幕圖像推送到彈幕緩沖畫布中進行緩沖;
將所述彈幕緩沖畫布中緩沖好的所述彈幕圖像渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示。
具體來件,在本申請中,在瀏覽器中建立有彈幕即時幀層,彈幕即時幀層中建立有彈幕即時幀畫布,在將彈幕圖像繪制到彈幕即時幀畫布之前,使用varframecanv=document.createelement(‘canvas’);初始化彈幕即時幀畫布,使用varframectx=framecanv.getcontext(‘2d’);獲取彈幕即時幀畫布繪制上下文。當獲取的待顯示彈幕字符串的數(shù)量為一個時,以該待顯示彈幕字符串對應的彈幕圖像為繪制源,可以先將該彈幕圖像放置于彈幕顯示區(qū)域的閑置彈道中,再將閑置彈道內(nèi)的彈幕圖像繪制到彈幕即時幀畫布中。
另外,瀏覽器中還建立有彈幕畫面緩沖畫布和畫面渲染畫布,在將彈幕圖像繪制到彈幕即時幀畫布中之后,以彈幕即時幀畫布中的圖像作為繪制源,當有畫面從彈幕即時幀畫布推送到彈幕緩沖畫布時,先使用clearrect(0,0,彈幕區(qū)域?qū)挾?,彈幕區(qū)域高度);函數(shù)對彈幕緩沖畫布當前畫面進行擦除,再使用drawimage(framecanv,0,0);函數(shù)進行繪制。在彈幕圖像被推送到彈幕緩沖畫布中之后,以彈幕緩沖畫布為繪制源,將彈幕緩沖畫布中緩沖好的彈幕圖像渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示。
在本申請中,彈幕即時幀畫布能夠?qū)γ恳粠枰@示的彈幕畫面進行預繪制,預繪制完成后主動將繪制好的彈幕畫面推送到彈幕緩沖畫布中進行緩沖,當彈幕畫面因瀏覽器卡頓而出現(xiàn)繪制不完整的情況時,將不會將彈幕畫面推送到彈幕緩沖畫布中,彈幕緩沖畫布中保持原有的彈幕畫面,本申請通過彈幕緩沖層能夠保證彈幕畫面的完整性,此處的畫面也即彈幕圖像。
需要說明的是,在本申請中,字庫畫布、彈幕對象畫布、彈幕即時幀畫布和彈幕緩沖畫布均為隱藏的畫布,而畫面渲染畫布為最終顯示到屏幕中的彈幕顯示區(qū)域的可見的畫布。本申請中的字庫畫布用于存儲各個單個字符的字符圖像,彈幕對象畫布用于存儲與待顯彈幕字符串對應的彈幕圖像,彈幕即時幀畫布用于存放彈幕畫面,彈幕緩沖畫布用于對彈幕畫面進行緩沖,畫面渲染畫布用于對彈幕畫面進行顯示。
在本申請中,當獲取的是多個待顯示彈幕字符串,且,需要將獲取到的多個待顯示彈幕字符串在同一時刻下進行顯示,則,利用畫布繪制彈幕的方法的具體實現(xiàn)過程為:在根據(jù)上述實施例分別獲得與各個待顯示彈幕字符串對應的彈幕圖像之后,以各個彈幕圖像作為繪制源,將各個彈幕圖像放置到閑置彈道中,遍歷閑置彈道,將閑置彈道中的彈幕圖像分別繪制到彈幕即時幀畫布中,從而形成與該時刻對應的一幀彈幕畫面。其中,針對彈幕即時幀畫布而言,由于彈幕的呈現(xiàn)形式為彈幕動畫,因此,可以根據(jù)預設彈幕顯示時間和預設彈幕顯示速度,開啟定時器,在定時器中對彈幕即時幀畫布進行不斷擦除和繪制操作,從而形成彈幕動畫,對于定時器的啟動,可以采用requestanimationframe()函數(shù)啟動定時器。進一步,當在彈幕即時幀畫布上形成一幀彈幕畫面之后,將該幀彈幕畫面推送到彈幕緩沖畫布中進行緩沖,最后,將彈幕緩沖畫布中緩沖好的彈幕畫面渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示,對于彈幕的動態(tài)顯示,則可以使用requestanimationframe作為定時器不斷地從彈幕緩沖畫布提取緩沖好的彈幕畫面進行渲染。
下面將結合一具體實施例對本申請的利用畫布繪制彈幕的方法進行詳細描述:
當獲取到第一待顯示彈幕字符串為“大家好”、第二待顯示彈幕字符串為“二周目”時,針對第一待顯示彈幕字符串而言,將第一待顯示彈幕字符串分解成單個字符得到第一字符數(shù)組[‘大’‘家’‘好’],判斷字符‘大’是否存在于彈幕散列表中,若存在,則根據(jù)彈幕散列表中記錄有的字符‘大’的字符圖像在字庫畫布中的位置,從字庫畫布中提取出字符‘大’的字符圖像,接著,判斷字符‘家’是否存在于彈幕散列表中,若存在,則根據(jù)彈幕散列表中記錄有的字符‘家’的字符圖像在字庫畫布中的位置,從字庫畫布中提取出字符‘家’的字符圖像,接著,判斷字符‘好’是否存在于彈幕散列表中,若不存在,則將字符‘好’的字符圖像繪制到字庫畫板中,并將字符‘好’以及字符‘好’的字符圖像的位置保存到彈幕散列表中,同時,從字庫畫布中提取出字符‘好’的字符圖像,在提取出各個字符之后,按照提取先后順序依次將字符‘大’‘家’‘好’的字符圖像繪制到彈幕對象畫布中,對這三個字符圖像進行拼接,獲得與第一待顯示彈幕字符串對應的第一彈幕圖像,同理,采用上述方式可以獲得與第二待顯示彈幕字符串對應的第二彈幕圖像,此處不再贅述,其中,第一彈幕圖像對應第一彈幕對象畫布,第二圖像對應第二彈幕對象畫布。在獲得第一彈幕圖像和第二彈幕圖像之后,將第一彈幕圖像放置到彈幕顯示區(qū)域中的第一閑置彈道中,并將第二彈幕圖像放置到彈幕顯示區(qū)域中的第二閑置彈道中,通過遍歷第一閑置彈道和第二閑置彈道,將第一彈幕圖像和第二彈幕圖像繪制到彈幕即時幀畫布中,形成一幀彈幕畫面,再將該彈幕畫面推送到彈幕緩沖畫布中進行緩沖,最后將緩沖好的彈幕畫面渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示。
需要說明的是,在本申請中,通常一個字庫畫布僅對應一種字體顏色,當需要繪制多種顏色的彈幕時,可以在字庫層中建立多個對應于不同顏色的字庫畫布,以{顏色:字庫畫布}來建立顏色與字庫畫布之間的對應關系。例如,在字庫層中建立對應于紅色的第一字庫畫布、對應于黑色的第二字庫畫布以及對應于藍色的第三字庫畫布,當同時獲取到對應于紅色的第一待顯示彈幕字符串、對應于黑色的第二待顯示彈幕字符串以及對應于藍色的第三待顯示彈幕字符串時,從而,針對第一待顯示彈幕字符串而言,在生成與第一待顯示彈幕字符串對應的第一彈幕圖像的過程中,在第一字庫畫布中對第一待顯示彈幕字符串中的各個字符的字符圖像進行查找,針對第一字符畫布中未存在的字符,將該字符的字符圖像繪制到第一字庫畫布中,同理在第二字庫畫布中對第二待顯示彈幕字符串中的各個字符的字符圖像進行查找,針對第二字符畫布中未存在的字符,將該字符的字符圖像繪制到第二字庫畫布中,同理在第三字庫畫布中對第三待顯示彈幕字符串中的各個字符的字符圖像進行查找,針對第三字符畫布中未存在的字符,將該字符的字符圖像繪制到第三字庫畫布中。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種利用畫布繪制彈幕的裝置,如圖2所示,所述裝置包括:
獲取模塊201,用于獲取待顯示彈幕字符串;
分解模塊202,用于將所述待顯示彈幕字符串分解成單個字符;
判斷模塊203,用于依次判斷各個字符的字符圖像是否存在于預設的字庫畫布中;
提取模塊204,用于若所述字庫畫布中存在字符的字符圖像,則從所述字庫畫布中提取出字符的字符圖像,若所述字庫畫布中不存在字符的字符圖像,則在所述字庫畫布中繪制字符的字符圖像,并從所述字庫畫布中提取出繪制好的字符的字符圖像;
拼接模塊205,用于按照提取先后順序依次將提取出的字符圖像繪制到預設的彈幕對象畫布中,對提取出的所有字符圖像進行拼接,獲得與所述待顯示彈幕字符串對應的彈幕圖像;
顯示模塊206,用于在彈幕顯示區(qū)域?qū)λ鰪椖粓D像進行顯示。
優(yōu)選的,判斷模塊203具體用于:
依次判斷各個字符是否存在于彈幕散列表中,所述彈幕散列表用于記錄字符以及記錄字符圖像在所述字庫畫布中的位置;
其中,當字符存在于所述彈幕散列表中,則表明字符的字符圖像存在于所述字庫畫布中,當字符不存在于所述彈幕散列表中,則表明字符對應的字符圖像不存在于所述字庫畫布中。
優(yōu)選的,所述裝置還包括:
保存模塊,用于將字符保存到所述彈幕散列表中,同時將字符的字符圖像在所述字庫畫布中的位置保存在所述彈幕散列表中。
優(yōu)選的,顯示模塊206,包括:
繪制單元,用于將所述彈幕圖像繪制到彈幕即時幀畫布中;
推送單元,用于將所述彈幕即時幀畫布中的所述彈幕圖像推送到彈幕緩沖畫布中進行緩沖;
渲染單元,用于將所述彈幕緩沖畫布中緩沖好的所述彈幕圖像渲染到彈幕顯示區(qū)域內(nèi)的畫面渲染畫布中進行顯示。
優(yōu)選的,所述繪制單元,包括:
圖形放置子單元,用于將所述彈幕圖像放置于所述彈幕顯示區(qū)域的閑置彈道中;
繪制子單元,用于將所述閑置彈道內(nèi)的所述彈幕圖像繪制到所述彈幕即時幀畫布中。
上述本申請實施例中的技術方案,至少具有如下的技術效果或優(yōu)點:
本發(fā)明在獲取到待顯示彈幕字符串之后,將待顯示彈幕字符串分解成單個字符,通過判斷各個字符的字符圖像是否存在于字庫畫布,若存在,則直接從字庫畫布中提取出該字符的字符圖像,無需重新繪制,若不存在,則將該字符的字符圖像繪制到字庫畫布中,以實現(xiàn)對該字符的字符圖像的緩存,在按照提取先后順序依次將提取出的字符圖像繪制到彈幕對象畫布之后,得到與該待顯示彈幕字符串對應的彈幕圖像,并在彈幕顯示區(qū)域?qū)υ搹椖粓D像進行顯示,從而能夠避免當彈幕量大時彈幕顯示區(qū)域出現(xiàn)閃爍,加快了彈幕的渲染效率。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構造這類系統(tǒng)所要求的結構是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發(fā)明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(dsp)來實現(xiàn)根據(jù)本發(fā)明實施例的利用畫布繪制彈幕的裝置,中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。