圖像的縮放方法
2023-05-31 14:25:41 2
專利名稱:圖像的縮放方法
技術領域:
本發明涉及一種圖像處理方法,特別涉及指圖像的縮放的方法。
背景技術:
像素圖像彌補了向量式圖像的缺陷,它能夠製作出色彩和色調變化豐富的圖像,可以逼真地表現自然界的景象,同時也可以很容易地在不同軟體之間交換文件,但是像素圖像無法製作真正的3D圖像,而且圖像縮放和旋轉時會產生失真的現象,同時文件較大,對內存和硬碟空間容量的需求也較高。位圖方式就是將圖像的每一像素點轉換為一個數據。隨著解析度以及顏色數的提高,圖像所佔用的磁碟空間也就相當大,由於在放大圖像的過程中,其圖像勢必要變得模糊而失真,放大後的圖像像素點實際上變成了像素「方格」。
JPEG、GIF和PNG文件都通過壓縮的方式減少文件大小,然而壓縮帶來的幫助是有限度的,位圖依然比向量圖形大很多。事實上當將像素網格的直徑擴大兩倍,獲得的像素數量就是原來的四倍。
公知將像素圖像放大的方法是根據生成目標圖像的大小,預先從系統中分配到一大塊連續內存,用於存儲還原生成的位圖信息,對圖像的每個像素按比例縮放,經平滑Halftone處理之後,直接生成位圖信息,並存儲到內存中。這樣的處理方法通常處理速度較慢,而且會佔用大量的系統內存,有時需要做壓縮處理來節省內存,在系統存在內存碎片或沒有足夠大的內存時,常常會因為不能申請到所需的大塊內存而無法進行處理。
發明內容
本發明為解決上述問題而提出一種圖像的縮放方法,主要的目的在於提高圖像處理速度的同時,降低系統內存的消耗。
所以為達到上述目的,本發明提供一種圖像的縮放方法,首先確定源圖像到目標圖像的縮放倍數,並根據該縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標,然後逐行掃描該源圖像,同時將具有相同像素值的相鄰像素合併成像素塊,根據該像素塊在該目標圖像中的坐標,確定該像素塊的中間格式信息,最後根據該中間格式信息,將相應的像素掛網成網點圖(Halftone),生成相應的位像。
本發明提出了一種圖像的縮放方法,該方法使用像素合併技術,來提高圖像處理速度,並使用存儲技術,來降低系統內存消耗,取消對系統大塊連續內存的應用需求,在系統存在內存碎片時,仍可以進行大塊圖像處理,對於不同的色彩空間本發明可作相同的處理,並可最終生成各色彩平面的位圖信息。
有關本發明的詳細內容及技術,配合
如下。
圖1為本發明所提出的圖像的縮放方法的總體流程圖;圖2為本發明確定處理方式的流程圖;圖3為本發明的中間格式信息的示意圖;圖4為本發明Symbolic command的流程圖;及圖5為本發明Bitmap Rendering的流程圖。
其中,圖中步驟110確定源圖像到目標圖像的縮放倍數,並根據該縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標步驟120逐行掃描該源圖像,同時將具有相同像素值的相鄰像素合併成像素塊步驟130根據該像素塊在該目標圖像中的坐標,確定該像素塊的中間格式信息步驟140根據該中間格式信息,將相應的像素掛網成網點圖生成相應的位像步驟210獲得源圖像的寬度與高度步驟220獲得目標圖像的寬度與高度步驟230分別計算圖像的寬度與高度的縮放比例步驟240根據該寬度與高度的縮放比例計算整體縮放倍數步驟250大於縮放倍數閾值?
步驟260選擇Symbolic command圖像處理方式步驟270選擇Bitmap Rendering圖像處理方式310命令標識320像素值330像素塊左上角X坐標值340像素塊左上角Y坐標值350像素右下角X坐標值360像素右下角Y坐標值步驟410根據縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標步驟420逐行掃描圖像點步驟430將具有相同像素值的相鄰像素合併成像素塊步驟440根據像素塊確定中間格式信息步驟450獲取圖像的各行像素塊的中間格式信息步驟460逐行根據中間格式信息對圖像作Halftone Rendering處理步驟470將生成的位圖,直接存儲到系統視頻緩衝區中步驟510根據目標圖像大小分配出系統內存步驟520根據縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標步驟530逐行掃描圖像點步驟540將具有相同像素值的相鄰像素合併成像素塊步驟550確定像素塊的中間格式信息步驟560對像素塊作Halftone rendering處理步驟570將生成的目標位圖存儲在分配到的相應內存塊中具體實施方式
本發明為一種圖像的縮放方法,首先由圖1中說明本發明的方法,說明如下首先確定源圖像到目標圖像的縮放倍數,並根據該縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標(步驟110),然後逐行掃描該源圖像,同時將具有相同像素值的相鄰像素合併成像素塊(步驟120),根據該像素塊在該目標圖像中的坐標,確定該像素塊的中間格式信息(步驟130),根據該中間格式信息,將相應的像素掛網成網點圖(Halftone),生成相應的位像(步驟140)。
對於一幅待處理的圖像其像素色彩空間可能是RGB,CMYK,Gray等,因而會有不同的色彩平面,本發明提供的方法,對不同的色彩平面可作相同的處理,並可最終生成各色彩平面的Bitmap信息。
請參見圖2,首先根據獲得源圖像的寬度與高度(步驟210),再獲得目標圖像的寬度與高度(步驟220),然後根據放大倍數確定圖像在X及Y方向上的縮放比例(步驟230),從而得出目標區域中相應像素的坐標位置。具體方法為設第一行第一個像素的左上角X,Y坐標值為(X0,Y0),根據圖像在X及Y方向上的縮放比例,經計算後,在目標系統設備坐標系行進步長分別為ΔX,ΔY。設源圖像寬為SrcWidth,高為SrcHeight,目標圖像寬為DesWidth,高為DesHeight,圖像在X及Y方向上的縮放比例為xScale,yScale,整體縮放比例為ScaleRate,因此有ΔX=xScale=DesWidth/SrcWidthΔY=yScale=DesHeight/SrcHeight可得出整體縮放比例ScaleRate=xScale*yScale(步驟240)然後將整體放大倍數與放大倍數閾值相比較(步驟250),如果大於該閾值,則選擇Symbolic command圖像處理方式(步驟260),否則選擇BitmapRendering圖像處理方式(步驟270)。
下面以8x8灰度單平面像素圖像為例對本發明進行詳細說明,首先設定放大倍數閾值,本實施例的放大倍數閾值為96。(用戶可根據系統內存配置大小,設定放大倍數閾值)。
8x8灰度像素圖像的灰度值如下圖所示
首先計算圖像的整體放大倍數,原8x8灰度像素圖像將在X及Y方向上的放大比例分別為12,10,因此整體放大倍數為12*10=120,然後將整體放大倍數120與放大倍數閾值96相比較,由於大於該閾值,因此選擇Symboliccommand圖像處理方式,Symbolic command處理方式的像素塊中間格式信息,如圖3所示,該命令格式佔用3個「long」,共計96Bits;第一個long存放「命令標識310及像素灰度值320」信息,第二個long存放「該像素左上角X坐標值330及Y坐標值340」信息,第三個long存放「該像素右下角X坐標值350及Y坐標值360」信息。若用公知的處理方法,將8x8灰度像素圖像放大120倍數,需用內存(8*12)*(8*10)/8=960Bytes.若用本發明的Symbolic command圖像處理方式,將8x8灰度像素圖像放大120倍數,當每一行內像素灰度值均不同時,存儲一個像素需用3*32=96Bits,圖像總共8*8=64Pixels,因此需用內存(64*96)/8=768Bytes。當一行內相鄰像素灰度值有相同情形時,則可用3個「long」記住多個像素信息,此時,所需用內存比768Bytes更少。將8x8灰度像素圖像放大120倍,使用Symboliccommand圖像處理方式,至少可節省192Bytes,對於更大的圖像,可節省更多的系統內存。
確定了圖像的處理方式後,就可以對圖像進行相應的處理,請參見圖4,該圖為本發明Symbolic command的流程圖。首先根據該縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標(步驟410),然後對圖像點進行逐行掃描(步驟420),將具有相同像素值的相鄰像素合併成像素塊(步驟430),當一行內相鄰像素值有相同情形時,則相同像素合併成個一個像素,並進行處理區域擴充,從圖像第一行第一個像素開始逐行掃描。根據像素塊確定中間格式信息(步驟440),中間格式信息包括像素塊的命令標識,在此例中,設定為0x80000000、該像素塊左上角坐標位置以及該像素塊右下角坐標位置。
掃描得第一個像素值為0x23,第一個像素的左上角X,Y坐標值為(X0,Y0),右下角X,Y坐標值為(X0+ΔX,Y0+ΔY),掃描得第二個像素值為0x15,與前者不同,故可得第一個Symbolic command為
第二個像素的左上角X,Y坐標值為(X0+ΔX,Y0),右下角X,Y坐標值為(X0+ΔX+ΔX,Y0+ΔY)=(X0+2ΔX,Y0+ΔY),掃描得第三個像素值為0x15,與前者相同,此時,第三個像素的左上角X,Y坐標值為(X0+ΔX+ΔX,Y0)=(X0+2ΔX,Y0),右下角X,Y坐標值為(X0+ΔX+ΔX+ΔX,Y0+ΔY)=(X0+3ΔX,Y0+ΔY),第二、三個像素合併成一個大像素,掃描得第四個像素值為0x60,與前者不同,故可得第二個Symbolic command為
第四個像素的左上角X,Y坐標值為(X0+3ΔX,Y0),右下角X,Y坐標值為(X0+4ΔX,Y0+ΔY),掃描得第五個像素值為0x17,與前者不同,故可得第三個Symbolic command為
第五個像素的左上角X,Y坐標值為(X0+4ΔX,Y0),右下角X,Y坐標值為(X0+5ΔX,Y0+ΔY),掃描得第六個像素值為0x23,與前者不同,故可得第四個Symbolic command為
第六個像素的左上角X,Y坐標值為(X0+5ΔX,Y0),右下角X,Y坐標值為(X0+6ΔX,Y0+ΔY),掃描得第七個像素值為0x23,與前者不同,此時,第七個像素設的左上角X,Y坐標值為(X0+6ΔX,Y0),右下角X,Y坐標值為(X0+7ΔX,Y0+ΔY),掃描得第八個像素值為0x72,與前者不同,故可得第五個Symbolic command為
第八個像素的左上角X,Y坐標值為(X0+7ΔX,Y0),右下角X,Y坐標值為(X0+8ΔX,Y0+ΔY),由於是該行最後一個像素,故可得第六個Symboliccommand為
掃描圖像第二行像素,可得六個Symbolic command分別如下
掃描圖像第3,4,5,6,7,8行像素,總共可生成52個Symbolic command,佔用內存(52*96)/8=624Bytes,比公知直接生成位圖法節省336Bytes(960-624)。
在系統需要生成黑白位像(Bitmap)時,獲取圖像的各行像素Symbolic command信息(步驟450),對於不同像素,逐行根據中間格式信息對圖像,根據該像素的左上角、右下角XY坐標值,及像素值作HalftoneRendering處理(步驟460),並將生成的位圖,直接存儲到系統視頻緩衝區中(步驟470),以加快圖像處理速度,並有效地使用系統內存。
請參見圖5,當原8x8灰度像素圖像將在X及Y方向上的放大比例分別為8,8時,圖像的整體放大倍數為8*8=64。將圖像整體放大倍數64與放大倍數閾值96相比較,由於小於該閾值,此時選擇Bitmap rendering圖像處理方式,因為用此處理方式一個像素佔用內存64Bits,而用Symboliccommand圖像處理方式則需佔用96Bits。根據圖像縮放後目標圖像大小分配一大塊系統內存用以存儲生成的Bitmap(步驟510),如果因為系統存在內存碎片,而無法分配到一整大塊內存時,此時,採用分塊存儲方案,即將目標區域大小分割成2小塊區域,再分別申請內存,若存在申請不到的情形,則再將未成功小塊區域2分成更小的區域進行內存申請,用此方法,可將所需的存儲Bitmap內存分塊申請到。例如,假定目標區域大小為800Kbytes,第一次,按800Kbytes大小向系統申請內存,若分配不成功,將800Kbytes分成2個400Kbytes再次分別申請,第二次,按400Kbytes大小向系統申請2塊內存,若分配400Kbytes成功一塊,另一塊分配400Kbytes不成功,將不成功的一塊400Kbytes分成2個200Kbytes再次分別申請,第三次,按200Kbytes大小向系統申請2塊內存,若分配2塊200Kbytes均分配成功,則完成Bitmaprendering內存分配任務,否則重複上述過程,直至申請到所需的內存。
然後根據圖像的放大倍數確定ΔX以及ΔY,根據ΔX以及ΔY確定源圖像中的像素在該目標圖像中的相應坐標(步驟520),逐行掃描所有圖像點(步驟530),當一行內相鄰像素值有相同情形時,則相同像素合併成個一像素塊(步驟540),掃描過程如同Symbolic command方式,確定像素塊的中間格式信息(步驟550),根據該中間格式信息作Halftone rendering處理(步驟560)生成目標Bitmap,並存儲在分配到的相應內存塊中(步驟570)。
將像素塊、只是掃描結果處理方式不同,一個是生成圖像像素Symboliccommand,一個是進一步作Halftone rendering處理生成目標Bitmap,並存儲在分配到的相應內存塊中。
對於圖像第一行的像素,Bitmap rendering處理方式如下對區域(X0,Y0)、(X0+ΔX,Y0+ΔY),作像素值為0x23的Halftonerendering處理並生成Bitmap存儲到該行對應的內存塊中;合併第2,3個像素,對區域(X0+ΔX,Y0)、(X0+3ΔX,Y0+ΔY),作像素值為0x15的Halftone rendering處理並生成Bitmap存儲到該行對應的內存塊中;對區域(X0+3ΔX,Y0)、(X0+4ΔX,Y0+ΔY),作像素值為0x60的Halftonerendering處理並生成Bitmap存儲到該行對應的內存塊中;對區域(X0+4ΔX,Y0)、(X0+5ΔX,Y0+ΔY),作像素值為0x17的Halftonerendering處理並生成Bitmap存儲到該行對應的內存塊中;合併第6,7個像素,對區域(X0+5ΔX,Y0)、(X0+7ΔX,Y0+ΔY),作像素值為0x23的Halftone rendering處理並生成Bitmap存儲到該行對應內存塊中;對區域(X0+7ΔX,Y0)、(X0+8ΔX,Y0+ΔY),作像素值為0x72的Halftonerendering處理並生成Bitmap存儲到該行對應的內存塊中;對於圖像第二行的像素,Bitmap rendering處理方式如下對區域(X0,Y0+ΔY)、(X0+ΔX,Y0+2ΔY),作像素值為0x11的Halftonerendering處理並生成Bitmap存儲到該行對應的內存塊中;合併第2,3,4個像素,對區域(X0+ΔX,Y0+ΔY)、(X0+4ΔX,Y0+2ΔY),作像素值為0x27的Halftone rendering處理並生成Bitmap存儲到該行對應的內存塊中;對區域(X0+4ΔX,Y0+ΔY)、(X0+5ΔX,Y0+2ΔY),作像素值為0x43的Halftone rendering處理並生成Bitmap存儲到該行對應的內存塊中;對區域(X0+5ΔX,Y0+ΔY)、(X0+6ΔX,Y0+2ΔY),作像素值為0x56的Halftone rendering處理並生成Bitmap存儲到該行對應的內存塊中;對區域(X0+6ΔX,Y0+ΔY)、(X0+7ΔX,Y0+2ΔY),作像素值為0x21的Halftone rendering處理並生成Bitmap存儲到該行對應的內存塊中;對區域(X0+7ΔX,Y0+ΔY)、(X0+8ΔX,Y0+2ΔY),作像素值為0x18的Halftone rendering處理並生成Bitmap存儲到該行對應的內存塊中;
用相同的方法掃描圖像第3,4,5,6,7,8行像素,作像素Halftonerendering處理並生成Bitmap存儲到該行對應的內存塊中。
雖然本發明以前述的較佳實施例公開如上,然其並非用以限定本發明,故任何本領域技術人員,在不脫離本發明的精神和範圍內,可作一些的變動與改進,因此本發明的保護範圍以權利要求為準。
權利要求
1.一種圖像的縮放方法,其特徵在於,包括如下步驟確定源圖像到目標圖像的縮放倍數,並根據該縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標;逐行掃描該源圖像,同時將具有相同像素值的相鄰像素合併成像素塊;根據該像素塊在該目標圖像中的坐標,確定該像素塊的中間格式信息;及根據該中間格式信息,將相應的像素掛網成網點圖(Halftone),生成相應的位像。
2.如權利要求1所述的圖像的縮放方法,其特徵在於,所述像素塊的中間格式信息包括像素塊的命令標識、該像素塊左上角坐標位置以及該像素塊右下角坐標位置。
3.如權利要求1所述的圖像的縮放方法,其特徵在於,還包括比較該縮放倍數與該縮放倍數閾值的步驟。
4.如權利要求3所述的圖像的縮放方法,其特徵在於,所述縮放倍數閾值為根據系統內存配置設定的。
5.如權利要求3所述的圖像的縮放方法,其特徵在於,若該縮放倍數大於縮放倍數閾值,則同時將所有像素塊掛網成網點圖,生成位像。
6.如權利要求5所述的圖像的縮放方法,其特徵在於,還包括將該位像存儲至系統視頻緩衝區的步驟。
7.如權利要求3所述的圖像的縮放方法,其特徵在於,若該縮放倍數小於縮放倍數閾值,則將該像素塊逐個掛網成網點圖,生成位像。
8.如權利要求7所述的圖像的縮放方法,其特徵在於,還包括將生成的位像分別存儲到系統內存的步驟。
9.如權利要求8所述的圖像的縮放方法,其特徵在於,所述系統內存為根據該目標圖像的大小分配的。
全文摘要
本發明涉及一種圖像的縮放方法,首先確定源圖像到目標圖像的縮放倍數,並根據該縮放倍數確定源圖像中的像素在該目標圖像中的相應坐標,逐行掃描該源圖像,同時將具有相同像素值的相鄰像素合併成像素塊,然後根據該像素塊在該目標圖像中的坐標,確定該像素塊的中間格式信息,再根據該中間格式信息,將相應的像素掛網成網點圖(Halftone),生成相應的位像。
文檔編號G06T3/40GK1670766SQ20041000876
公開日2005年9月21日 申請日期2004年3月17日 優先權日2004年3月17日
發明者何軍 申請人:德鑫科技股份有限公司