基于Android的圈選縮放方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種基于Android的圈選縮放方法和系統(tǒng),該方法包括如下步驟:讀取幀緩沖存儲(chǔ)器中的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上;監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域;根據(jù)屏幕參數(shù)和圈選區(qū)域構(gòu)建待縮放區(qū)域;根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;確定縮放比例;根據(jù)需移動(dòng)的距離獲取生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣;根據(jù)平移矩陣和縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)和縮放。本發(fā)明通過(guò)直接讀取幀緩存中的數(shù)據(jù),實(shí)現(xiàn)快速截屏,可以獲得視頻播放中的瞬時(shí)畫面;根據(jù)圈選區(qū)域與屏幕參數(shù)自動(dòng)構(gòu)建需要放大的區(qū)域和縮放比例,自動(dòng)進(jìn)行移動(dòng)縮放并顯示在屏幕中間位置,實(shí)現(xiàn)任意界面的縮放。
【專利說(shuō)明】基于Android的圈選縮放方法和系統(tǒng)
【【技術(shù)領(lǐng)域】】
[0001]本發(fā)明涉及智能設(shè)備領(lǐng)域,特別涉及一種基于Android的圈選縮放方法和系統(tǒng)?!尽颈尘凹夹g(shù)】】
[0002]Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng),現(xiàn)已經(jīng)大規(guī)模的應(yīng)用在智能手機(jī)、平板電腦等智能設(shè)備上。而現(xiàn)有的基于Android的智能設(shè)備其功能也日益強(qiáng)大,例如智能平板設(shè)備,具備書(shū)寫、批注、繪畫、多媒體娛樂(lè)等功能,融入了人機(jī)交互、平板顯示、多媒體信息處理和網(wǎng)絡(luò)傳輸?shù)榷囗?xiàng)技術(shù),是信息化時(shí)代中辦公、教學(xué)、圖文互動(dòng)演示的優(yōu)選解決方案,現(xiàn)有的基于Android的智能平板設(shè)備在教室或者會(huì)議場(chǎng)景使用時(shí),由于顯示的圖片、文字或者視頻畫面過(guò)小,坐在后排的學(xué)生或者工作人員經(jīng)常看不清楚屏幕上的內(nèi)容,此時(shí)便需要對(duì)屏幕上顯示的內(nèi)容進(jìn)行放大。
【
【發(fā)明內(nèi)容】
】
[0003]基于此,本發(fā)明為解決現(xiàn)有技術(shù)中的問(wèn)題,提供一種基于Android的圈選縮放方法。
[0004]本發(fā)明實(shí)施例的內(nèi)容如下:
[0005]—種基于Android的圈選縮放方法,包括如下步驟:
[0006]在接收到觸發(fā)指令后,讀取幀緩沖存儲(chǔ)器中的與當(dāng)前屏幕界面對(duì)應(yīng)的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上;
[0007]監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域;
[0008]根據(jù)屏幕參數(shù)以及所述圈選區(qū)域構(gòu)建待縮放區(qū)域;
[0009]根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;根據(jù)所述待縮放區(qū)域和所述屏幕參數(shù)確定縮放比例;根據(jù)所述需移動(dòng)的距離生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣;
[0010]根據(jù)所述平移矩陣和所述縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)和縮放。
[0011]相應(yīng)的,本發(fā)明實(shí)施例還提供了一種基于Android的圈選縮放系統(tǒng),包括:
[0012]截屏模塊,用于在接收到觸發(fā)指令后,讀取幀緩沖存儲(chǔ)器中的與當(dāng)前屏幕界面對(duì)應(yīng)的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上;
[0013]圈選模塊,用于監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域;
[0014]待縮放區(qū)域構(gòu)建模塊,用于根據(jù)屏幕參數(shù)以及所述圈選區(qū)域構(gòu)建待縮放區(qū)域;
[0015]矩陣生成模塊,用于根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;根據(jù)所述待縮放區(qū)域和所述屏幕參數(shù)確定縮放比例;根據(jù)所述需移動(dòng)的距離生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣;
[0016]移動(dòng)縮放模塊,用于根據(jù)所述平移矩陣和所述縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)縮放。
[0017]本發(fā)明的有益效果在于:本發(fā)明通過(guò)直接讀取Android幀緩存中的數(shù)據(jù),實(shí)現(xiàn)快速截屏,可以獲得視頻播放中的瞬時(shí)畫面;根據(jù)圈選區(qū)域與屏幕參數(shù)自動(dòng)構(gòu)建需要放大的區(qū)域和縮放比例,自動(dòng)進(jìn)行移動(dòng)縮放并顯示在屏幕中間位置,實(shí)現(xiàn)任意界面的縮放。
【【專利附圖】
【附圖說(shuō)明】】
[0018]圖1為本發(fā)明實(shí)施例中基于Android的圈選縮放方法的流程示意圖;
[0019]圖2為本發(fā)明實(shí)施例中的截屏過(guò)程示意圖;
[0020]圖3為本發(fā)明實(shí)施例中一種生成圈選區(qū)域的方法的示意圖;
[0021]圖4為本發(fā)明實(shí)施例中一種待縮放區(qū)域構(gòu)建方法的流程示意圖;
[0022]圖5為本發(fā)明實(shí)施例中基于Android的圈選縮放系統(tǒng)的結(jié)構(gòu)示意圖;
[0023]圖6為本發(fā)明實(shí)施例中待縮放區(qū)域構(gòu)建模塊的一種結(jié)構(gòu)示意圖。
【【具體實(shí)施方式】】
[0024]下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的內(nèi)容作詳細(xì)描述。需要指出的是,雖然下面描述的實(shí)施例中僅對(duì)于圖片的放大進(jìn)行了說(shuō)明,但應(yīng)用本發(fā)明的方法,同樣可以實(shí)現(xiàn)任意界面的縮小。
[0025]如圖1所示,一種基于Android的圈選縮放方法,包括如下步驟:
[0026]SlOO在接收到觸發(fā)指令后,讀取幀緩沖存儲(chǔ)器中的與當(dāng)前屏幕界面對(duì)應(yīng)的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上;
[0027]S200監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域;
[0028]S300根據(jù)屏幕參數(shù)和所述圈選區(qū)域構(gòu)建待縮放區(qū)域;
[0029]S400根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;根據(jù)所述待縮放區(qū)域和所述屏幕參數(shù)確定縮放比例;根據(jù)所述需移動(dòng)的距離生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣;
[0030]S500根據(jù)所述平移矩陣和所述縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)和縮放。
[0031 ] 具體的,在接收到觸發(fā)指令后,首先進(jìn)行截屏操作。所述的觸發(fā)指令可來(lái)自于兩種方式,一種是在 Android 框架層(framework) PhoneWindowManager (Android 窗口管理)發(fā)給上層應(yīng)用之前攔截該消息,防止按鍵消息被上層應(yīng)用程序攔截。在攔截到圈選縮放按鍵消息后觸發(fā)后續(xù)的截屏操作;另外一種方式是在屏幕上設(shè)置有浮動(dòng)工具,浮動(dòng)工具中包括浮動(dòng)圈選縮放按鈕,監(jiān)聽(tīng)浮動(dòng)圈選縮放按鈕的按下事件,在接收到該按下事件時(shí),觸發(fā)后續(xù)的截屏操作。上述兩種觸發(fā)方式可取其一或者結(jié)合使用。
[0032]本實(shí)施例中的截屏操作基于幀緩沖存儲(chǔ)器(Frame Buffer),圖2為本實(shí)施例中的截屏過(guò)程示意圖。幀緩沖存儲(chǔ)器(以下簡(jiǎn)稱幀緩存)是屏幕所顯示畫面的一個(gè)直接映象,又稱為位映射圖(Bit Map)或光柵。幀緩存的每一存儲(chǔ)單元對(duì)應(yīng)屏幕上的一個(gè)像素,整個(gè)幀緩存對(duì)應(yīng)一幀圖像。Android設(shè)備上的圖像信息都是通過(guò)幀緩存寫到屏幕上去的,因此讀取幀緩存中的原始像素?cái)?shù)據(jù)輸入流,將該輸入流數(shù)據(jù)讀入原始像素?cái)?shù)組,再將該原始像素?cái)?shù)組轉(zhuǎn)換為當(dāng)前Android設(shè)備屏幕所需的顏色數(shù)據(jù)(例如將rgb565編碼的原始數(shù)據(jù),轉(zhuǎn)化為rgb888編碼的位圖數(shù)據(jù)),根據(jù)屏幕長(zhǎng)寬創(chuàng)建Bit Map,設(shè)置為圖片控件imageView的位圖數(shù)據(jù)并在屏幕最上層顯示,實(shí)現(xiàn)凍結(jié)效果,欺騙人類視覺(jué),讓觀眾認(rèn)為一直處于原始界面中。
[0033]截屏之后,獲取用戶的圈選動(dòng)作,即監(jiān)聽(tīng)屏幕觸摸事件,根據(jù)用戶手指的觸摸動(dòng)作生成圈選區(qū)域。具體的,本實(shí)施例提供一種生成圈選區(qū)域的方法,圖3為該方法的流程示意圖。當(dāng)監(jiān)聽(tīng)到用戶手指按下(Mot1nEvent.ACT10N_D0WN)時(shí),在imageView的繪圖方法(onDraw)中調(diào)用Android畫布的繪制矩形方法(canvas.drawRect)繪制矩形,當(dāng)監(jiān)聽(tīng)到用戶手指移動(dòng)(Mot1nEvent.ACT10N_M0VE)時(shí)改變矩形的坐標(biāo),調(diào)用imageView的刷新控件方法(invalidate)重繪控件,繪制矩形;在監(jiān)聽(tīng)到用戶手指離開(kāi)時(shí),根據(jù)最終繪制的矩形生成圈選區(qū)域,并將矩形從界面上移除。
[0034]獲得圈選區(qū)域后,根據(jù)屏幕參數(shù)和圈選區(qū)域自動(dòng)構(gòu)建出待縮放區(qū)域,其目的在于防止縮放圖片造成拉伸變形,保證圖片縮放的真實(shí)。其中,所述的屏幕參數(shù)包括屏幕長(zhǎng)度、屏幕寬度以及屏幕長(zhǎng)寬比,可由Android提供的接口獲取。構(gòu)建待縮放區(qū)域時(shí)保證待縮放區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比一致,限制最大放大比例。換而言之,保證放大后不失真即可。
[0035]在一種實(shí)施方式中,可采用如圖4所示的待縮放區(qū)域構(gòu)建方法。該方法包括如下步驟:
[0036]S301獲取所述圈選區(qū)域的長(zhǎng)度、寬度以及長(zhǎng)寬比,進(jìn)入S302 ;
[0037]S302判斷所述圈選區(qū)域的長(zhǎng)寬比是否大于屏幕長(zhǎng)寬比;若是,則進(jìn)入S303 ;若否,則進(jìn)入S304 ;
[0038]S303將所述圈選區(qū)域的長(zhǎng)度作為所述待縮放區(qū)域的預(yù)選長(zhǎng)度,將所述圈選區(qū)域的長(zhǎng)度除以屏幕長(zhǎng)寬比作為所述待縮放區(qū)域的預(yù)選寬度,進(jìn)入S305 ;
[0039]S304將所述圈選區(qū)域的寬度乘以屏幕長(zhǎng)寬比作為所述待縮放區(qū)域的預(yù)選長(zhǎng)度,將所述圈選區(qū)域的寬度作為所述待縮放區(qū)域的預(yù)選寬度,進(jìn)入S305 ;
[0040]S305將屏幕寬度除以所述待縮放區(qū)域的預(yù)選寬度得到待放大倍數(shù),或者將屏幕長(zhǎng)度除以所述待縮放區(qū)域的預(yù)選長(zhǎng)度得到待放大倍數(shù),判斷所述待放大倍數(shù)是否大于最大放大倍數(shù);若是,則進(jìn)入S306 ;若否,則進(jìn)入S307 ;
[0041]S306將屏幕長(zhǎng)度除以所述最大放大倍數(shù)作為所述待縮放區(qū)域的長(zhǎng)度,將屏幕寬度除以所述最大放大倍數(shù)作為所述待縮放區(qū)域的寬度,進(jìn)入S308 ;
[0042]S307將所述待縮放區(qū)域的預(yù)選長(zhǎng)度作為所述待縮放區(qū)域的長(zhǎng)度,將所述待縮放區(qū)域的預(yù)選寬度作為所述待縮放區(qū)域的寬度,進(jìn)入S308 ;
[0043]S308以所述圈選區(qū)域的中心點(diǎn)作為所述待縮放區(qū)域的中心點(diǎn),根據(jù)所述待縮放區(qū)域的長(zhǎng)度、寬度和中心點(diǎn)構(gòu)建所述待縮放區(qū)域。
[0044]在上述方法中,最終確定的待縮放區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比一致,以保證不拉伸,且限制了放大比例,保證放大后不失真,并且通過(guò)上述方法最終確定的待縮放區(qū)域不小于圈選區(qū)域,保證對(duì)用戶圈選的全部范圍進(jìn)行放大且保證中心點(diǎn)不變。
[0045]在確定待縮放區(qū)域之后,通過(guò)矩陣變換的方式對(duì)待縮放區(qū)域?qū)?yīng)的圖片進(jìn)行放大。首先根據(jù)待縮放區(qū)域的中心點(diǎn)與屏幕中心點(diǎn),進(jìn)行坐標(biāo)相減,得出需移動(dòng)的距離,再根據(jù)待縮放區(qū)域和屏幕參數(shù)確定縮放比例,在本實(shí)例中,為了將待縮放區(qū)域的圖片放大至全屏顯示,因此,將屏幕寬度除以待縮放區(qū)域的寬度,或者將屏幕長(zhǎng)度除以待縮放區(qū)域的長(zhǎng)度,即可獲得縮放比例。采用現(xiàn)有技術(shù),由需平移的距離生成平移矩陣,由縮放比例生成縮放矩陣,在圖片控件imageView的繪圖方法(onDraw)中調(diào)用Android畫布的由位圖數(shù)據(jù)繪制圖片的方法(canvas.drawBitmap),根據(jù)平移矩陣和縮放矩陣計(jì)算出變化后圖像每個(gè)像素所處的坐標(biāo)點(diǎn)后繪圖,從而實(shí)現(xiàn)了利用矩陣變化移動(dòng)和縮放圖片。
[0046]本發(fā)明實(shí)施例中的基于Android的圈選縮放方法中通過(guò)直接讀取Android巾貞緩存中的數(shù)據(jù)進(jìn)行截屏,截屏速度快,效率高,可以截取并放大視頻播放中的瞬時(shí)畫面,而且通過(guò)截屏可以實(shí)現(xiàn)視覺(jué)欺騙,讓觀眾誤以為后續(xù)的縮放操作一直處于原始界面;本發(fā)明根據(jù)圈選區(qū)域與屏幕參數(shù)自動(dòng)構(gòu)建待縮放區(qū)域,保證圖片縮放后不失真,自動(dòng)進(jìn)行移動(dòng)縮放并顯示在屏幕中間位置。采用本發(fā)明的方法可以實(shí)現(xiàn)對(duì)Android智能設(shè)備任意界面的縮放。
[0047]本發(fā)明還提供了一種基于Android的圈選縮放系統(tǒng),如圖5所示,包括:
[0048]截屏模塊100,用于在接收到觸發(fā)指令后,讀取幀緩沖存儲(chǔ)器中的與當(dāng)前屏幕界面對(duì)應(yīng)的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上;
[0049]圈選模塊200,用于監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域;
[0050]待縮放區(qū)域構(gòu)建模塊300,用于根據(jù)屏幕參數(shù)以及所述圈選區(qū)域構(gòu)建待縮放區(qū)域;
[0051]矩陣生成模塊400,用于根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;根據(jù)所述待縮放區(qū)域和屏幕參數(shù)確定縮放比例;根據(jù)所述需移動(dòng)的距離生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣;
[0052]移動(dòng)縮放模塊500,用于根據(jù)所述平移矩陣和所述縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)縮放。
[0053]本發(fā)明的圈選縮放系統(tǒng)還可包括觸發(fā)模塊,在一種實(shí)施方式中,所述觸發(fā)模塊包括圈選縮放按鍵觸發(fā)模,Android framework (框架層)通過(guò)PhoneWindowManager (Android窗口管理)的interceptkeyBeforeDispathing(分發(fā)事件前攔截按鍵)方法攔截圈選縮放按鍵消息,在Android將按鍵消息分發(fā)給上層應(yīng)用之前攔截該按鍵消息,防止該按鍵消息被上層應(yīng)用程序攔截。在攔截到該按鍵消息后,調(diào)用Android startActivity(打開(kāi)應(yīng)用)方法觸發(fā)截屏模塊100。
[0054]在另一種實(shí)施方式中,所述觸發(fā)模塊包括浮動(dòng)圈選縮放按鈕觸發(fā)模塊,用于監(jiān)聽(tīng)浮動(dòng)圈選縮放按鈕的按下事件,當(dāng)接收到所述按下事件時(shí),調(diào)用Android startActivity方法觸發(fā)截屏模塊100。
[0055]上述兩種實(shí)施方式可以結(jié)合使用或者取其一。
[0056]本實(shí)施例中截屏模塊100的截屏操作基于幀緩沖存儲(chǔ)器(Frame Buffer),截屏模塊100讀取幀緩存中的原始像素?cái)?shù)據(jù)輸入流,將該輸入流數(shù)據(jù)讀入原始像素?cái)?shù)組,再將該原始像素?cái)?shù)組轉(zhuǎn)換為當(dāng)前Android設(shè)備屏幕所需的顏色數(shù)據(jù)(例如將rgb565編碼的原始數(shù)據(jù),將其轉(zhuǎn)化為rgb888編碼的位圖數(shù)據(jù)),再結(jié)合屏幕的長(zhǎng)寬創(chuàng)建Bit Map,設(shè)置為圖片控件imageView的位圖數(shù)據(jù)并在屏幕最上層顯示。
[0057]截屏之后,圈選模塊200獲取用戶的圈選動(dòng)作,即監(jiān)聽(tīng)屏幕觸摸事件,根據(jù)用戶手指的觸摸動(dòng)作生成圈選區(qū)域。在一種實(shí)施方式中,圈選模塊200在監(jiān)聽(tīng)到用戶手指按下(Mot1nEvent.ACT10N_D0WN)時(shí),在控件View的繪制圖形方法(onDraw)中調(diào)用Android畫布的繪制矩形方法(canvas.drawRect)繪制矩形,當(dāng)監(jiān)聽(tīng)到用戶手指移動(dòng)(Mot1nEvent.ACT10N_M0VE)時(shí)改變矩形的坐標(biāo),調(diào)用view的刷新控件方法(invalidate)重繪控件,繪制矩形;在監(jiān)聽(tīng)到用戶手指離開(kāi)時(shí),根據(jù)最終繪制的矩形生成圈選區(qū)域,并將矩形從界面上移除。
[0058]獲得圈選區(qū)域后,待縮放區(qū)域構(gòu)建模塊300根據(jù)屏幕參數(shù)和圈選區(qū)域自動(dòng)構(gòu)建出待縮放區(qū)域,其目的在于防止縮放圖片造成拉伸變形,保證圖片縮放的真實(shí)。其中,所述的屏幕參數(shù)包括屏幕長(zhǎng)度、屏幕寬度以及屏幕長(zhǎng)寬比,可由Android提供的接口獲取。構(gòu)建待縮放區(qū)域時(shí)保證待縮放區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比一致,限制最大放大比例。換而言之,保證放大后不失真即可。
[0059]如圖6所示,在一種實(shí)施方式中,待縮放區(qū)域構(gòu)建模塊300包括:
[0060]獲取模塊301,用于獲取所述圈選區(qū)域的長(zhǎng)度、寬度以及長(zhǎng)寬比;
[0061]第一判斷模塊302,用于判斷所述圈選區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比的大小;
[0062]第一計(jì)算模塊303,用于計(jì)算所述待縮放區(qū)域的預(yù)選長(zhǎng)度和預(yù)選寬度,且計(jì)算待放大倍數(shù);若所述圈選區(qū)域的長(zhǎng)寬比大于屏幕長(zhǎng)寬比,則所述待縮放區(qū)域的預(yù)選長(zhǎng)度等于所述圈選區(qū)域的長(zhǎng)度,所述待縮放區(qū)域的預(yù)選寬度等于所述圈選區(qū)域的長(zhǎng)度除以屏幕長(zhǎng)寬比;若所述圈選區(qū)域的長(zhǎng)寬比小于或等于屏幕長(zhǎng)寬比,則所述待縮放區(qū)域的預(yù)選長(zhǎng)度等于所述圈選區(qū)域的寬度乘以屏幕長(zhǎng)寬比,所述待縮放區(qū)域的預(yù)選寬度等于所述圈選區(qū)域的寬度;將屏幕寬度除以所述待縮放區(qū)域的預(yù)選寬度,或者將屏幕長(zhǎng)度除以所述待縮放區(qū)域的預(yù)選長(zhǎng)度,獲得待放大倍數(shù);
[0063]第二判斷模塊304,用于判斷所述待放大倍數(shù)與最大放大倍數(shù)的大??;
[0064]第二計(jì)算模塊305,用于計(jì)算所述待縮放區(qū)域的長(zhǎng)度和寬度;若所述待放大倍數(shù)大于所述最大放大倍數(shù),則所述待縮放區(qū)域的長(zhǎng)度等于屏幕長(zhǎng)度除以所述最大放大倍數(shù),所述待縮放區(qū)域的寬度等于屏幕寬度除以所述最大放大倍數(shù);若所述待放大倍數(shù)小于或等于所述最大放大倍數(shù),則所述待縮放區(qū)域的長(zhǎng)度等于預(yù)選長(zhǎng)度,所述待縮放區(qū)域的寬度等于預(yù)選寬度;
[0065]生成模塊306,用于以所述圈選區(qū)域的中心點(diǎn)為所述待縮放區(qū)域的中心點(diǎn),根據(jù)所述待縮放區(qū)域的長(zhǎng)度、寬度和中心點(diǎn)構(gòu)建所述待縮放區(qū)域。
[0066]通過(guò)上述的待縮放區(qū)域構(gòu)建模塊300確定最終的待縮放區(qū)域,該待縮放區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比一致,以保證不拉伸,且限制了放大比例,保證放大后圖片不失真,并且通過(guò)該待縮放區(qū)域構(gòu)建模塊300最終確定的待縮放區(qū)域不小于圈選區(qū)域,保證對(duì)用戶圈選的全部范圍進(jìn)行放大且保證中心點(diǎn)不變。
[0067]在確定待縮放區(qū)域之后,矩陣生成模塊400將待縮放區(qū)域的中心點(diǎn)與屏幕中心點(diǎn)進(jìn)行坐標(biāo)相減,得出需移動(dòng)的距離,再根據(jù)待縮放區(qū)域和屏幕參數(shù)確定縮放比例,在一種實(shí)施方式中,為了將待縮放區(qū)域的圖片放大至全屏顯示,矩陣生成模塊400將屏幕寬度除以通過(guò)所述第二計(jì)算模塊獲取的所述待縮放區(qū)域的寬度,或者將屏幕長(zhǎng)度除以待縮放區(qū)域的長(zhǎng)度,獲得縮放比例。由需平移的距離生成平移矩陣,由縮放比例生成縮放矩陣。移動(dòng)縮放模塊500在圖片控件imageView的繪圖方法(onDraw)中調(diào)用Android畫布的由位圖數(shù)據(jù)繪制圖片的方法(canvas.drawBitmap),根據(jù)平移矩陣和縮放矩陣計(jì)算出變化后圖像每個(gè)像素所處的坐標(biāo)點(diǎn)后繪圖,從而實(shí)現(xiàn)了利用矩陣變化移動(dòng)和縮放圖片。
[0068]本發(fā)明實(shí)施例中的圈選縮放系統(tǒng)其各個(gè)功能的實(shí)現(xiàn)可參照上述的方法,此處不再進(jìn)行贅述。
[0069]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種基于Android的圈選縮放方法,其特征在于,包括如下步驟: 在接收到觸發(fā)指令后,讀取幀緩沖存儲(chǔ)器中的與當(dāng)前屏幕界面對(duì)應(yīng)的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上; 監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域; 根據(jù)屏幕參數(shù)和所述圈選區(qū)域構(gòu)建待縮放區(qū)域; 根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;根據(jù)所述待縮放區(qū)域和所述屏幕參數(shù)確定縮放比例;根據(jù)所述需移動(dòng)的距離生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣; 根據(jù)所述平移矩陣和所述縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)和縮放。
2.根據(jù)權(quán)利要求1所述的基于Android的圈選縮放方法,其特征在于,所述監(jiān)聽(tīng)屏幕觸摸事件、生成圈選區(qū)域的過(guò)程包括如下步驟: 當(dāng)監(jiān)聽(tīng)到用戶手指按下時(shí),繪制矩形; 當(dāng)監(jiān)聽(tīng)到用戶手指移動(dòng)時(shí),改變所述矩形的坐標(biāo),重新繪制矩形,直至監(jiān)聽(tīng)到用戶手指離開(kāi)時(shí),根據(jù)重新繪制的矩形生成圈選區(qū)域。
3.根據(jù)權(quán)利要求2所述的基于Android的圈選縮放方法,其特征在于,所述根據(jù)屏幕參數(shù)和所述圈選區(qū)域構(gòu)建待縮放區(qū)域的過(guò)程包括如下步驟: 獲取所述圈選區(qū)域的長(zhǎng)度、寬度以及長(zhǎng)寬比; 根據(jù)所述圈選區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比的大小,判定所述待縮放區(qū)域的預(yù)選長(zhǎng)度和預(yù)選覽度; 若所述圈選區(qū)域的長(zhǎng)寬比大于屏幕長(zhǎng)寬比,則所述待縮放區(qū)域的預(yù)選長(zhǎng)度等于所述圈選區(qū)域的長(zhǎng)度,所述待縮放區(qū)域的預(yù)選寬度等于所述圈選區(qū)域的長(zhǎng)度除以屏幕長(zhǎng)寬比;若所述圈選區(qū)域的長(zhǎng)寬比小于或等于屏幕長(zhǎng)寬比,則所述待縮放區(qū)域的預(yù)選長(zhǎng)度等于所述圈選區(qū)域的寬度乘以屏幕長(zhǎng)寬比,所述待縮放區(qū)域的預(yù)選寬度等于所述圈選區(qū)域的寬度; 將屏幕寬度除以所述待縮放區(qū)域的預(yù)選寬度,或者將屏幕長(zhǎng)度除以所述待縮放區(qū)域的預(yù)選長(zhǎng)度,獲得待放大倍數(shù),根據(jù)所述待放大倍數(shù)與最大放大倍數(shù)的大小,判定待縮放區(qū)域的長(zhǎng)度和寬度; 若所述待放大倍數(shù)大于所述最大放大倍數(shù),則所述待縮放區(qū)域的長(zhǎng)度等于屏幕長(zhǎng)度除以所述最大放大倍數(shù),所述待縮放區(qū)域的寬度等于屏幕寬度除以所述最大放大倍數(shù);若所述待放大倍數(shù)小于或等于所述最大放大倍數(shù),則所述待縮放區(qū)域的長(zhǎng)度等于預(yù)選長(zhǎng)度,所述待縮放區(qū)域的寬度等于預(yù)選寬度; 以所述圈選區(qū)域的中心點(diǎn)為所述待縮放區(qū)域的中心點(diǎn),根據(jù)所述待縮放區(qū)域的長(zhǎng)度、寬度和中心點(diǎn)構(gòu)建所述待縮放區(qū)域。
4.根據(jù)權(quán)利要求3所述的基于Android的圈選縮放方法,其特征在于,根據(jù)所述待縮放區(qū)域和所述屏幕參數(shù)確定縮放比例的過(guò)程包括如下步驟: 將屏幕寬度除以所述待縮放區(qū)域的寬度,或者將屏幕長(zhǎng)度除以所述待縮放區(qū)域的長(zhǎng)度,獲得縮放比例。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的基于Android的圈選縮放方法,其特征在于,還包括如下步驟: 在Android框架層攔截到圈選縮放按鍵消息后判定接收到所述觸發(fā)指令; 和/或 監(jiān)聽(tīng)浮動(dòng)圈選縮放按鈕的按下事件,當(dāng)接收到所述按下事件時(shí),判定接收到所述觸發(fā)指令。
6.一種基于Android的圈選縮放系統(tǒng),其特征在于,包括: 截屏模塊,用于在接收到觸發(fā)指令后,讀取幀緩沖存儲(chǔ)器中的與當(dāng)前屏幕界面對(duì)應(yīng)的數(shù)據(jù),根據(jù)該數(shù)據(jù)生成截屏圖片并顯示在屏幕上; 圈選模塊,用于監(jiān)聽(tīng)屏幕觸摸事件,生成圈選區(qū)域; 待縮放區(qū)域構(gòu)建模塊,用于根據(jù)屏幕參數(shù)以及所述圈選區(qū)域構(gòu)建待縮放區(qū)域; 矩陣生成模塊,用于根據(jù)所述待縮放區(qū)域的中心點(diǎn)與屏幕的中心點(diǎn),獲得需移動(dòng)的距離;根據(jù)所述待縮放區(qū)域和屏幕參數(shù)確定縮放比例;根據(jù)所述需移動(dòng)的距離生成平移矩陣,根據(jù)所述縮放比例生成縮放矩陣; 移動(dòng)縮放模塊,用于根據(jù)所述平移矩陣和所述縮放矩陣對(duì)待縮放區(qū)域?qū)?yīng)的截屏圖片進(jìn)行移動(dòng)縮放。
7.根據(jù)權(quán)利要求6所述的基于Android的圈選縮放系統(tǒng),其特征在于,所述圈選模塊在監(jiān)聽(tīng)到用戶手指按下時(shí),繪制矩形,在監(jiān)聽(tīng)到用戶手指移動(dòng)時(shí),改變所述矩形的坐標(biāo),并重新繪制作矩形,直至監(jiān)聽(tīng)到用戶手指離開(kāi)時(shí),根據(jù)重新繪制的矩形生成圈選區(qū)域。
8.根據(jù)權(quán)利要求7所述的基于Android的圈選縮放系統(tǒng),其特征在于,所述待縮放區(qū)域構(gòu)建模塊包括: 獲取模塊,用于獲取所述圈選區(qū)域的長(zhǎng)度、寬度以及長(zhǎng)寬比; 第一判斷模塊,用于判斷所述圈選區(qū)域的長(zhǎng)寬比與屏幕長(zhǎng)寬比的大??; 第一計(jì)算模塊,用于計(jì)算所述待縮放區(qū)域的預(yù)選長(zhǎng)度和預(yù)選寬度,且計(jì)算待放大倍數(shù);若所述圈選區(qū)域的長(zhǎng)寬比大于屏幕長(zhǎng)寬比,則所述待縮放區(qū)域的預(yù)選長(zhǎng)度等于所述圈選區(qū)域的長(zhǎng)度,所述待縮放區(qū)域的預(yù)選寬度等于所述圈選區(qū)域的長(zhǎng)度除以屏幕長(zhǎng)寬比;若所述圈選區(qū)域的長(zhǎng)寬比小于或等于屏幕長(zhǎng)寬比,則所述待縮放區(qū)域的預(yù)選長(zhǎng)度等于所述圈選區(qū)域的寬度乘以屏幕長(zhǎng)寬比,所述待縮放區(qū)域的預(yù)選寬度等于所述圈選區(qū)域的寬度;將屏幕寬度除以所述待縮放區(qū)域的預(yù)選寬度,或者將屏幕長(zhǎng)度除以所述待縮放區(qū)域的預(yù)選長(zhǎng)度,獲得待放大倍數(shù); 第二判斷模塊,用于判斷所述待放大倍數(shù)與最大放大倍數(shù)的大小; 第二計(jì)算模塊,用于計(jì)算所述待縮放區(qū)域的長(zhǎng)度和寬度;若所述待放大倍數(shù)大于所述最大放大倍數(shù),則所述待縮放區(qū)域的長(zhǎng)度等于屏幕長(zhǎng)度除以所述最大放大倍數(shù),所述待縮放區(qū)域的寬度等于屏幕寬度除以所述最大放大倍數(shù);若所述待放大倍數(shù)小于或等于所述最大放大倍數(shù),則所述待縮放區(qū)域的長(zhǎng)度等于預(yù)選長(zhǎng)度,所述待縮放區(qū)域的寬度等于預(yù)選寬度; 生成模塊,用于以所述圈選區(qū)域的中心點(diǎn)為所述待縮放區(qū)域的中心點(diǎn),根據(jù)所述待縮放區(qū)域的長(zhǎng)度、寬度和中心點(diǎn)構(gòu)建所述待縮放區(qū)域。
9.根據(jù)權(quán)利要求8所述的基于Android的圈選縮放系統(tǒng),其特征在于,通過(guò)所述矩陣生成模塊,將屏幕寬度除以通過(guò)所述第二計(jì)算模塊計(jì)算出的所述待縮放區(qū)域的寬度,或者將屏幕長(zhǎng)度除以通過(guò)所述第二計(jì)算模塊計(jì)算出的所述待縮放區(qū)域的長(zhǎng)度,獲得縮放比例。
10.根據(jù)權(quán)利要求6至9中任一項(xiàng)所述的基于Android的圈選縮放系統(tǒng),其特征在于,還包括觸發(fā)模塊,所述觸發(fā)模塊包括圈選縮放按鍵觸發(fā)模塊,用于在Android框架層攔截到圈選縮放按鍵消息后判定接收到所述觸發(fā)指令,和/或包括浮動(dòng)圈選縮放按鈕觸發(fā)模塊,用于監(jiān)聽(tīng)浮動(dòng)圈選縮放按鈕的按下事件,當(dāng)接收到所述按下事件時(shí),判定接收到所述觸發(fā)指令。
【文檔編號(hào)】G06F3/0484GK104238863SQ201410438956
【公開(kāi)日】2014年12月24日 申請(qǐng)日期:2014年8月29日 優(yōu)先權(quán)日:2014年8月29日
【發(fā)明者】任志斌 申請(qǐng)人:廣州視睿電子科技有限公司