CreatePdfLittleCmsColourTransform реализует IPdfColourTransform для исходных буферов компонентов Gray, RGB, CMYK и ICCBased, а также для помощника преобразования цвета документа
Укажите явный абсолютный путь к библиотеке, архитектура которой совпадает с процессом; нативная библиотека должна открывать cdecl-API LittleCMS 2, а прилагаемый помощник сборки получает такой ABI из исходников LittleCMS 2.19 под лицензией MIT
DLL в конфигурации сборки Microsoft stdcall несовместима с провайдером Win32; соглашения о вызовах нельзя надёжно вывести из недекорированных имён экспорта
TryCreatePdfLittleCmsColourTransform возвращает диагностику зависимостей и при сбое оставляет преобразование равным nil, не меняя путь поиска процесса
Каждый вызов владеет своим нативным контекстом, профилями и преобразованием; провайдер может быть общим, но вызывающие должны держать буферы выборок неизменными на время вызова
Буферы содержат плотно упакованные целые пиксели с 1, 3 или 4 компонентами и 8-битными байтами либо 16-битными беззнаковыми словами в нативном порядке байтов; выборки изображений PDF с порядком big-endian конвертирует помощник документа до вызова этого провайдера
Для непрофилированного DeviceRGB используется sRGB, а для непрофилированного DeviceGray — профиль D50 с гаммой 2.2; DeviceCMYK и ICCBased требуют явного исходного ICC-профиля, и цветовое пространство данных каждого профиля должно совпадать с заявленным числом компонентов
Цели — DeviceGray, DeviceRGB или DeviceCMYK с соответствующим ICC-профилем; опущенный целевой профиль поддерживается только для значений Gray и RGB по умолчанию у провайдера
Default выбирает относительный колориметрический intent, компенсацию чёрной точки, 256 МиБ байтов выборок и 16 МиБ байтов ICC-профиля; лимит профиля ограничен 16 МиБ
Отмена проверяется до и после нативной подготовки и между блоками не более 65 536 пикселей; у нативного открытия профиля и отдельного блока преобразования нет callback-а отмены
Неудачные преобразования очищают целевой буфер и возбуждают EPdfColourBackendError; отмена сохраняет EPdfOperationCancelled
Реальные преобразования LittleCMS 2.19 и приспособления сохранения/переоткрытия/рендеринга PDF проверены с Delphi и FPC на Win32 и Win64
type
EPdfColourBackendError = class(EPdfProduction);
TPdfLittleCmsOptions = record
RenderingIntent: Cardinal;
BlackPointCompensation: Boolean;
MaxSampleBytes: Integer;
MaxProfileBytes: Integer;
CancellationToken: IPdfCancellationToken;
class function Default: TPdfLittleCmsOptions; static;
end;
function CreatePdfLittleCmsColourTransform(const LibraryPath: string;
const Options: TPdfLittleCmsOptions): IPdfColourTransform;
function TryCreatePdfLittleCmsColourTransform(const LibraryPath: string;
const Options: TPdfLittleCmsOptions; out Transform: IPdfColourTransform;
out ErrorText: string): Boolean;
function CreatePdfLittleCmsGrayProfile(const LibraryPath: string;
Gamma: Double = 2.2): TBytes;
function CreatePdfLittleCmsSrgbProfile(const LibraryPath: string): TBytes;
CreatePdfLittleCmsGrayProfile принимает конечную гамму от 0.1 до 10; оба помощника профилей сериализуют настоящие нативные ICC-профиля для встраивания или повторного использования
pwsh Native/ColourLittleCms/Build-LittleCms.ps1 -SourceDirectory C:/deps/lcms2.19 -OutputDirectory C:/deps/lcms-bin -Platform Win64
Помощнику требуется совместимая установка MinGW GCC и существующий checkout исходников LittleCMS 2.19; он копирует применимые уведомления нативных лицензий в выходной каталог и не скачивает и не устанавливает зависимости