EnumColorProfiles WcsGetDefaultColorProfile WcsSetDefaultColorProfile的使用

本文展示了一段C++代码,用于枚举Windows系统上所有ICM(颜色管理)配置文件。通过使用Windows API和ICM库,代码可以获取当前用户的默认颜色配置文件,并列出所有可用的ICM配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <Windows.h>
#include <Icm.h>
#include <iostream>
#include <string>

#pragma comment(lib,"Mscms.lib")
#define MAX_PATH 1024
BOOL flag = 0;
int main()
{
    WCHAR* szDisplayDeviceName = NULL;
    WCHAR szPath[MAX_PATH];
    memset(szPath, 0, 1024);
    DISPLAY_DEVICE dd;
    dd.cb = sizeof(dd);

    if (flag = EnumDisplayDevices(L"\\\\.\\DISPLAY1", 0, &dd, EDD_GET_DEVICE_INTERFACE_NAME))
    {
        if (flag = WcsGetDefaultColorProfile(WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER,
            dd.DeviceKey,
            CPT_ICC,
            CPST_PERCEPTUAL,
            0,  // dwProfileID -- doesn't seem to matter what value you use here
            MAX_PATH * sizeof(WCHAR),
            szPath))
        {
            PROFILE profile;
            profile.cbDataSize = (DWORD)(wcslen(szPath) + 1) * sizeof(WCHAR);
            profile.dwType = PROFILE_FILENAME;
            profile.pProfileData = (PVOID)szPath;

            HPROFILE hProfile = OpenColorProfile(&profile,
                PROFILE_READ, FILE_SHARE_READ, OPEN_EXISTING);

            // now do something with the profile
            
        }
    }

    LPWSTR buffer;
    ENUMTYPEW pe = { 0 };
    pe.dwSize = sizeof(pe);
    pe.dwVersion = ENUM_TYPE_VERSION;
    pe.dwFields = ET_DEVICENAME;
    pe.dwDeviceClass = CLASS_MONITOR;
    pe.pDeviceName = dd.DeviceKey;
    DWORD p = 0;
    DWORD size = 0;
    BOOL  ret = EnumColorProfilesW(NULL, &pe, NULL, &size, &p);
    buffer = (LPWSTR)malloc(size);
    ret = EnumColorProfilesW(NULL, &pe, (BYTE*)buffer, &size, &p);
    LPWSTR temp = buffer;
    for (int i = 0; i < p; i++)
    {
        wprintf(L"%s\n", temp);
        printf("without null character: %zu\n", wcslen(temp));
        temp += wcslen(temp) + 1;      
    }

    flag = WcsSetDefaultColorProfile(WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER,
        dd.DeviceKey,
        CPT_ICC,
        CPST_PERCEPTUAL,
        0,  // dwProfileID -- doesn't seem to matter what value you use here
        buffer);

    free(buffer);
    return 1;
}

这是列举出本机上的所有icm配置文件

相关链接: https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/master/vendor/aftereffects/win/OpenColorIO_AE_Dialogs_Win.cpp#L348

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值