清除 NSImage 的 Alpha 通道
可以通过分配一个每像素 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。
清除阿尔法通道的秘诀是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它不会很快,但也可以:
It won't be fast but this will work as well:
请阅读有关图像可变性主题的 AppKit 发行说明。 NSImage 基本上应该被视为不可变的。
所有图形上下文中支持的像素格式具有预乘 alpha。如果 Alpha 通道为零,则其他通道也必须为零。
Please read the AppKit release notes on the subject of image mutability. NSImage should basically be treated as immutable.
All of the pixel formats supported in graphics contexts have premultiplied alpha. If the alpha channel is zero, the other channels have to be zero too.