專利名稱:電視機圖像的任意位置區域放大方法
技術領域:
本發明屬于電視機技術領域,更明確地說涉及電視機圖像的任意位置區域放大方法的設計。
背景技術:
傳統的電視機不能夠進行圖像區域放大或者只能進行固定位置區域圖像的放大,這就給用戶帶來諸多不便。有些時候用戶可能需要對畫面的任意區域進行放大以便能夠觀察局部細節,還有些時候用戶需要對畫面反復進行搜索以確定需要放大的局部并加以放大。以往地電視機則不能滿足這種需求,不能對圖像的任意位置區域進行放大。
發明內容
本發明的目的,就在于克服上述缺點和不足,提供一種電視機圖像的任意位置區域放大方法。它有一個可以上下左右移動的區域選擇框供用戶操作,當用戶將該區域選擇框移動到想要放大的位置并確認后,就可以將此區域的圖像放大到滿屏。
為了達到上述目的,本發明包括以下步驟
(1)在交互界面軟件狀態中,設置局部放大狀態;
(2)通過OSD控制軟件在電視機畫面中畫出區域選擇框;
(3)通過軟件使用戶依據輸入的操作碼的不同,隨意操作移動選擇框的位置;
(4)通過軟件使用戶確認該位置后,可將此區域作為圖像輸出的輸入并完成圖像的放大輸出或者恢復到正常畫面。
上述步驟(4)在放大時,根據插值算法,將選定的區域圖像擴展到全屏;退出時則不再插值,而是將完整的圖像數據寫入顯示寄存器。
本發明在交互界面軟件狀態機中,設置局部放大狀態。進入此狀態后,依據默認位置,畫出區域選擇框,并開始等待用戶操作。依據輸入的操作碼的不同,區域選擇框會移動到指定的位置,或者連續移動到任意位置,或者將選定的區域放大到全屏,或者退出放大恢復到正常畫面。放大時,根據插值算法,將選定的區域圖像擴展到全屏。退出時,不再插值,而是將完整的圖像數據寫入顯示寄存器。
本發明的任務就是這樣完成的。
本發明有一個可以上下左右移動的區域選擇框供用戶操作,當用戶將該區域選擇框移動到想要放大的位置并確認后,就可以將此區域的圖像放大到滿屏。它可以滿足用戶對畫面的任意區域進行放大、以便能夠觀察局部細節的需要,可廣泛應用于各種電視機中。
圖1為本發明的流程方框示意圖。
具體實施例方式
實施例1。一種電視機圖像的任意位置區域放大方法。它包括以下步驟
(1)在交互界面軟件狀態中,設置局部放大狀態;
(2)通過OSD控制軟件在電視機畫面中畫出區域選擇框;
(3)通過軟件使用戶依據輸入的操作碼的不同,隨意操作移動選擇框的位置;
(4)通過軟件使用戶確認該位置后,可將此區域作為圖像輸出的輸入并完成圖像的放大輸出或者恢復到正常畫面。
上述步驟(4)在放大時,根據插值算法,將選定的區域圖像擴展到全屏;退出時則不再插值,而是將完整的圖像數據寫入顯示寄存器。
完成這些操作的源代碼如下
//進入局部放大功能后,畫出區域選擇框的函數
void appUIPartZoomInEnter(void){//打開繪畫列表//PCDRAWABLE pasDrawList=g_asLayers[ldPARTZOOMIN].pasDrawList;//Open OSD sized to top menu layer define by OSDLayout//分配空間m_cPaneID=appUIUtilOSDInit(ldPARTZOOMIN,//Layer to set size of OSD1,//single width<!-- SIPO <DP n="2"> --><dp n="d2"/>1,//single heightosdposCUSTOM,//center pane&m_sSelBoxPos);//position(ignored)//Draw selected rect box bitmap//畫出選擇框halOSDCtrlBitmapDraw(m_cPaneID,utilRectPosition(&g_asLayers[1dPARTZOOMIN].pasDrawList
.sRect),&g_asBitmaps[g_asLayers[ldPARTZOOMIN].pasDrawList
.wIndex],0);//顯示選擇框//Turn on OSDhalOSDCtrlPaneEnable(m_cPaneID,TRUE);//設置選擇框的透明度//Set the transparent of the selected boxi_aPPUIMiscOverlaySet(0,80);}//局部放大功能事件響應函數void appUIPartZoomInEvent(KEY_EVENT sKeyEvent){BYTE cPosIndex;if(((sKeyEvent.eKey>=keCH_UP&&sKeyEvent.eKey<=keVOL_DOWN)‖(sKeyEvent.eKey>=ke0&&sKeyEvent.eKey<=ke9))&&!m_bZoomState){//根據不同的鍵設置不同的位置或者改變位置switch(sKeyEvent.eKey){<!-- SIPO <DP n="3"> --><dp n="d3"/>case ke0cPosIndex=113;break;case ke1cPosIndex=1;break;case ke2cPosIndex=8;break;case ke3cPosIndex=15;break;case ke4cPosIndex=106;break;case ke5cPosIndex=113;break;case ke6cPosIndex=120;break;case ke7cPosIndex=211;break;case ke8cPosIndex=218;break;case ke9cPosIndex=225;break;<!-- SIPO <DP n="4"> --><dp n="d4"/>case keVOL_UP//cPosIndex=(m_cPosIndex==9)?1m_cPosIndex+1;cPosIndex=(m_cPosIndex==225)?1m_cPosIndex+1;break;case keVOL_DOWN//cPosIndex=(m_cPosIndex==0)?9m_cPosIndex-1;cPosIndex=(m_cPosIndex==1)?225m_cPosIndex-1;break;case keCH_DOWN{if(m_cPosIndex>210){if(225==m_cPosIndex){cPosIndex=1;}else{cPosIndex=15-(225-m_cPosIndex)+1;}}else{cPosIndex=m_cPosIndex+15;}}break;case keCH_UP<!-- SIPO <DP n="5"> --><dp n="d5"/>{if(m_cPosIndex<16){if(1==m_cPosIndex){cPosIndex=225;}else{cPosIndex=210+(m_cPosIndex-1);}}else{cPosIndex=m_cPosIndex-15;}}break;defaultbreak;}if(m_cPosIndex!=cPosIndex){m_cPosIndex=cPosIndex;m_sSelBoxPos.wX=((m_cPosIndex-1)%15)*(m_sScreenSize.wHResm_sOSDSize.wX)/14;m_sSelBoxPos.wY=((m_cPosIndex-1)/15)*(m_sScreenSize.wVResm_sOSDSize.wY)/14;<!-- SIPO <DP n="6"> --><dp n="d6"/>halOSDCtrlPositionSet(m_cPaneID,m_sSelBoxPos);}}//局部放大或者還原//Zoom in or close zoom inif(keSELECT==sKeyEvent.eKey‖keKPD_SELECT==sKeyEvent.eKey){if(!m_bZoomState)//局部放大//Zoom in{eSCALE MODE eScaleMode;//set delta for paramsif(loSINGLE_MAIN==appWindowMgrLayoutGet()){eScaleMode=appWindowMgrScaleModeGet(0);m_cZoomPart=m_cPosIndex;appWindowMgrScaleModeSetStart(0,eScaleMode);}//隱藏選擇框//Erase selected rect boxhalOSDCtrlRectangleDraw(m_cPaneID,&g_asLayers[ldPARTZOOMIN].pasDrawList
.sRect,0);}else //還原//Close zoom in{eSCALE_MODE eScaleMode;//set delta for paramsif(loSINGLE_MAIN==appWindowMgrLayoutGet())<!-- SIPO <DP n="7"> --><dp n="d7"/>{eScaleMode=app WindowMgrScaleModeGet(0);m_cZoomPart=0;appWindowMgrScaleModeSetStart(0,eScaleMode);}//重畫選擇框//Redraw selected rect boxhalOSDCtrlB itmapDraw(m_cPaneID,utilRectPosition(&g_asLayers[1dPARTZOOMIN].pasDrawList
.sRect),&g_asBitmaps[g_asLayers[ldPARTZOOMIN].pasDrawList
.wIndex],0);}m_bZoomState=!m_bZoomState;}}//退出局部放大功能void appUIPartZoomInExit(void){PUI_NVRAM_TYPE psNVRAMData;BYTE m_OSDTranslucency;//釋放為畫選擇框分配的空間//turn off OSDhalOSDCtrlPaneEnable(m_cPaneID,FALSE);halOSDCtrlPaneDeallocate(m_cPaneID);//退出局部放大狀態<!-- SIPO <DP n="8"> --><dp n="d8"/>//close zoom inif(m_bZoomState){//2005-03-10ZOOMeSCALE MODE eScaleMode;//set delta for paramsif(loSINGLE_MAIN==appWindowMgrLayoutGet()){eScaleMode=appWindowMgrScaleModeGet(0);m_cZoomPart=0;appWindowMgrScaleModeSetStart(0,eScaleMode);}//2005-03-09ZOOM ENDm_bZoomState=FALSE;}//恢復OSD的透明度//Restore the transparent of the selected box//從NV RAM中取出存儲的透明度值psNVRAMData=utilDataMgrReadLockData(nnUI_NVRAM_DATA);//apply values from NVRAM settingm_OSDTranslucency=psNVRAMData->cOSDTranslucency;utilDataMgrUnlock(nnUI_NVRAM_DATA,FALSE);i_appUIMiscOverlaySet(0,m_OSDTranslucency);}
實施例1有一個可以上下左右移動的區域選擇框供用戶操作,當用戶將該區域選擇框移動到想要放大的位置并確認后,就可以將此區域的圖像放大到滿屏。它可以滿足用戶對畫面的任意區域進行放大、以便能夠觀察局部細節的需要,可廣泛應用于各種電視機中。
權利要求
1.一種電視機圖像的任意位置區域放大方法,其特征在于它包括以下步驟
(1)在交互界面軟件狀態中,設置局部放大狀態;
(2)通過OSD控制軟件在電視機畫面中畫出區域選擇框;
(3)通過軟件使用戶依據輸入的操作碼的不同,隨意操作移動選擇框的位置;
(4)通過軟件使用戶確認該位置后,可將此區域作為圖像輸出的輸入并完成圖像的放大輸出或者恢復到正常畫面。
2.按照權利要求1所述的電視機圖像的任意位置區域放大方法,其特征在于上述步驟(4)在放大時,根據插值算法,將選定的區域圖像擴展到全屏;退出時則不再插值,而是將完整的圖像數據寫入顯示寄存器。
全文摘要
一種電視機圖像的任意位置區域放大方法。它包括以下步驟(1)在交互界面軟件狀態中,設置局部放大狀態;(2)通過OSD控制軟件在電視機畫面中畫出區域選擇框;(3)通過軟件使用戶依據輸入的操作碼的不同,隨意操作移動選擇框的位置;(4)通過軟件使用戶確認該位置后,可將此區域作為圖像輸出的輸入并完成圖像的放大輸出或者恢復到正常畫面。步驟(4)在放大時,根據插值算法,將選定的區域圖像擴展到全屏;退出時則不再插值,而是將完整的圖像數據寫入顯示寄存器。它可以滿足用戶對畫面的任意區域進行放大、以便能夠觀察局部細節的需要,可廣泛應用于各種電視機中。
文檔編號H04N5/445GK1710944SQ20051004390
公開日2005年12月21日 申請日期2005年6月25日 優先權日2005年6月25日
發明者陳陽, 李賓 申請人:海信集團有限公司, 青島海信電器股份有限公司