1

可以通过分配一个每像素 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 通道的秘诀是什么?

4

2 回答 2

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];
于 2009-10-14T00:26:05.483 回答
2
  1. 请阅读有关图像可变性主题的 AppKit 发行说明。NSImage 基本上应该被视为不可变的。

  2. 图形上下文中支持的所有像素格式都有预乘 alpha。如果 Alpha 通道为零,则其他通道也必须为零。

于 2009-10-13T22:42:19.310 回答