Quartz 2D でのデータ管理


データの管理は、すべてのグラフィックアプリケーションが実行する必要があるタスクです。Quartz の場合、データ管理とは、Quartz 2D ルーチンにデータを供給したり、そこからデータを受け取ったりすることを指します。いくつかの Quartz 2D ルーチンは、ファイルやアプリケーションの別の部分からイメージや PDF データを取得するものなどで、Quartz にデータを移動します。他のルーチンでは、イメージや PDF データをファイルに書き込んだり、アプリケーションの別の部分にデータを提供したりなど、Quartz データを受け取ります。


Quartz は、データを管理するためのさまざまな関数を提供します。この章を読むことで、どの関数がアプリケーションに最適かを判断できるはずです。


注意: イメージデータを読み書きするためのより良い方法は、iOS 4 および Mac OS X 10.4 以降で使用可能な、Image I/O フレームワークを使用することです。CGImageSourceRef および CGImageDestinationRef の不透明データ型の詳細については、Image I/O プログラミングガイド を参照してください。イメージソースと宛先は、イメージデータへのアクセスを提供するだけでなく、イメージメタデータにアクセスするためのより良いサポートを提供します。


Quartz は、データソースと宛先の 3 つの大きなカテゴリーを認識します。


データ自体は、URL、CFData オブジェクト、またはデータバッファで表されるかどうかに関わらず、イメージデータまたは PDF データである可能性があります。イメージデータは任意の型のファイル形式を使用できます。Quartz は、一般的なイメージファイル形式のほとんどを理解します。いくつかの Quartz データ管理関数はイメージデータで特に動作しますが、PDF データのみで動作するものもあれば、PDF やイメージデータに使用できるものもあります。


図 10-1 に示したように、URL、CFData、生のデータソース、および宛先は、Mac OS X または iOS グラフィックス技術の領域外のデータを参照します。Mac OS X または iOS の他のグラフィックス技術は、Quartz と通信するための独自のルーチンを提供することがよくあります。たとえば、Mac OS X アプリケーションは Quartz イメージを Core Image に送信し、それを使って洗練された効果でイメージを変更できます。


Quartz 2D へのデータの移動


データソースからデータを取得する関数を 表 10-1 に示します。CGPDFDocumentCreateWithURL を除くこれらのすべての関数は、イメージソース(CGImageSourceRef) またはデータプロバイダ(CGDataProviderRef) のどちらかを返します。イメージソースおよびデータプロバイダは、データアクセスのタスクを抽象化し、アプリケーションが生のメモリバッファを介してデータを管理する必要性を排除します。


イメージソースは、イメージデータを Quartz に移動するためのより良い方法です。イメージソースは、多種多様なイメージデータを表します。イメージソースには、イメージとサムネイルイメージ、および各イメージとイメージファイルのプロパティを複数含めることができます。CGImageSourceRef を取得したら、以下のタスクを果たす事ができます。


CGPDFDocumentCreateWithURL 関数は、指定された URL に位置するファイルから PDF 文書を作成するコンビニエンス関数です。


データプロバイダは、機能がより限定された古い機構です。イメージや PDF データを取得するのに使用できます。


以下の関数にデータプロバイダを提供できます:


イメージの詳細については、ビットマップイメージとイメージマスク を参照してください。


Quartz 2D からのデータの移動


表 10-2 に示す関数は、Quartz 2D からデータを移動します。CGPDFContextCreateWithURL を除くこれらすべての関数は、イメージの宛先(CGImageDestinationRef) またはデータコンシューマ(CGDataConsumerRef) を返します。イメージの宛先とデータコンシューマはデータ書き込みタスクを抽象化し、Quartz が詳細を処理するようにします。


イメージの宛先は Quartz からイメージデータを移動するのにより良い方法です。イメージソースと同様に、イメージの宛先は、単一のイメージから複数のイメージ、サムネイルイメージ、および各イメージまたはイメージファイルのプロパティを含む宛先まで、さまざまなイメージデータを表すことができます。CGImageDestinationRef を取得したら、以下のタスクを果たす事ができます。



CGPDFContextCreateWithURL 関数は、PDF データを URL で指定された位置に書き込むコンビニエンス関数です。


データコンシューマは、より限定された機能を備えた古いメカニズムです。これらは、イメージまたは PDF データを書き込むために使用されます。データコンシューマには、以下のものを提供できます:



注意: 生のイメージデータを扱う際の最高のパフォーマンスを得るには、vImage フレームワークを使用してください。vImageBuffer_InitWithCGImage 関数を使用して、CGImageRef リファレンスからイメージデータを vImage にインポートすることができます。詳細については、アクセル化のリリースノート を参照してください。


イメージの詳細については、ビットマップイメージとイメージマスク を参照してください。


表 10-2 Quartz 2D からデータを移動する関数


関数関数の使用
CGImageDestinationCreateWithDataConsumerイメージデータをデータコンシューマに書き込む
CGImageDestinationCreateWithDataイメージデータを CFData オブジェクトに書き込む
CGImageDestinationCreateWithURLイメージデータを書き込む位置を指定する URL を指定できる時はいつでも
CGPDFContextCreateWithURLPDF データを書き込む位置を指定する URL を指定できる時はいつでも
CGDataConsumerCreateWithURLイメージや PDF データの書き込む位置を指定する URL を指定できる時はいつでも
CGDataConsumerCreateWithCFDataイメージまたは PDF データを CFData オブジェクトに書き込む
CGDataConsumerCreate提供している呼び出し関数を使ってイメージや PDF データを書き込む


