高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1183
What depth should I put in an Image Description?


Q: 画像記述を作成するときに、深さのフィールドの値について何かガイドラインはありますか?

A: Image Compression Manager は、画像記述を使用して圧縮画像データと非圧縮画像データを記述します。画像記述は、MakeImageDescriptionForPixMap や GraphicsImportGetImageDescription などの API によって作成されることがあります。しかし自分自身で画像記述を作成しなければならないこともあります。

画像記述の "depth" フィールドには、必ずしも、ピクセル当たりのビット数を示すリテラルが入るとは限りません。むしろ画像データを最も忠実に記述する QuickDraw のピクセルサイズにする必要があります。これによりアプリケーションは圧縮画像の特性が大まかに把握でき、特定の詳細情報を調べる必要がなくなります。実際の深さの保存場所については、後述の「セクション 2」で説明します。

セクション 1 - depth フィールド

depth フィールドを直接埋めるときには、以下の基準に従います。

  • 画像がアルファチャンネルを持っている場合は、必ず 32 を使用する。

  • 画像がグレイスケールの場合は、グレイスケールの深さを使用する。

    • サンプル数が 8 ビットまたはそれよりも深い場合は 40
    • サンプル数が 4 ビットの場合は 36
    • サンプル数が 2 ビットの場合は 34
    • サンプル数が 1 ビットの場合は 33

  • 画像がインデックスカラー(すなわち、サンプルはカラールックアップテーブルを通じて解釈される)の場合は、該当する色の深さを使用します。

    • 256 色の場合は 8
    • 16 色の場合は 4
    • 4 色の場合は 2
    • モノクロの場合は 1

    この場合は、カラーテーブルが画像記述にアタッチされている必要があります。これには、SetImageDescriptionCTable を呼び出します。

  • 画像が 16 ビットの RGB ピクセル形式の場合は、16 を使用します。

画像が上記のどの条件にも合わない場合は、24 を使用します。これは一般的な、「アルファチャンネルを持たない色」の深さです。

アルファチャンネルのない YUV ピクセル形式には、24 を使用します。たとえば、YUV9 は、1 ピクセル当たり 9 ビットであり、YUV 4:2:0 は、1 ピクセル当たり 12 ビット、YUV 4:2:2 は 1 ピクセル当たり 16 ビットですが、このような場合も 24 を使用します。

サンプル数が 8 ビット以上の深さのピクセル形式にも、上記の基準に従います。たとえば、48 ビットの RGB の場合は深さ 24 を使用し、64 ビットの ARGB の場合は深さ 32 を使用します。

画像タイプ

使用する深さの値

アルファチャンネルを持っている

32

256 色のインデックスカラー - CTable が必要

8

16 色のインデックスカラー - CTable が必要

4

4 色のインデックスカラー - CTable が必要

2

2 色のインデックスカラー - CTable が必要

1

深さ 8 ビット以上のグレイスケール

40

4 ビットまたはグレイスケール

36

2 ビットまたはグレイスケール

34

1 ビットまたはグレイスケール

33

16 ビットの RGB ピクセル形式 - 種類を問わず

16

アルファを持たない YUV ピクセル形式

24

アルファチャンネルのない色 - 汎用の深さ

24

48 ビット RGB

24

64 ビット ARGB

32

アルファを持つ 32 ビットグレイスケール

32

16 ビットグレイスケール

16

 表 1 - 早見表

QuickTime 6.0 には、QTGetPixelFormatDepthForImageDescription という新しい API があります。これは、登録されているピクセル形式に適切な深さのコード戻します。

セクション 2 - 実際の深さについての情報はどこに保存すべきか

対象の画像データが QuickDraw によってサポートされている形式で、ビッグエンディアンのピクセル形式の圧縮されていないピクセル配列である場合(たとえば 1、2、4、8、16、24、32、33、34、36、40)、画像記述の cType フィールドは、kRawCodecType とし、depth フィールドは(上記のとおり)ピクセル形式を表すものとします。たとえば、8 ビットのグレイスケールの場合、cType フィールドは kRawCodecType、depth フィールドは 40 でなければなりません。

対象の画像データが、QuickDraw 以外のピクセル形式で、圧縮されていないピクセル配列の場合、画像記述の cType フィールドは、ピクセル形式のコードとします。たとえば、k2vuyPixelFormat ('2vuy') のようにします。この場合、depth フィールドは(上記のとおり)24 でなければなりません。

対象の画像データが圧縮されており、直接伸長できる特殊なネイティブのピクセル形式である場合、ピクセル形式は、タイプが kImageDescriptionColorSpace ('cspc') の画像記述拡張に、ビッグエンディアン形式の OSType として保存する必要があります。cType フィールドの値は、画像データが圧縮された方法を示す必要があります。

たとえば、ピクセル当たり 48 ビットの RGB 画像が含まれている PNG ファイルは、cType が kPNGCodecType ('png ') 、OSType が k48RGBCodecType ('b48r') のビッグエンディアン形式の kImageDescriptionColorSpace ('cspc') 画像記述拡張、depth フィールドの値が 24(上記のとおり)である画像記述によって記述されます。

登録されているピクセル形式について、さらに詳しい情報がアプリケーションに必要な場合は、ICMGetPixelFormatInfo API を使用します。

参考文献

ImageDescription

Working with ImageDescriptions

QTGetPixelFormatDepthForImageDescription - What's new in QuickTime 6、PDF

ICMGetPixelFormatInfo

テクニカルノート 2057 - Fill in the size field before calling ICMGetPixelFormatInfo

SetImageDescriptionCTable


[2002 年 8 月 15 日]