Вы уже достаточно близко.Вы пропустили атрибут изображения, который скажет, что ноль считается прозрачным, и вы сделали альтернативное пространство для цветового пространства разделения немного более сложным, чем было необходимо.Я ожидал бы, что вы написали (если бы он был правильно закодирован), чтобы отобразить графику в голубом и белом цветах и наложить на любой материал, лежащий в основе.
Добавьте атрибут маски к изображению, сказав, что все значения от 0 до0 должны быть замаскированы.Это сделает прозрачными нулевые биты.
Я бы не использовал белый в качестве названия цвета разделения, поскольку это может привести к путанице, если вы действительно не рисуете 1 бит белым, а нулевые биты не вынимаете.Это было бы необычно, но я вижу, как это происходит.Если цвет, который вы хотите нарисовать, не может быть выражен в серой шкале, я бы использовал очень простой альтернативный цвет устройства серый.Вы говорите, что изображение черное и прозрачное, поэтому использование DeviceGray было бы хорошим выбором.
Преобразование цвета разделения (0 не выделен, 1 черный) в альтернативное цветовое пространство (DeviceGray) так же просто, какинвертируя значение Input 1, которое становится DeviceGray 0, а input 0 становится DeviceGray 1. Таким образом, функция postscript является самой быстрой для написания.{1 sub} это все, что нужно.
<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <<6 0 R>>
/BitsPerComponent 1
/Mask [0 0]
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>
stream
………
endstream
endobj
6 0 obj
[/Separation /White /DeviceGray 7 0 R]
endobj
7 0 0bj
<<
/FunctionType 4
/Range [0 1]
/Domain [0 1]
/length 7
>>
Stream
{1 sub}
endstream
endobj