2012-06-05 8 views
6

Mam obraz źródłowy, który ma zmienną szerokość i wysokość, które muszę pokazać na pełnoekranowym iPhonie UIImageView, ale z dodatkiem obramowania wokół samego obrazu. Moim zadaniem jest zatem stworzenie nowego obrazu z białą obwódką wokół niego, ale nie nakładającego się na sam obraz. Jestem obecnie robi to z nałożonych przez ten kod:CoreGraphics narysować obraz na białym płótnie

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

Czy ktoś może mi powiedzieć jak mogę najpierw narysować białego płótna, który jest 40 pikseli w każdym kierunku większa niż obrazem źródłowym, a następnie narysować ten obraz na nim ?

Odpowiedz

12

Poprawiłem kod, aby działał. Zasadniczo co robi:

  1. ustawić rozmiar płótna na rozmiar obrazu 2 * marginesie
  2. Napełnić całe płótno z kolorowym tłem (białym w danym przypadku)
  3. Narysuj obraz w odpowiednim prostokącie (z pierwotnego rozmiaru i wymaganych marginesów)

Wynikowy kod jest:

- (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

Doskonałe dzięki Vlad – Eugene