关于macos:Quartz中用XOR绘图

Drawing with XOR in Quartz

假设我正在将一些应用程序移植到 Mac OS X,并且在某些情况下,它在其他平台下使用 Xor 操作呈现文本和插入符号。研究表明,Quartz 绘图函数不支持 XOR 操作。我对么?有什么替代方法可以将这些代码片段移植到 Mac OS X 上?


请注意,XOR 是一种位图操作(实际上是二进制,因此仅针对黑白定义),因此仅在将一个位图绘制在另一个位图上时才定义它。 Quartz 提供了多种位图混合模式,包括差异 (kCGBlendModeDifference) 和排除 (kCGBlendModeExclusion),它们都是黑白值的 XOR - 所以,是的,Quartz 确实支持 XOR。

您可以在实践中执行此操作的方法是获取插入符号的图像(黑色背景上的白色插入符号)并使用上述任一混合模式(参见 CGContextSetBlendMode)绘制它。如果您还打算使用 XOR 绘制文本,则将其绘制到图像上下文中(同样,黑底白字),然后将具有混合模式的图像上下文应用于您的目标。


QuickDraw XOR 模式"只为黑白定义"绝对不是真的。例如,在 Inside Macintosh, Color Quickdraw 中对于"srcXor"模式的原始描述是:

如果源像素为黑色,则反转目标像素-对于彩色目标像素,如果像素是直接的,则使用其颜色的补色,如果像素被索引,则反转其索引。