Рисование с помощью XOR в кварце - PullRequest
0 голосов
/ 21 января 2012

Допустим, я портирую какое-то приложение на Mac OS X, а в некоторых случаях оно отображает текст и каретку, используя операцию Xor на другой платформе. Исследования показали, что операция XOR не поддерживается функциями рисования Quartz. Я прав? И какую альтернативу можно использовать для переноса таких фрагментов кода на Mac OS X?

Ответы [ 2 ]

5 голосов
/ 21 января 2012

Обратите внимание, что XOR - это битовая операция (и на самом деле двоичная, поэтому она определена только для ч / б), поэтому она определяется только при рисовании одной битовой карты над другой.Кварц предоставляет широкий спектр режимов наложения растровых изображений, в том числе «Разница» (kCGBlendModeDifference) и «Исключение» (kCGBlendModeExclusion), которые точно соответствуют XOR для черно-белых значений - так что да, Quartz поддерживает XOR.

Вы можете сделать это на практике, чтобы получить изображение вашей каретки (белая каретка на черном фоне) и нарисовать ее, используя любой из указанных выше режимов наложения (см. CGContextSetBlendMode).Если вы также хотели нарисовать текст, используя XOR, то вы рисуете его в контексте изображения (опять же, белый на черном), а затем применяете к изображению контекст изображения с режимом наложения.

1 голос
/ 10 апреля 2017

Определенно неверно, что режим QuickDraw XOR «определен только для ч / б».Например, оригинальное описание в Inside Macintosh, Color Quickdraw, для режима «srcXor»:

, где исходный пиксель черный, инвертируйте целевой пиксель - для цветного конечного пикселя используйте дополнение егоцвет, если пиксель прямой, инвертировать его индекс, если пиксель проиндексирован.

...