Quartz2Dプログラミングガイド1 ------- Quartz2Dの概要



Quartz 2d Programming Guide 1 Quartz 2d Overview




IOSでは、Quartz 2Dは、利用可能なグラフィックスおよびアニメーション技術において、Core Animation、OpenGL ES、およびUIKitクラスのように機能します。


1.ページ
Quartz 2Dは、ペインターモデルを使用して画像を作成します。ペインターモデルでは、連続する各描画操作で、通常はページと呼ばれる出力キャンバスにペイントレイヤーが適用されます。ページの上のオブジェクトの描画は、ペイントを追加しない限り変更できません。それはペンキの層を加えることによって造られます。このモデルを使用すると、簡単なペイントで複雑な画像を作成できます。


次の図は、ペインターモデルがどのように機能するかを示しており、順序が最終的な効果に影響します。





2.描画する場所-グラフィックスコンテキスト
グラフィックコンテキストは、出力デバイス(PDFファイル、ビットマップ、表示ウィンドウなど)で画像を描画するためのQuartz情報をカプセル化する不透明なCGContextRefデータ型です。グラフィックスコンテキストの情報には、グラフィックス描画パラメータと描画デバイスに関連するページが含まれます。 Quartzのクラスはすべて、グラフィックスコンテキストでの描画に限定されています。
グラフィックスコンテキストを描画のターゲットとして使用できます。 Quartzで描画する場合、デバイス関連のすべての機能は特定のグラフィックスコンテキストに制限されます。言い換えれば、異なるデバイスで同じ画像を描画するために異なるグラフィックスコンテキストを提供します。他に何もする必要はありません。Quartzがそれを行ってくれます。
グラフィックスコンテキストにはいくつかの種類があります
(1)ビットマップグラフィックスコンテキスト
これにより、ビットマップにRGBカラー、CMYKカラー、またはグレースケールをペイントできます。ビットマップはピクセルの長方形の配列であり、各ピクセルは画像上の点を表します。
(2)PDFグラフィックコンテキスト
(3)ウィンドウグラフィックスコンテキスト
(4)レイヤーコンテキスト




3.Quartz2D不透明(OPAQUE)型
グラフィックコンテキストの定義に加えて、Quartz 2DAPIはさまざまな不透明(OPAQUE)型を定義します。このAPIはCoreGraphicsフレームワークの一部であるため、APIのデータ型と関数の前にCGの先頭が付けられます。
Quartz 2Dは、不透明(OPAQUE)型からオブジェクトを作成します。このデータ型を使用して、アプリケーションは特別な描画と出力を行います。以下では、描画に使用できる3つのオブジェクトについて説明します。
このPDFページを回転して表示するPDFページオブジェクトを作成できます。グラフィックスコンテキストで回転操作を適用してから、Quartz2Dにグラフィックスコンテキストでページを描画するように依頼します。
パターンオブジェクトを作成してパターンを描くことができます。パターンを形成して形状を定義します。グラフィックスコンテキストを描画するときに、パターンペイントを使用できます。
シェーディングオブジェクトを作成して、軸方向または半径方向に領域の影を塗りつぶすことができます。関数を使用して影の各ポイントの色を決定し、それを使用して影を塗りつぶします。


Quartz 2Dで利用可能な不透明(OPAQUE)データ型:
CGPathRef、CGImageRef、CGLayerRef、CGPatternRef、CGShadingRef、CGGradientRef、CGFunctionRef、CGColorRef、CGColorSpaceRef、CGImageSourceRef、CGImageDestinationRef、CGFontRefはPDFにリストされていません。




4.グラフィックステータス
Quartzは、現在のグラフィックス状態のパラメーターを変更することにより、描画操作の結果を変更できます。現在のグラフィックス状態によって、最終的な描画の結果が決まります。たとえば、塗りつぶしの色を設定する関数を呼び出すと、実際には現在のグラフィックス状態に格納されている値が変更されます。線幅、現在の位置、テキストのフォントサイズなど、他の一般的な状態があります。
グラフィックスコンテキストには、グラフィックス状態のスタックが含まれます。 Quartzがグラフィックスコンテキストを作成するとき、スタックは空です。グラフィックスの状態を保存するとき、Quartzは現在のグラフィックスの状態のコピーをスタックにプッシュします。グラフィック状態を復元するときは、スタックからpopを使用するだけです。 CGContextSaveGState関数とCGContextRestoreGState関数は、プッシュとポップに使用されます。
現在の描画環境のすべての要素がグラフィックス状態であるとは限りません。たとえば、現在のパスはグラフィックス状態ではありません。グラフィックス状態パラメーターの一部を以下に示します。



5.Quartz2D座標系
Quratzの座標系は次のとおりです。




Quratzは、現在の変換行列(CTM)を使用して、特定の座標系の独立性を完成させます(ユーザー空間とデバイス空間の完全なマッピング)。 CTMは、いくつかの関連する方程式を効果的に記述することができる数学的構造の行列です。現在の変換行列は、アフィン変換となる特別な行列タイプであり、平行移動、回転、およびスケーリング操作(座標系の移動、回転、サイズ変更を計算)を適用して、座標系の点を別の座標系にマッピングします。
CTMには2番目の目的があります。これにより、描画されるオブジェクトを変換できます。たとえば、45度回転するボックスを描画する場合は、最初にボックスを描画してから座標系を回転させることができ、Quratzは回転座標系を使用して出力デバイスに描画します。
Quratzのデフォルトの座標系が上に示され、原点は左下隅にあります。ただし、一部のテクノロジで作成されたグラフィックスコンテキストとQuartzは、異なるデフォルトの座標系を使用します。最も一般的なのは、座標系が左上隅の原点であるということです。次の場合、私たちはこの座標系にいます。
IOSでは、UIViewによって返される描画コンテキスト。
IOSでは、関数UIGraphicsBeginImageContextWithOptionsによって作成された描画コンテキストが呼び出されます。




6.メモリ管理:オブジェクトの所有権
Quratzは、CoreFoundationのメモリ管理モデルである参照カウントを使用しています。作成されると、Core Foundationオブジェクトの参照カウントは1になります。retain関数を呼び出すことで参照カウントを増やし、release関数を呼び出して参照カウントを減らすことができます。

覚えておく必要のあることがいくつかあります。
(1)オブジェクトを作成またはコピーするときは、オブジェクトがあります。オブジェクトがなくなったら、オブジェクトを解放する必要があります。
(2)「create」および「copy」という単語を含む関数からオブジェクトを取得しない場合、それを解放することはできません。
(3)オブジェクトの所有権がないが、保存したい場合は、オブジェクトを再作成し、リリースを覚えておく必要があります。たとえば、CGColorspaceオブジェクトを作成する場合、関数CGColorSpaceRetainおよびCGColorSpaceReleaseを使用して保持および解放します。