Drawing with XOR in Quartz
假设我正在将一些应用程序移植到 Mac OS X,并且在某些情况下,它在其他平台下使用 Xor 操作呈现文本和插入符号。研究表明,Quartz 绘图函数不支持 XOR 操作。我对么?有什么替代方法可以将这些代码片段移植到 Mac OS X 上?
请注意,XOR 是一种位图操作(实际上是二进制,因此仅针对黑白定义),因此仅在将一个位图绘制在另一个位图上时才定义它。 Quartz 提供了多种位图混合模式,包括差异 (kCGBlendModeDifference) 和排除 (kCGBlendModeExclusion),它们都是黑白值的 XOR – 所以,是的,Quartz 确实支持 XOR。
您可以在实践中执行此操作的方法是获取插入符号的图像(黑色背景上的白色插入符号)并使用上述任一混合模式(参见 CGContextSetBlendMode)绘制它。如果您还打算使用 XOR 绘制文本,则将其绘制到图像上下文中(同样,黑底白字),然后将具有混合模式的图像上下文应用于您的目标。
- 还有 kCGBlendModeXOR,但它是基于 alpha 而不是基于颜色的。更重要的是,混合模式不限于绘制光栅——您可以为任何操作设置混合模式,包括填充和描边。您可以直接绘制插入符号(例如);您不需要先将其绘制成图像。
QuickDraw XOR 模式”只为黑白定义”绝对不是真的。例如,在 Inside Macintosh, Color Quickdraw 中对于”srcXor”模式的原始描述是:
如果源像素为黑色,则反转目标像素-对于彩色目标像素,如果像素是直接的,则使用其颜色的补色,如果像素被索引,则反转其索引。
来源:https://www.codenong.com/8951679/