Q:
ColorSync プロファイルの名前をプログラミングによって取得したいのですが、何か方法はありますか?
A: 一般に、プロファイル名を 1 つの言語でローカライズされたものは、シグネチャ‘desc’を使用したデータを含む‘desc’タグに格納されています。ICC バージョン 4 と バージョン 2 のいくつかのプロファイルの場合、複数の言語でローカライズされたプロファイル名は、シグネチャ‘mluc’を使用したデータを含む‘desc’タグまたは‘dscm’タグに格納されています。ColorSync が提供する CMCopyProfileLocalizedString 関数または CMCopyProfileLocalizedStringDictionary 関数を使って、新しい‘mluc’というマルチローカライズされた UniCode タグにアクセスできます(詳細については、TN 2035 ColorSync On Mac OS X を参照してください)。
名前を取得する最良の方法は:
a) まず、CMCopyProfileLocalizedString を呼び出して、‘desc’/‘mluc’タグ(もしあれば)から、ローカライズされた名前のうち最適なものを取得します。
b) これが失敗した場合は、CMCopyProfileLocalizedString を呼び出して、‘dscm’/‘mluc’タグ(もしあれば)から、ローカライズされた名前のうち最適なものを取得します。
c) 上記のどちらの呼び出しにも失敗した場合は、CMGetScriptProfileDescription を呼び出して、従来の‘desc’タグからローカライズ名を取得します。
下のリスト 1 のコードスニペットは、上記の関数を使ってプロファイル名を取得する方法を示しています。このコードは、名前を見つけ、CFString として返します。
CFStringRef CopyProfileDescriptionCFString(CMProfileRef prof)
{
Str255 pName;
ScriptCode code;
CFStringRef str = nil;
CMError err;
// ICC v4 プロファイルの場合は、‘desc’タグまたは‘mluc’タグから
// 最適なローカライズ名を取得するようにします
err = CMCopyProfileLocalizedString(prof, cmProfileDescriptionTag, 0,0, &str);
// 名前を取得できない場合
if (err != noErr)
{
// アップル製のローカライズされた ICC v2 プロファイルの場合は、
// ‘desc’タグまたは‘mluc’タグから最適なローカライズされた名前を
// 取得する
err = CMCopyProfileLocalizedString(prof, cmProfileDescriptionMLTag, 0,0, &str);
// 名前を取得できない場合
if (err != noErr)
{
// 通常の ICC v2 プロファイルの場合は、‘desc’タグ
//または‘mluc’タグから名前を取得する
err = CMGetScriptProfileDescription( prof, pName, &code);
// プロファイル名を CFString に変換する
if (err == noErr)
{
str = CFStringCreateWithPascalString(0, pName, code);
}
}
}
return str;
}
| |
リスト 1. ColorSync プロファイルの名前の取得
|
[2002 年 10 月 25 日]
|