質問

私はココアを使用して形状の反射を描画しようとしています。私はすでにnsaffineTransformを適用して、形状を正常に再描画しましたが、今ではアルファマスクを描く方法を理解できません。私はAnを使用しています NSCompositeDestinationOut 操作ですが、それは私に望ましくない結果を与えています:Alt Text http://img687.imageshack.us/img687/2417/capturedcran20100623094.png

私はこれを修正する方法が正確にはわかりません - 私はそれを作る必要があります したがって、勾配はアルファマスクとしてのみ機能し、実際には表示されません. 。間違った合成モードを使用していますか?

ありがとう!必要に応じてグラデーションコードは次のとおりです。

- (void)fadeOutRect:(NSRect)rect {
    [NSGraphicsContext saveGraphicsState];
    [[NSGraphicsContext currentContext] setCompositingOperation:NSCompositeDestinationOut];

    NSGradient *gradient = [[NSGradient alloc] initWithColorsAndLocations:
                            [[NSColor blackColor] colorWithAlphaComponent:0.5], 0.0,
                            [[NSColor blackColor] colorWithAlphaComponent:1.0], 0.8, nil];
    [gradient drawInRect:NSMakeRect(rect.origin.x, rect.origin.y + rect.size.height - ( PILL_HEIGHT * 2 ),
                                    rect.size.width, PILL_HEIGHT) angle:270];

    [NSGraphicsContext restoreGraphicsState];
}
役に立ちましたか?

解決

うん。これを行うために使用するコードの例は次のとおりです。ソースイメージを使用し、スケールファクターを備えた面白いビジネスを少し持っていますが、基本的な構造と合成の選択肢を使用して必要なことを行うことができるはずです。 (このコードは[ReflectionImage lockfocus]ブロック内にあり、自己は私たちが反映しているnsimageです。)

// Draw our mask into the image
NSGradient* fade = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5]
                                                 endingColor:[NSColor clearColor]];
[fade drawFromPoint:NSMakePoint(0.0, size.height)
            toPoint:NSMakePoint(0.0, 0.0)
            options:0];

// Composite the original image, upside-down
NSAffineTransform* flipper = [NSAffineTransform transform];
[flipper scaleXBy:1.0 yBy:-1.0];
[flipper concat];
[self drawInRect:NSMakeRect(0.0, -1.0*size.height, size.width, size.height)
        fromRect:NSMakeRect(0.0, 0.0, self.size.width, size.height / scaleFactor)
       operation:NSCompositeSourceIn fraction:1.0];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top