| ログイン | ご入会 |
ADC連絡先
|
|
|
|
|
Q: 画像記述を作成するときに、深さのフィールドの値について何かガイドラインはありますか? A: Image Compression Manager は、画像記述を使用して圧縮画像データと非圧縮画像データを記述します。画像記述は、MakeImageDescriptionForPixMap や GraphicsImportGetImageDescription などの API によって作成されることがあります。しかし自分自身で画像記述を作成しなければならないこともあります。 画像記述の "depth" フィールドには、必ずしも、ピクセル当たりのビット数を示すリテラルが入るとは限りません。むしろ画像データを最も忠実に記述する QuickDraw のピクセルサイズにする必要があります。これによりアプリケーションは圧縮画像の特性が大まかに把握でき、特定の詳細情報を調べる必要がなくなります。実際の深さの保存場所については、後述の「セクション 2」で説明します。 セクション 1 - depth フィールド depth フィールドを直接埋めるときには、以下の基準に従います。
画像が上記のどの条件にも合わない場合は、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 を使用します。
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 を使用します。 参考文献Working with ImageDescriptions QTGetPixelFormatDepthForImageDescription - What's new in QuickTime 6、PDF テクニカルノート 2057 - Fill in the size field before calling ICMGetPixelFormatInfo
|