清除 NSImage 的 Alpha 通道
-
21-09-2019 - |
题
可以通过用每个像素的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 通道为零,则其他通道也必须为零。
不隶属于 StackOverflow