清除NSImage的alpha通道

时间:2009-10-13 21:19:13

标签: cocoa transparency alphablending nsimage

可以通过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通道的秘诀是什么?

2 个答案:

答案 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通道为零,则其他通道也必须为零。