可以通过用每个像素的32bits将临时位图杂乱,然后用for循环清除alpha组件,然后再次将其重新转回nsimage。

我怀疑可以使用聪明的 NSColor 和 NS合成操作. 。或者也许是图像 需要使用 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 可以通过以下方式完成 将 blackColor 与 NSCompositePlusLighter 一起使用。

清除阿尔法通道的秘诀是什么?

有帮助吗?

解决方案

这不会是快速的,但是这将工作,以及:

   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) 请阅读有关图像可变性主题的 AppKit 发行说明。NSImage 基本上应该被视为不可变的。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top