Mac OS X で Quartz 2D と Core Image 間でデータを移動


Core Image フレームワークは、Mac OS X で提供される Objective-C API であり、イメージ処理をサポートしています。Core Image を使用すると、ビデオと静止画の両方のためのビルトインイメージフィルタにアクセスでき、カスタムフィルタと、ほぼリアルタイムの処理をサポートします。Core Image フィルタを Quartz 2D イメージに適用できます。たとえば、Core Image を使用して色を補正したり、イメージの図形を歪めたり、イメージをぼかしたり、鮮明にしたり、イメージ間の推移を作成したりできます。Core Image では、またフィルタ操作の出力を入力にフィードバックするイメージへの反復処理も適用できます。Core Image の能力をより詳しく理解するには、Core Image プログラミングガイド を参照してください。


Core Image のメソッドは、Core Image のイメージまたは CIImage オブジェクトとしてパッケージ化されたイメージを操作します。Core Image は、Quartz イメージ(CGImageRef データ型) 上には直接操作しません。Core Image フィルタをイメージに適用する前に、Quartz イメージを Core Image のイメージに変換しなければなりません。


Quartz 2D API は、Quartz イメージを Core Image のイメージとしてパッケージ化する関数は全く提供しませんが、Core Image は提供します。以下の Core Image のメソッドは、Quartz イメージまたは Quartz レイヤー(CGLayerRef) のいずれかから Core Image のイメージを作成します。それらを使用して、Quartz 2D データを Core Image に移動できます。


以下の Core Image のメソッドは、Core Image のイメージから Quartz イメージを返します。これらを使って、処理されたイメージを Quartz 2D に戻すことができます:


Core Image メソッドの詳細については、Core Image リファレンス集 を参照してください。



前の章 次の章



目次
Xcode 10 の新機能

  • 前書き
  • 誰がこの文書を読むべきか?
    この文書の構成
  • Quartz 2D の概要
  • ページ
    描画先:グラフィックスコンテキスト
    Quartz 2D 不透明(Opaque) データ型
    グラフィックス状態
    Quartz 2D 座標系
    メモリー管理:オブジェクトの所有権
  • グラフィックスコンテキスト
  • iOS のビューグラフィックスコンテキストに描画する
    Mac OS X でのウィンドウグラフィックスコンテキストの作成
    PDF グラフィックスコンテキストの作成
  • ビットマップグラフィックスコンテキストの作成
  • サポートされるピクセル形式
    アンチエイリアス
    印刷用のグラフィックスコンテキストの取得
  • パス
  • パスの作成とパスの描画
  • ビルディングブロック
  • パスの作成
  • パスのペイント (Painting a Path)
  • ブレンドモードの設定
  • パスをクリップする
  • 色と色空間
  • 色と色空間について
    アルファ値
    色空間の作成
    色の設定と作成
    レンダリングインテントの設定
  • 変換
  • Quartz 変換関数について
    現在の変換配列の変更
    アフィン変換の作成
    アフィン変換の評価
    ユーザをデバイス空間変換に導く
    配列の背後の数学
  • パターン
  • パターンの構造
    色付きパターンとステンシル(無色の) パターン
    タイル張り
    パターンの仕組み
  • 色付きパターンのペイント
  • ステンシルパターンのペイント
  • 陰影
  • 陰影の仕組み
    コンテキストに基づいて変化する陰影描画規則
    陰影を用いたペイント
  • グラデーション
  • 軸方向および放射状グラデーションの例
    CGShading と CGGradient オブジェクトの比較
    グラデーションの端を超えて色を拡張
    CGGradient オブジェクトの使用
  • CGShading オブジェクトの使用
  • CGShading オブジェクトを使用して軸方向のグラデーションをペイント
  • CGShading オブジェクトを使用して放射状グラデーションをペイント
  • 以下も見よ
  • 透過レイヤー
  • 透過レイヤーの仕組み
    透過レイヤーへのペイント
  • Quartz 2D でのデータ管理
  • Quartz 2D へのデータの移動
    Quartz 2D からのデータの移動
    Mac OS X で Quartz 2D と Core Image 間でデータを移動
  • ビットマップイメージとイメージマスク
  • ビットマップイメージとイメージマスクについて
    ビットマップイメージ情報
  • イメージの作成
  • イメージマスクの作成
  • イメージをマスクする
  • イメージにブレンドモードを使用
  • Core Graphics のレイヤー描画
  • レイヤー描画のしくみ
  • レイヤーを使った描画
  • 複数の CGLayer オブジェクトを使用して旗を描画する例
  • PDF 文書の作成、表示、および変換
  • PDF を開いて表示
    PDF ページの変換を作成する
    PDF ファイルの作成
    リンクの追加
    PDF コンテンツの保護
  • PDF 文書の解析
  • PDF 文書の構造の検査
  • PDF コンテンツの解析
  • PostScript 変換
  • 呼び出し関数を書く
    呼び出し関数構造体を埋める
    PostScript 変換オブジェクトの作成
    データプロバイダおよびデータコンシューマオブジェクトの作成
    変換の実行
    テキスト
    用語集
    文書改訂履歴












    トップ(Quartz 2D プログラミングガイド)












    トップ(Quartz 2D プログラミングガイド)












    トップ(Quartz 2D プログラミングガイド)












    トップ(Quartz 2D プログラミングガイド)












    トップ(Quartz 2D プログラミングガイド)