2012-11-27 43 views
0
-(CGImageRef)drawing{ 

CGContextRef context; 
GLubyte   *bitmapData; 
size_t   width, height; 

width=super.size.width; 
height=super.size.height; 

bitmapData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte)); 

context = CGBitmapContextCreate(bitmapData, width, height, 8, width * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast); 

if (context==NULL){ 
    NSLog(@"context not created?! (o_*) "); 
} 

free(bitmapData); 


CGContextSetRGBFillColor (context, 1, 0, 0, 1); 
CGContextFillRect (context, CGRectMake (0, 0, 200, 100)); 
CGContextSetRGBFillColor (context, 0, 0, 1, .5); 
CGContextFillRect (context, CGRectMake (0, 0, 100, 200)); 




CGImageRef myImage = CGBitmapContextCreateImage (context); 

CGContextRelease(context); 

return myImage; 

} 

所以我想呈現的背景下,抽出屏幕,然後把它作爲一個CGImageRef但由於某些原因上下文始終是NULL,當我閱讀應用程序崩潰的圖像輸出。CGContextRef無法創建

有人可以解釋這裏發生了什麼和/或指向我的一個例子,在這裏工作。

+0

控制檯中是否有任何東西?可能有關於嘗試創建上下文的錯誤的消息。 – rmaddy

+0

@rmaddy僅限於 CGContextSetRGBFillColor:無效的上下文0x0但應該在那裏,因爲上下文爲空。除此之外沒有什麼......這就是我困惑的原因 – skytz

+0

嘗試用'CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)'替換你的色彩空間。順便說一句 - 你需要釋放色彩空間。 – rmaddy

回答

0

我不知道爲什麼上下文爲空 - 寬度爲&高度可能很差。

但是......

  1. 你使用它之前你釋放位圖!
  2. 您不能釋放您創建的顏色空間。

在Quartz 2D Programming Guide中有一個使用CGBitmapContextCreate的例子。

+0

它實際上是寬度和高度..但是對於一個愚蠢的原因。寬度和高度穿着CGFloats,當我將它們傳遞給CGBitmapContextCreate時,它崩潰了..但是當我輸入到int時它工作。如果你將float傳遞給int,那麼它不應該被讀爲int嗎?或者我的大學多年沒有穿什麼? – skytz