| ログイン | ご入会 |
ADC連絡先
|
|
Q:QuickTime のグラフィックスエクスポータでは 1 チャネル 16 ビットの画像は作成できますか?A:はい。PNG および TIFF グラフィックスエクスポータでは、1 チャネル 16 ビットのピックスマップに基づいて 1 チャネル 16 ビットの画像ファイルを作成できます。1 チャネル 16 ビットのピクセル形式のサポートについては、テクニカル Q&A QA1114「48 bit & 64 bit Pixel Format support in QuickTime」を参照してください。 重要: これらのグラフィックスエクスポータは、1 チャネル 8 ビットのピックスマップを渡されても 1 チャネル 16 ビットの画像ファイルは作成しません。 ただし、これを正しく行うには、
表 1.
リスト 1. 48 ビット RGB ソースのエクスポート
// ImproveYourImage のサンプルと組み合わせて使用。後述の「参考資料」参照。
#include "MacShell.h"
void ExportDeepImageAsTIFF(void)
{
Handle hOpenTypeList = NewHandle(0);
long numTypes = 0;
FSSpec theFSSpec;
Boolean isSelected, isReplacing;
GraphicsImportComponent importer = 0;
GraphicsExportComponent exporter = 0;
Rect naturalBounds;
unsigned long actualSizeWritten;
ImageDescriptionHandle desc = NULL;
Handle h = NULL;
OSType pixelFormat;
GWorldPtr gworld = NULL;
OSErr err = noErr;
BuildGraphicsImporterValidFileTypes(hOpenTypeList, &numTypes);
HLock( hOpenTypeList );
err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
DisposeHandle(hOpenTypeList);
if (err) return;
// グラフィックスインポータコンポーネントを探し出して開く
err = GetGraphicsImporterForFile(&theFSSpec, &importer);
if (err) return;
// 実際の色空間を調べる
err = GraphicsImportGetImageDescription(importer, &desc);
if (err) goto bail;
err = GetImageDescriptionExtension(desc, &h, kImageDescriptionColorSpace, 1);
DisposeHandle((Handle)desc);
if (err) goto bail;
if( !h || !*h ) goto bail;
pixelFormat = *(OSType*)*h;
pixelFormat = EndianU32_BtoN(pixelFormat);
DisposeHandle(h);
// インポートした画像が 48 ビット RGB の場合、
// 1 チャネル 16 ビットの TIFF ファイルとしてエクスポートする
if (k48RGBCodecType == pixelFormat) {
// 画像をオフスクリーンの gworld に、その色空間を使用して描画する
err = GraphicsImportGetNaturalBounds(importer, &naturalBounds);
if (err) goto bail;
err = QTNewGWorld(&gworld, pixelFormat, &naturalBounds,
NULL, NULL, kICMTempThenAppMemory);
if (err) goto bail;
err = GraphicsImportSetGWorld(importer, gworld, NULL);
if (err) goto bail;
err = GraphicsImportDraw(importer);
if (err) goto bail;
// 画像を TIFF ファイルとして書き出す
err = PutFile("\pSave the image as:", "\pTest.tiff", &theFSSpec,
&isSelected, &isReplacing);
if (err) goto bail;
// TIFF グラフィックスエクスポータコンポーネントを探し出して開く
err = OpenADefaultComponent(GraphicsExporterComponentType, kQTFileTypeTIFF,
&exporter);
if (err) goto bail;
// 入力ソースを設定する
err = GraphicsExportSetInputGWorld(exporter, gworld);
if (err) goto bail;
// エクスポート先を設定する
err = GraphicsExportSetOutputFile(exporter, &theFSSpec);
if (err) goto bail;
// エクスポート深度を設定する。QA1354 の表 1 を参照
err = GraphicsExportSetDepth(exporter, k24RGBPixelFormat);
if (err) goto bail;
// ファイルをエクスポートする
GraphicsExportDoExport(exporter, &actualSizeWritten);
}
bail:
if (importer) CloseComponent(importer);
if (exporter) CloseComponent(exporter);
if (gworld) DisposeGWorld(gworld);
}
参考資料:ドキュメントの改訂履歴
掲載日: 2004-06-03 |