2011-04-02 88 views
1

我有大小4096×4096的CATiledLayer我想渲染成PNG大小爲1024×1024渲染大CATiledLayer成更小的區域

這個心不是這樣做的?

-(NSData *)createPNGFormat 
{ 
    UIGraphicsBeginImageContext(CGSizeMake(1024, 1024)); 
    tiledLayer.transform = CATransform3DMakeScale(0.25, 0.25, 1.0); 
    [tiledLayer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return UIImagePNGRepresentation(image);  

} 

任何如何做到這一點的想法?

回答

2

[First Hack]蠻力,通過瓷磚呈現瓷磚。此作品(慢)

-(UIImage *)renderTileX:(NSInteger)xpos tileY:(NSInteger)ypos scale:(CGFloat)ascale 
{ 
    CGSize tiledsize = tiledLayer.tileSize; 
    CGRect tiledframe = tiledLayer.bounds; 
    CALayer *container = [CALayer layer]; 
    container.frame = CGRectMake(0, 0, tiledsize.width,tiledsize.height); 
    UIGraphicsBeginImageContext(tiledsize); 
    [container addSublayer:tiledLayer]; 
    tiledLayer.frame = CGRectMake(-tiledsize.width*xpos,-tiledsize.height*ypos, tiledframe.size.width, tiledframe.size.height); 
    [container renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    [tiledLayer removeFromSuperlayer]; 

    CGFloat fsize = tiledsize.width*ascale; 
    CGRect apicrect = CGRectMake(0,0,fsize,fsize); 

    UIGraphicsBeginImageContext(apicrect.size); 
    [image drawInRect:apicrect]; 
    UIImage *thumb = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return thumb; 


} 


-(UIImage *)renderTiledLayer 
{ 

    UIGraphicsBeginImageContext(CGSizeMake(1024, 1024)); 

    for (NSInteger x = 0 ; x<4; x++) { 
     for (NSInteger y = 0; y < 4; y++) { 
      NSLog(@"render %d:%d",x,y); 
      UIImage *tile = [self renderTileX:x tileY:y scale:0.25]; 
      [tile drawAtPoint:CGPointMake(x*256, y*256)]; 
     } 
    } 
    UIImage *fimage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 


    return fimage;  
} 

[使用谷歌...]更好的方法

-(UIImage *)createThumb 
{ 

    UIGraphicsBeginImageContext(CGSizeMake(1024, 1024)); 
    CGContextScaleCTM(UIGraphicsGetCurrentContext(), 0.25, 0.25); 
    [tiledLayer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *fimage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return fimage; 
}