Рисовать частичное изображение или вырезать по диагонали, используя Core Graphics - PullRequest
2 голосов
/ 24 марта 2012

Я хочу нарисовать изображение с использованием Core Graphics. Однако я могу нарисовать частичное изображение, т.е. горизонтально и вертикально. Но вместо этого я хочу, чтобы это было по диагонали. Для более подробной информации, пожалуйста, обратитесь к изображению ниже:

Реальное изображение: enter image description here

Требуется вывод изображения: enter image description here

Ниже приведен код, используемый для заполнения слоя цветом:

    CGContextRef contextRef = UIGraphicsGetCurrentContext();

    CGContextMoveToPoint(contextRef, r.origin.x, r.origin.y );
    CGContextAddLineToPoint(contextRef, r.origin.x , r.origin.y);
    CGContextAddLineToPoint(contextRef, r.origin.x + (r.size.width ), r.origin.y + (r.size.height));
    CGContextAddLineToPoint(contextRef, r.origin.x , r.origin.y + (r.size.height));
    CGContextAddLineToPoint(contextRef, r.origin.x  , r.origin.y);
    CGContextSetRGBFillColor(contextRef, [[color objectAtIndex:0]floatValue]/255.0f, [[color objectAtIndex:1]floatValue]/255.0f, [[color objectAtIndex:2]floatValue]/255.0f, .5);
    CGContextSetRGBStrokeColor(contextRef,[[color objectAtIndex:0]floatValue]/255.0f, [[color objectAtIndex:1]floatValue]/255.0f, [[color objectAtIndex:2]floatValue]/255.0f, 0.5);
    CGContextFillPath(contextRef);

Теперь я хочу нарисовать изображение на этом графическом слое, а не заполнять его цветом. У меня не было способа обрезать это изображение по диагонали, поскольку мы можем передавать только такие параметры, как Origin x, y & Size Height, Width .

Заранее спасибо.

1 Ответ

3 голосов
/ 04 апреля 2012

Вы должны иметь возможность обрезать контекст по текущему пути контекста.Все, что вы сделаете после обрезания контекста, будет видно только в этой области:

UIImage *img = ...;
CGContextRef contextRef = UIGraphicsGetCurrentContext();

CGContextMoveToPoint(contextRef, r.origin.x, r.origin.y );
CGContextAddLineToPoint(contextRef, r.origin.x , r.origin.y);
CGContextAddLineToPoint(contextRef, r.origin.x + (r.size.width ), r.origin.y + (r.size.height));
CGContextAddLineToPoint(contextRef, r.origin.x , r.origin.y + (r.size.height));
CGContextAddLineToPoint(contextRef, r.origin.x  , r.origin.y);

// clip context to current path
CGContextClip(contextRef);

// draw image
[img drawInRect:rect];

Работало ли это?

...