2011-01-28 154 views
1

所有NSViews我在Cocoa应用程序3个NSViews,其它的每个子视图。绘制透明NSImage中使得透明

FirstNSView - > SecondNSView - > ThirdNSView

FirstNSView绘制使用核心图形固体背景填充。

SecondNSView为许多其它视图的容器图。

ThirdNSView绘制一个NSImage中到使用以下代码其帧在drawRect

[img drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, img.size.width, img.size.height) operation:NSCompositeDestinationAtop fraction:1.0];

我使用NSCompositeDestinationAtop,因为它允许图像几乎充当的img非透明区域的掩模。

然而,img透明区域,使整个窗口透明,而不是显示通过对FirstNSView因为我期望的那样。像这样:

enter image description here

注意,与其他复合类型的实验仍然导致同样的问题。

我有很多了解NSViews不意味着“分层”,但我不能确定这是与此有关。到目前为止,我已经很好地使用核心图形绘制到NSView上,并且透明部分暴露了“后面”图层。只是试图合成这个图像,这个问题已经出现。

我会很感激任何指针,为什么发生这种情况,解决它的一个可行的办法。

回答

-1
[img drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, img.size.width, img.size.height) operation:NSCompositeDestinationAtop fraction:1.0]; 

我使用NSCompositeDestinationAtop,因为它允许图像几乎充当的img非透明区域的掩模。

哪个形象?如果你想用img的alpha通道作为掩码,那就是NSCompositeSourceOver

DestinationAtop是当你想要的形象窗下出现,所以你应该通过在窗口中的任何已经透明区域看到图像。

但是,img的透明区域使整个窗口透明,而不是像我期望的那样向FirstNSView显示。像这样:

[画面]

我不能告诉从截图什么。它看起来像一堆随机的彩色形状给我。

我已经读了很多关于NSViews不是为了'分层'的意思,但我不确定这是否与这里相关。

不是。重叠兄弟意见造成问题。

+0

截图中的紫色是我的桌面。正如你所看到的,紫色是在合成图像的灰色箭头下。不,我不想要NSCompositeSourceOver - 它会导致http://i.imgur.com/LZgxk.png。我想要的效果与我的原始图片一样,但没有像现在这样呈现桌面。 – JoeR 2011-01-28 14:41:25