2012-06-05 15 views
6

Tengo una imagen de origen que tiene un ancho y alto variables, que debo mostrar en un iPad a pantalla completa UIImageView pero con bordes adicionales alrededor de la imagen. Por lo tanto, mi tarea es crear una nueva imagen con un borde blanco alrededor, pero no superposición en la imagen misma. Actualmente lo estoy haciendo con la superposición a través de este código:CoreGraphics dibujar una imagen en un lienzo en blanco

- (UIImage*)imageWithBorderFromImage:(UIImage*)source 
{ 
    CGSize size = [source size]; 
    UIGraphicsBeginImageContext(size); 
    CGRect rect = CGRectMake(0, 0, size.width, size.height); 
    [source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
    CGContextSetLineWidth(context, 40.0); 
    CGContextStrokeRect(context, rect); 
    UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return testImg; 
} 

Puede alguien decirme cómo puedo Primero dibuja un lienzo en blanco que es 40 píxeles más grandes en cada dirección de la imagen de origen y luego dibujar esa imagen en ella ?

Respuesta

12

Ajusté su código para que funcione. Básicamente lo que hace:

  1. Conjunto tamaño del lienzo al tamaño de su imagen + 2 * márgenes
  2. llenar todo el lienzo con el color de fondo (blanco en su caso)
  3. Dibuje su imagen en el rectángulo apropiado (con tamaño inicial y los márgenes requeridos)

código resultante es:

- (UIImage*)imageWithBorderFromImage:(UIImage*)source 
{ 
    const CGFloat margin = 40.0f; 
    CGSize size = CGSizeMake([source size].width + 2*margin, [source size].height + 2*margin); 
    UIGraphicsBeginImageContext(size); 

    [[UIColor whiteColor] setFill]; 
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, size.width, size.height)] fill]; 

    CGRect rect = CGRectMake(margin, margin, size.width-2*margin, size.height-2*margin); 
    [source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0]; 

    UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return testImg; 
} 
+0

Excelente, gracias Vlad – Eugene

Cuestiones relacionadas