2010-04-02 62 views
8

我已經繪製成UIView的CGContext。如何保存我在CGContext中繪製的內容

- (void)drawRect:(CGRect)rect { 
    [self drawInContext:UIGraphicsGetCurrentContext()] 
} 

我想保存我畫的一個PNG文件。

有沒有簡單的解決方案?

編輯:基於下面的建議 - 這是我到目前爲止....

-(void)createImage { 
    NSString* outFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.png"]; 
    DLog(@"creating image file at %@", outFile); 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    NSData *imageData = UIImagePNGRepresentation(image); 
    [imageData writeToFile:outFile 
       atomically:NO]; 
} 

- (void)drawRect:(CGRect)rect { 
    [self drawInContext:UIGraphicsGetCurrentContext()]; 
    [self createImage]; 
} 
+0

也許更好的東西,要求的是如何創建位圖背景和重播我的畫成。 – sylvanaar 2010-04-02 18:56:55

回答

6
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
NSData *imageData = UIImagePNGRepresentation(image); 
[imageData writeToFile:@"image.png"]; 
+0

我必須缺少一些簡單的東西。我在drawRect調用中這樣做。在iPhone模擬器上運行 - 我沒有看到任何創建的文件。 – sylvanaar 2010-04-02 19:33:52

+0

您可能必須指定Documents目錄的完整路徑,而不僅僅指定image.png。 – indragie 2010-04-02 20:59:56

+0

我更新了上面的示例代碼 - 但沒有在模擬器中創建文件。感謝您的幫助。 – sylvanaar 2010-04-03 04:44:57

1

呼叫UIGraphicsGetImageFromCurrentImageContext得到一個UIImage的。
然後調用UIImagePNGRepresentation來獲取在PNG中編碼的UIImage的NSData。
最後,調用-writeToFile:…來保存NSData。

6
CGImageRef imgRef = CGBitmapContextCreateImage(context); 

UIImage* img = [UIImage imageWithCGImage:imgRef]; 

CGImageRelease(imgRef); 
+1

不要只是發佈代碼作爲答案,試着給它一些解釋,爲什麼這會有所幫助。 – Dutts 2013-02-22 09:19:17