【问题标题】:How do I determine the location of each pixel in a square drawn via Core Graphics?如何确定通过 Core Graphics 绘制的正方形中每个像素的位置?
【发布时间】:2010-01-13 13:06:57
【问题描述】:

我正在尝试使用核心图形绘制正方形的每个像素点。这里通过将笔触颜色设为黑色,我正在绘制正方形。请告诉我如何获取该正方形上的所有像素点画出来了。

- (void)drawRect:(CGRect)rect 
{
    CGMutablePathRef path = CGPathCreateMutable(); 
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGPathMoveToPoint(path, NULL, 30.0f, 30.0f);
    CGPathAddLineToPoint(path, NULL, 130.0f, 30.0f);
    CGPathAddLineToPoint(path, NULL, 130.0f, 130.0f);
    CGPathAddLineToPoint(path, NULL, 30.0f, 130.0f);
    CGPathCloseSubpath(path);
    CGPathRetain(path);
    CGContextSetFillColorWithColor(ctx, [UIColor clearColor].CGColor); 
    CGContextSetStrokeColorWithColor(ctx,[UIColor blackColor].CGColor);
    CGContextSetLineWidth(ctx, 2.0);
    CGContextSaveGState(ctx);
    CGContextAddPath(ctx, path); 

    CGContextRestoreGState(ctx);
    CGContextStrokePath(ctx);
    CGContextRestoreGState(ctx);

    CGContextRestoreGState(ctx);
    [self setNeedsDisplay];
    CGPathRelease(path);
}

【问题讨论】:

  • 这是一个技巧问题吗?我想说的是,这些点是 (30,30)、(130, 30)、(130, 130) 和 (30, 130)。我错过了什么吗?请详细说明您的意思。

标签: iphone cocoa cocoa-touch core-graphics


【解决方案1】:

您为什么要做所有这些工作而不是只使用CGContextFillRect()CGContextStrokeRect()

上面的代码可以简化为:

CGRect r = CGRectMake(30.0, 30.0, 100.0, 100.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, CGColorGetConstantColor(kCGColorClear));
CGContextFillRect(ctx, r);
CGContextSetLineWidth(ctx, 2.0);
CGContextSetStrokeColorWithColor(ctx, CGColorGetConstantColor(kCGColorBlack));
CGContextStrokeRect(ctx, r);

另外,从不在您的 -drawRect: 方法中发送 -setNeedsDisplay。你会得到一个无限循环。

【讨论】:

    【解决方案2】:

    我需要为我的 iPhone 应用程序做类似的事情,虽然我意识到这有点晚了,但我还是决定做出回应。

    首先,初始化一个可变数组(点)。

    接下来,找到 CGRect 的最小 X 和 Y 坐标。 对最大值执行相同操作。

    找出最小值和最大值之间的差异。

    现在,创建一个如下所示的 for 循环:

    for(int x = minX; x<diffX+minX; x++){
        for(int y = minY; y<diffY+minY; y++){
            [points addObject:[NSValue valueWithCGPoint:CGPointMake(x,y)]];
        }
    }
    

    您现在可以通过 points 数组访问您的积分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多