2017-02-14 17 views
0

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

CIImage *overlay = [CIImage imageWithColor:[CIColor colorWithRed:0 green:1 blue:0 alpha:0.6]]; 
overlay = [overlay imageByCroppingToRect:image.extent]; 
overlay = [overlay imageByApplyingFilter:@"CIPerspectiveTransformWithExtent" withInputParameters:@{@"inputExtent":[CIVector vectorWithCGRect:image.extent],@"inputTopLeft":[CIVector vectorWithCGPoint:topLeft],@"inputTopRight":[CIVector vectorWithCGPoint:topRight],@"inputBottomLeft":[CIVector vectorWithCGPoint:bottomLeft],@"inputBottomRight":[CIVector vectorWithCGPoint:bottomRight]}]; 

return [overlay imageByCompositingOverImage:image]; 
+0

Его звук, как это http://stackoverflow.com/questions/11278647/add-solid- color-border-with-ciimage нажмите на эту ссылку. –

ответ

0

Вы можете использовать эти методы:

- (UIImage *)addBorderToImage:(UIImage *)image { 
    CGImageRef bgimage = [image CGImage]; 
    float width = CGImageGetWidth(bgimage); 
    float height = CGImageGetHeight(bgimage); 

     // Create a temporary texture data buffer 
    void *data = malloc(width * height * 4); 

    // Draw image to buffer 
    CGContextRef ctx = CGBitmapContextCreate(data, 
               width, 
               height, 
               8, 
               width * 4, 
               CGImageGetColorSpace(image.CGImage), 
               kCGImageAlphaPremultipliedLast); 
    CGContextDrawImage(ctx, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), bgimage); 

    //Set the stroke (pen) color 
    CGContextSetStrokeColorWithColor(ctx, [UIColor greenColor].CGColor); 

    //Set the width of the pen mark 
    CGFloat borderWidth = (float)width*0.05; 
    CGContextSetLineWidth(ctx, borderWidth); 

    //Start at 0,0 and draw a square 
    CGContextMoveToPoint(ctx, 0.0, 0.0);  
    CGContextAddLineToPoint(ctx, 0.0, height); 
    CGContextAddLineToPoint(ctx, width, height); 
    CGContextAddLineToPoint(ctx, width, 0.0); 
    CGContextAddLineToPoint(ctx, 0.0, 0.0); 

    //Draw it 
    CGContextStrokePath(ctx); 

     // write it to a new image 
    CGImageRef cgimage = CGBitmapContextCreateImage(ctx); 
    UIImage *newImage = [UIImage imageWithCGImage:cgimage]; 
    CFRelease(cgimage); 
    CGContextRelease(ctx); 

     // auto-released 
    return newImage; 
} 

Вызывать этот метод:

UIImage *updatedIMG = [self addBorderToImage:[[UIImage alloc] initWithCIImage:overlay]] 
+0

Он падает на CFRelease (cgimage); –