2012-06-26 5 views
0

Я создаю изображение, комбинируя два других изображения, используя CGContext. Даже если у меня есть изображения @ 2x, мне не удастся создать изображение сетчатки.Невозможно создать изображения Retina с CGContextDrawImage

Вот мой код. Не могли бы вы помочь?

-(UIImage*)makePinImageWithImage:(UIImage*)icon { 
UIImage * pin = [UIImage imageNamed:@"defaultPin.png"]; // I have the @2x one. 
int w = pin.size.width; 
int h = pin.size.height; 

CGRect iconRect = CGRectMake(16, 47, 24, 26); // the frame where mix icon in pin 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 8 * w, colorSpace, kCGImageAlphaPremultipliedFirst); 

// Drawing pin in context 
CGContextDrawImage(context, CGRectMake(0, 0, w, h), pin.CGImage); 
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1); 

// Drawing icon in context 
CGContextDrawImage(context, iconRect, icon.CGImage); 
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1); 

// Getting back the final image 
CGImageRef imageCG = CGBitmapContextCreateImage(context); 

CGContextRelease(context);  
CGColorSpaceRelease(colorSpace); 

UIImage * createdImage = [UIImage imageWithCGImage:imageCG]; 
CGImageRelease(imageCG); 

return createdImage; 
} 

Благодаря

ответ

0

Этот код выполняется в текстовом окне, следует более или менее делать то, что вы хотите.

(UIImage*)makePinImageWithImage:(UIImage*)icon // this code assumes this image is @2x if the device is 
{ 
    UIImage *pin = [UIImage imageNamed:@"defaultPin.png"]; // I have the @2x one. 
    CGFloat w = rintf(pin.size.width); 
    CGFloat h = rintf(pin.size.height); 

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(w, h), YES, 0); // 0 means let iOS deal with scale for you 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, h); 
    CGContextConcatCTM(context, flipVertical); 

    CGRect iconRect = CGRectMake(16, 47, 24, 26); // the frame where mix icon in pin 

    // Drawing pin in context 
    CGContextDrawImage(context, CGRectMake(0, 0, w, h), [pin CGImage]); // CGImage is a method, not a property 
    //CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1); // this does not do anything does it? You never do a FillRect... 

    // Drawing icon in context 
    CGContextDrawImage(context, iconRect, [icon CGImage]); 
    //CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1); // this does not do anything does it? You never do a FillRect... 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; // will be either normally sized or retina sized depending on environment 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^