可以通过mallocing一个每像素32位的临时位图来完成 然后用for循环清除alpha组件 最后再把它变回NSImage。
我怀疑可以使用聪明的方式以更简单的方式完成 NSColor和NSCompositingOperation的组合。或者也许是图像 需要使用drawAtPoint与自身合成。
我的代码看起来像这样。
NSImage* img = some image with RGB and Alpha;
NSRect rect = some rect inside the image;
[img lockFocus];
[[NSColor clearColor] set];
NSRectFillUsingOperation(rect, NSCompositeXOR);
[img unlockFocus];
注意:将Alpha通道设置为1可以通过以下方式完成 使用带有NSCompositePlusLighter的blackColor。
清除Alpha通道的秘诀是什么?
答案 0 :(得分:4)
它不会很快,但这也会有效:
NSImage *newImage = [[NSImage alloc] initWithSize:[srcImage size]];
[newImage lockFocus];
[[NSColor whiteColor] set];
NSRectFill(NSMakeRect(0,0,[newImage size].width, [newImage size].height));
[srcImage compositeToPoint:NSZeroPoint operation:NSCompositeCopy];
[newImage unlockFocus];
答案 1 :(得分:2)
(1)请阅读有关图像可变性主题的AppKit发行说明。 NSImage应该基本上被视为不可变的。
(2)所有pixel formats supported in graphics contexts都有premultiplied alpha。如果alpha通道为零,则其他通道也必须为零。