PDFium Delphi Component Docs

Опциональный провайдер ICC-преобразований LittleCMS 2

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; он копирует применимые уведомления нативных лицензий в выходной каталог и не скачивает и не устанавливает зависимости