iOS上使用Quartz 2D繪製Bitmap

2021-09-25 14:37:42 字數 1312 閱讀 6007

quartz 2d是乙個二維繪圖引擎,可以在ios和mac os x中使用(不包括核心)。

quartz中所有物件都被繪製到圖形上下文中,包括位圖圖形上下文(cgbitmapcontext),pdf圖形上下文(cgpdfcontext),視窗圖形上下文(僅mac os x可用),分層上下文(cglayer),列印上下文(僅mac os x可用)。

圖形上下文表示繪圖目標,它包含繪圖引數和繪圖系統執行任何後續繪圖命令所需的所有特定於裝置的資訊。圖形上下文定義了基本的繪圖屬性,例如繪製時使用的顏色,剪下區域,線寬和樣式資訊,字型資訊,合成選項等。

要在ios應用中繪製影象到螢幕,需要實現uiview物件並的drawrect方法,drawrect不能直接呼叫,必須使用setneedsdisplay或setneedsdisplayinrect通知系統重繪,系統會在下個繪圖週期呼叫drawrect進行重繪,為了提高效能,要盡量避免重繪未改變的區域。在drawrect中通過呼叫uigraphicsgetcurrentcontext獲取其圖形上下文。

quartz中的顏色由一組值表示,不同的裝置以不同的顏色空間解釋這些值,顏色空間包括hsb,rgb,cmyk,bgr,如果提供錯誤的顏色空間,則值表示的顏色也會發生錯誤。

顏色空間分為通用顏色空間和裝置顏色空間,通用顏色空間可以在裝置之間移植的方式表示顏色,有精確顏色要求的程式應該使用通用顏色空間,它可以使顯示器上的顏色和列印出來的顏色一樣好,ios只支援裝置顏色空間。

uikit使用的座標系與quartz 2d座標系不一樣,所以在繪圖時需要修改座標系,如果你使用uiimage的drawinrect繪圖則無需考慮這一點,uiimage會自動處理座標系。

實踐發現在ios12.0以下的系統使用如下**修改座標系,然後繪製乙個uiview的部分rect會出錯,而drawinrect則不會。

cgcontexttranslatectm

(ctx,

0, rect.size.height)

;cgcontextscalectm

(ctx,

1.0,

-1.0

);

使用quartz時,如果從包含copy或create的函式獲取物件,在使用完畢後需要釋放該物件。

下面的**向我們展示了如何將bitmap資料繪製到uiview:

-

(void

)drawrect:

(cgrect)rect

}

-

(void

)drawrect:

(cgrect)rect

}

iOS 使用Quartz 2D畫線

畫虛線需要用到函式 cgcontextsetlinedash 此函式需要四個引數 cgcontextref context uigraphicsgetcurrentcontext cgcontextbeginpath context cgcontextsetlinewidth context,2.0...

iOS 使用Quartz 2D畫虛線

畫虛線需要用到函式 cgcontextsetlinedash 此函式需要四個引數 cpp view plain copy print cgcontextref context uigraphicsgetcurrentcontext cgcontextbeginpath context cgconte...

Quartz 2D 簡單使用

想要在uiview內部繪製一下東西,需要自定義uiview,並且實現uiview的 void drawrect cgrect rect方法,為什麼需要實現drawrect 方法才能繪圖到 view 上,是因為在 drawrect 方法中才能取得跟 view 相關聯的圖形上下文,那麼什drawrect...