gpt4 book ai didi

cocoa - 核心显卡0x1​​04567911

转载 作者:行者123 更新时间:2023-12-03 16:07:39 25 4
gpt4 key购买 nike

此处和网络上其他地方有许多关于如何使用渐变(填充或描边)进行绘制的资源。

但是,AFAICT 没有解决以下要求:如何绘制具有正常梯度的路径,其中正常意味着与路径正交。当应用暗->亮->暗线性渐变时,最终效果可能类似于牙膏或 pipe 。以下是圆角矩形情况下的想法:

round-rect tube http://muys.net/cadre_blanc.png

(这是手绘的,边角不是很好)。

在圆矩形的具体情况下,我想我可以用 4 个线性渐变(边)和 4 个径向渐变(角)来实现这种效果。但还有更好的吗?

对于任何路径都有简单的解决方案吗?

最佳答案

我能想到的唯一“简单”的解决方案是多次描边路径,减少描边宽度并每次稍微改变颜色,以模拟渐变。

显然,对于复杂路径来说,这可能是一项昂贵的操作,因此如果可能的话,您希望缓存结果。

#define RKRandom(x) (arc4random() % ((NSUInteger)(x) + 1))

@implementation StrokeView

- (void)drawRect:(NSRect)rect
{
NSRect bounds = self.bounds;

//first draw using Core Graphics calls
CGContextRef c = [[NSGraphicsContext currentContext] graphicsPort];

CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, NULL, NSMidX(bounds), NSMidY(bounds));
CGContextSetMiterLimit(c,90.0);
CGContextSetLineJoin(c, kCGLineJoinRound);
CGContextSetLineCap(c, kCGLineCapRound);

for(NSUInteger f = 0; f < 20; f++)
{
CGPathAddCurveToPoint(
path,
NULL,
(CGFloat)RKRandom((NSInteger)NSWidth(bounds)) + NSMinX(bounds),
(CGFloat)RKRandom((NSInteger)NSHeight(bounds)) + NSMinY(bounds),
(CGFloat)RKRandom((NSInteger)NSWidth(bounds)) + NSMinX(bounds),
(CGFloat)RKRandom((NSInteger)NSHeight(bounds)) + NSMinY(bounds),
(CGFloat)RKRandom((NSInteger)NSWidth(bounds)) + NSMinX(bounds),
(CGFloat)RKRandom((NSInteger)NSHeight(bounds)) + NSMinY(bounds)
);
}

for(NSInteger i = 0; i < 8; i+=2)
{
CGContextSetLineWidth(c, 8.0 - (CGFloat)i);
CGFloat tint = (CGFloat)i * 0.15;

CGContextSetRGBStrokeColor (
c,
1.0,
tint,
tint,
1.0
);
CGContextAddPath(c, path);
CGContextStrokePath(c);
}

CGPathRelease(path);

//now draw using Cocoa drawing
NSBezierPath* cocoaPath = [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(self.bounds, 20.0, 20.0) xRadius:10.0 yRadius:10.0];
for(NSInteger i = 0; i < 8; i+=2)
{
[cocoaPath setLineWidth:8.0 - (CGFloat)i];
CGFloat tint = (CGFloat)i * 0.15;
NSColor* color = [NSColor colorWithCalibratedRed:tint green:tint blue:1.0 alpha:1.0];
[color set];
[cocoaPath stroke];
}
}

@end

sample output

关于cocoa - 核心显卡0x1​​04567911,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com