Применение цветового профиля ICC к изображению в C# (Dotnet)
Как преобразовать изображение из одного цветового профиля в другой (с экрана на принтер или со сканера на экран). В Visual C++ вы использовали бы функцию в ICM.h, есть ли управляемый способ сделать это с помощью GDI+?
Мне нужно использовать GDI+, а не WPF. Я бы предпочел иметь управляемое решение, но если оно недоступно, думаю, PInkvoke будет достаточно.
2 ответа
Есть ряд решений.
- Для GDI+, ознакомьтесь с этой статьей на MSDN.
- Для WPF (.NET 3.0) см. Пространство имен System.Windows.Media. Существует ряд различных классов, таких как BitmapEncoder, которые имеют концепцию ColorContext, которая "представляет цветовой профиль Международного цветового консорциума (ICC) или Image Color Management (ICM), связанный с растровым изображением".
Оба они кажутся довольно сложными, поэтому всегда есть возможность купить чужой код. DotImage Photo Pro от Atalasoft имеет встроенные возможности настройки профиля ICC. Код дорогой; Лицензия разработчика почти 2к. Но, основываясь на их участии в сообществе дотнетов, я бы дал им повод.
Вы должны взглянуть на Lcms. Это система управления цветом, довольно полная, но написанная на C. Вы можете использовать pinvoke, но я бы порекомендовал Managed C++ wrapper. На самом деле я сейчас работаю над управляемой оболочкой для движка (только основы, преобразование цветового профиля, лабораторные показания). Я могу опубликовать ссылку на код после завершения. Это может быть неделя или около того, хотя.