gpt4 book ai didi

iphone - CGContextSetLineWidth(context, 1) - 宽度几乎总是至少 2 像素而不是 1

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

使用CGContextSetLineWidth(context, 1),宽度几乎总是至少2个像素,而不是1

QQCandleStickLayer.m

-(id)init
{
self = [super init];
if(self != nil)
{
self.delegate = self;
self.opaque = NO;
}
return self;
}

- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context{

CGContextSetLineWidth(context, 1.0f);
CGContextSetAllowsAntialiasing(context, false);
CGContextSetShouldAntialias(context, false);
CGContextSetInterpolationQuality(context,kCGInterpolationNone);
CGContextSetShadowWithColor(context, CGSizeMake( 0.0, 0.0 ), 0, NULL);


CGContextMoveToPoint(context, self.bounds.origin.x+30.5f, self.bounds.origin.y+self.bounds.size.height-indent);
CGContextAddLineToPoint(context, self.bounds.origin.x+30.5f, self.bounds.origin.y+self.bounds.size.height-(self.bounds.size.height-lastY));
CGContextClosePath(context);
CGContextSetRGBStrokeColor(context, 119.0f/255, 119.0f/255, 119.0f/255, 1.0);
CGContextStrokePath(context);
}

QQDeflviumLayer.m

- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context{  
UIImage *myDefluvium = [UIImage imageNamed:@"delfluviumNewRotatedSmall.png"];
CGLayerRef layerCircle = CGLayerCreateWithContext(context, myDefluvium.size,NULL);
if (layerCircle)
{
CGContextRef layerContext = CGLayerGetContext(layerCircle);
CGContextDrawImage(layerContext, (CGRect){ CGPointZero, myDefluvium.size }, myDefluvium.CGImage);
CGContextDrawLayerInRect(context, CGRectMake(layer.bounds.origin.x,layer.bounds.origin.y, layer.bounds.size.width,layer.bounds.size.height), layerCircle);
CFRelease(layerCircle);
}
}

QuickQuoteViewController.m

defluviumLayer=[[QQDefluviumLayer alloc] init];
[defluviumLayer setBounds:CGRectMake(0, 0, 61, 343)];
[defluviumLayer setPosition:CGPointMake(277,246)];
[self.view.layer addSublayer:defluviumLayer];
[defluviumLayer update];


candleStickLayer=[[QQCandleStickLayer alloc] init];
[candleStickLayer setBounds:CGRectMake(0,0, defluviumLayer.frame.size.width, defluviumLayer.frame.size.height)];
[candleStickLayer setPosition:CGPointMake(defluviumLayer.position.x,defluviumLayer.position.y)];
[self.view.layer addSublayer:candleStickLayer];
[candleStickLayer update];

我正在 CALayer 中绘制,并且图像位于图层下方,正如我所测试的那样 - 如果我在清晰的白色 View 上绘制 - 可以以宽度 1 绘制线条,但不能在图像上绘制

最佳答案

线宽确实是 1 像素宽,但一侧为 0.5 像素宽,另一侧为 0.5 像素宽。将其粘贴到像素网格上,使其两侧看起来都是 1 像素宽、不透明度为 50%,从而使其成为一条 2 像素宽、不透明度为 50% 的线。

为避免这种情况,请在半像素坐标上绘制线条。

例如,代替

CGContextMoveToPoint(ctx, 20.0f, 30.0f);
CGContextAddLineToPoint(ctx, 20.0f, 100.0f);

CGContextMoveToPoint(ctx, 20.5f, 30.0f);
CGContextAddLineToPoint(ctx, 20.5f, 100.0f);

关于iphone - CGContextSetLineWidth(context, 1) - 宽度几乎总是至少 2 像素而不是 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2033321/

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