25270


Mac OS X
で「システム環境設定」→「ディスプレイ」→「カラー」を開くと現在使用しているディスプレイプロファイル名が分かり、マウスオーバーでパスも見られます。それと同じパスをJavaまたはObjective-
Cのプログラム内で取得したいのですが、どうすればよいでしょうか。

パスが分かりさえすればよく、別のプロファイルに設定したりできる必要はありません。


CC BY-SA 3.0
2016-05-29T03:23:42.113
25257
2016-05-29T14:56:27.677
2197
question
java objective-c macos
ディスプレイプロファイルのパスの取得方法


自己解決しました。<https://github.com/mpv-player/mpv/issues/594> 等が参考になりました。

[code]

    char* getSystemDisplayProfilePath()
    {
      CGDirectDisplayID displayID = CGMainDisplayID();
      CFUUIDRef displayUUID = CGDisplayCreateUUIDFromDisplayID(displayID);
      if (!displayUUID) return NULL;
    
      CFDictionaryRef displayInfo =
        ColorSyncDeviceCopyDeviceInfo(kColorSyncDisplayDeviceClass, displayUUID);
      CFRelease(displayUUID);
      if (!displayInfo) return NULL;
    
      CFDictionaryRef factoryInfo =
        (CFDictionaryRef)CFDictionaryGetValue(displayInfo, kColorSyncFactoryProfiles);
      if (!factoryInfo) return NULL;
    
      CFStringRef defaultProfileID =
        (CFStringRef)CFDictionaryGetValue(factoryInfo, kColorSyncDeviceDefaultProfileID);
      if (!defaultProfileID) return NULL;
    
      CFURLRef profileURL;
      CFDictionaryRef customProfileInfo =
        (CFDictionaryRef)CFDictionaryGetValue(displayInfo, kColorSyncCustomProfiles);
      if (customProfileInfo) {
        profileURL =
          (CFURLRef)CFDictionaryGetValue(customProfileInfo, defaultProfileID);
        if (!profileURL) return NULL;
      } else {
        CFDictionaryRef factoryProfileInfo =
          (CFDictionaryRef)CFDictionaryGetValue(factoryInfo, defaultProfileID);
        if (!factoryProfileInfo) return NULL;
    
        profileURL =
          (CFURLRef)CFDictionaryGetValue(factoryProfileInfo, kColorSyncDeviceProfileURL);
        if (!profileURL) return NULL;
      }
    
      char path[PATH_MAX];
      bool const result =
        CFURLGetFileSystemRepresentation(profileURL, true, (UInt8*)path, PATH_MAX);
      CFRelease(profileURL);
      CFRelease(displayInfo);
      if (!result) return NULL;
    
      return new_strdup( path );
    }
    
[/code]


CC BY-SA 3.0
2016-05-29T14:56:27.677
25270
2016-05-29T14:56:27.677
2197
25257
answer