gpt4 book ai didi

iOS : Drawing on a CGContext eventually blurs

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:41:25 25 4
gpt4 key购买 nike

我有一个显示文档的应用程序,该文档顶部有一个 UIImage,您可以在其中画线等以突出显示内容。

如果我一直画线(触摸、画画、抬起手指,然后在屏幕的不同区域重复)

线条慢慢模糊。

这是我的触摸代码,我将 kCGBlendModeCopy 用于混合模式,但使用了 kCGBlendModeNormal。 DrawingView 是一个 UIImageView。

更新这是我已经画过的线,它们越旧越模糊,感觉每增加一条线都会衰减旧线。在 iPad 2 ios8 iPad Mini Retina ios7 上测试

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

mouseSwiped = NO;

if ( self.drawingEnabled )
{
UITouch *touch = [touches anyObject];
lastPoint = [touch locationInView:self.drawingView];

UIGraphicsBeginImageContext(self.drawingView.frame.size);
[self.drawingView.image drawInRect:CGRectMake(0, 0, self.drawingView.frame.size.width, self.drawingView.frame.size.height) blendMode:kCGBlendModeCopy alpha:1.0];
}
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

if ( self.drawingEnabled )
{
mouseSwiped = YES;
UITouch *touch = [touches anyObject];

CGPoint currentPoint = [touch locationInView:self.drawingView];

CGContextRef ctxt = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctxt, lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(ctxt, currentPoint.x, currentPoint.y);
CGContextSetLineCap(ctxt, kCGLineCapRound);
CGContextSetLineWidth(ctxt, self.brush );
CGContextSetRGBStrokeColor(ctxt, self.redColour, self.greenColour, self.blueColour, OPACITY);

if (self.eraserOn)
{
CGContextSetBlendMode(ctxt,kCGBlendModeClear);
}
else
{
CGContextSetBlendMode(ctxt,kCGBlendModeCopy);
}

CGContextStrokePath(ctxt);
self.drawingView.image = UIGraphicsGetImageFromCurrentImageContext();

lastPoint = currentPoint;
}
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{


[super touchesCancelled:touches withEvent:event];

UIGraphicsEndImageContext();

if(!mouseSwiped)
{
//self.drawingView.image = nil;
}
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {


if ( self.drawingEnabled )
{

if(!mouseSwiped) {
UIGraphicsEndImageContext();

UIGraphicsBeginImageContext(self.drawingView.frame.size);
[self.drawingView.image drawInRect:CGRectMake(0, 0, self.drawingView.frame.size.width, self.drawingView.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), self.brush);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), self.redColour, self.greenColour, self.blueColour, OPACITY);
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
CGContextFlush(UIGraphicsGetCurrentContext());
self.drawingView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}

if (self.delegate)
{
[self.delegate drawingUpated];
}

//NSLog(@"%@ --- %@", NSStringFromCGRect(self.frame) , NSStringFromCGRect(self.drawingView.frame) );
}
}

最佳答案

事实证明这是我如何设置 self 框架的问题。 drawingView和里面图片的大小。

图像为 1005 x 720drawingView 为 1004.2 x 719.9,因此存在舍入问题。每次我画一条新线时,它都会向下舍入。

关于iOS : Drawing on a CGContext eventually blurs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282616/

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