菜鸟教程小白 发表于 2022-12-13 10:15:42

iOS : Drawing on a CGContext eventually blurs


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

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

<p>线条慢慢模糊。</p>

<p>这是我的触摸代码,我使用 <strong>kCGBlendModeCopy</strong> 作为混合模式,但使用了 <strong>kCGBlendModeNormal</strong>。 DrawingView 是一个 UIImageView。</p>

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

<pre><code>- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    mouseSwiped = NO;

    if ( self.drawingEnabled )
    {
      UITouch *touch = ;
      lastPoint = ;

      UIGraphicsBeginImageContext(self.drawingView.frame.size);
      ;
    }
}

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

    if ( self.drawingEnabled )
    {
      mouseSwiped = YES;
      UITouch *touch = ;

      CGPoint currentPoint = ;

      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
{


    ;

    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);
            ;
            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)
      {
            ;
      }

      //NSLog(@&#34;%@---%@&#34;, NSStringFromCGRect(self.frame) , NSStringFromCGRect(self.drawingView.frame) );
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这原来是我如何设置 self 框架的问题。 drawingView 和里面的图片大小。</p>

<p>图像是 1005 x 720
drawingView 为 1004.2 x 719.9,因此存在舍入问题。每次我画一条新线,它都会向下舍入。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS : Drawing on a CGContext eventually blurs,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28282616/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28282616/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS : Drawing on a CGContext eventually blurs