Вам очень далеко до полного диапазона цветовых пространств, доступных в PostScript.У вас нет setcolorspace
, а setcolorspace принимает сложный массив аргументов, который может включать / DeviceGray (не цветной).
Вы также не учитываете CIEBasedA и тот факт, что C = M = Y= 0, K - это шкала серого, даже если она выражена в пространстве CMYK, и, конечно, R = G = B - это оттенок серого, выраженный в пространстве RGB.Точно так же / Separataion / Black будет рисовать в оттенках серого.
Кроме того, PostScript является языком программирования;Весьма распространено включать пролог, который определяет операции удобным для автора приложения, генерирующего PostScript, способом.Пролог может включать функции, которые не используются в этой конкретной программе.Так что-то вроде:
/rg /setrgbcolor load def
вызовет ваш grep, даже если программа PostScript тогда не использовала rg
.
Тогда есть изображения.colorimage
- не единственный способ рисования изображения в PostScript, оператор image
принимает операнд словаря, который может включать цветовое пространство.Как и выше, возможно иметь серое изображение, выраженное в другом цветовом пространстве (неэффективно, возможно, но допустимо).
Вы можете написать программу PostScript, которая «перехватывает» определение операторов цвета и имеет этоКод запрашивает параметры, чтобы решить, является ли спецификация серым пространством или нет, с изображениями гораздо сложнее иметь дело, поскольку, если вам нужна надежность, вам нужно взглянуть на пример данных изображения, чтобы увидеть, действительно ли это просто серое изображение.
Можно написать устройство Ghostscript, которое могло бы выполнять эту работу, потому что оно получит все операции.Это все еще не будет очень быстро, так как он должен интерпретировать весь файл, чтобы обнаружить каждую операцию.Даже тогда такой инструмент может быть побежден в определенных приложениях.Например, код может опросить базовое устройство и выбрать другой путь кода, если цветовое пространство устройства было серым, RGB или CMYK.Но это вряд ли произойдет в любой реальной программе PostScript.