2012-10-28 171 views
2

我有以下代码来获取屏幕截图。我特别不使用UIGraphicsBeginImageContext,因为之前我发现这个使用非常多的内存:CGContext错误/警告

CGSize size = activeView.frame.size; 

    NSUInteger width = size.width; 
    NSUInteger height = size.height; 

    NSLog(@"BEFORE"); 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    unsigned char *rawData = malloc(height * width * 4); 
    memset(rawData,0,height * width * 4); 

    NSUInteger bytesPerPixel = 4; 
    NSUInteger bytesPerRow = bytesPerPixel * width; 
    NSUInteger bitsPerComponent = 8; 
    CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

    CGRect bounds; 
    bounds.origin = CGPointMake(0,0); 
    bounds.size = size; 

    CGContextDrawImage(context, CGRectMake(0, 0, size.width, size.height), [self.topimage CGImage]); 
    CGContextDrawImage(context, CGRectMake(0, 0, size.width, size.height), [bottomimage CGImage]); 

    CGImageRef imageRef = CGBitmapContextCreateImage(context); 
    UIImage *latest = [UIImage imageWithCGImage:imageRef scale:0.0 orientation:UIImageOrientationDownMirrored]; 

    [activeView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

    CGImageRef imageRef2 = CGBitmapContextCreateImage(context); 
    UIImage *latest2 = [UIImage imageWithCGImage:imageRef2 scale:0.0 orientation:UIImageOrientationDownMirrored]; 

    CGContextRelease(context); 
    CGImageRelease(imageRef); 
    CGImageRelease(imageRef2); 

    NSLog(@"AFTER"); 

在“之前”之间“之后” NSLogs,这些错误/警告显示:

<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextSetAlpha: invalid context 0x0 
<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextSetFillColorWithColor: invalid context 0x0 
<Error>: CGContextAddRect: invalid context 0x0 
<Error>: CGContextDrawPath: invalid context 0x0 
<Error>: CGContextRestoreGState: invalid context 0x0 
<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextGetBaseCTM: invalid context 0x0 
<Error>: CGContextConcatCTM: invalid context 0x0 
<Error>: CGContextSetBaseCTM: invalid context 0x0 
<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextClipToRect: invalid context 0x0 
<Error>: CGContextSetAlpha: invalid context 0x0 
<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextSetFillColorWithColor: invalid context 0x0 
<Error>: CGContextAddRect: invalid context 0x0 
<Error>: CGContextDrawPath: invalid context 0x0 
<Error>: CGContextRestoreGState: invalid context 0x0 
<Error>: CGContextSaveGState: invalid context 0x0 
<Error>: CGContextConcatCTM: invalid context 0x0 
<Error>: CGContextConcatCTM: invalid context 0x0 
<Error>: CGContextClipToRect: invalid context 0x0 
<Error>: CGContextDrawImage: invalid context 0x0 
<Error>: CGContextRestoreGState: invalid context 0x0 
<Error>: CGContextRestoreGState: invalid context 0x0 
<Error>: CGContextSetBaseCTM: invalid context 0x0 
<Error>: CGContextRestoreGState: invalid context 0x0 

这是怎么发生的?

+1

你没有设置图形上下文,你想知道为什么它告诉你,你有一个无效的上下文? – user1118321

+8

非常粗鲁... –

回答

6

[activeView.layer renderInContext:UIGraphicsGetCurrentContext()];

此行是问题......你有没有“当前”的环境。改为使用context

-1

这是与iOS simuator问题。(苹果的这个bug的工作)

转到iOS的Simulator->重置内容和设置

清理项目,然后再次运行它。我的问题解决了。一切都会恢复正常。