Как определить местоположение каждого пикселя в квадрате, нарисованном с помощью Core Graphics? - PullRequest
0 голосов
/ 13 января 2010

Я пытаюсь получить каждую точку пиксела квадрата, нарисованного с помощью графических объектов Core. Вот, сделав цвет обводки черным, я рисую квадрат. Пожалуйста, дайте мне представление, как я получу все точки пикселя, на которых этот квадрат нарисовано.

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

Ответы [ 2 ]

5 голосов
/ 13 января 2010

Почему вы делаете всю эту работу вместо того, чтобы просто использовать 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);

Кроме того, никогда отправить -setNeedsDisplay в рамках вашего -drawRect: метода. Вы получите бесконечный цикл.

1 голос
/ 23 июля 2012

Мне нужно было сделать что-то похожее для моего приложения для iPhone, и, хотя я понимаю, что уже немного поздно, я все равно решил ответить.

Сначала инициализируйте изменяемый массив (точки).

Далее найдите минимальные координаты X и Y для вашего CGRect. Сделайте то же самое для максимума.

Найдите разницу между минимумом и максимумом.

Теперь создайте цикл for, как показано ниже:

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

Теперь вы можете получить доступ к своим точкам через массив точек.

...