2010-04-02 15 views
8

Tôi đã vẽ thành CGContext của UIView.Làm cách nào để lưu những gì tôi đã vẽ trong CGContext

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

Tôi muốn lưu những gì tôi đã vẽ vào tệp png.

Có giải pháp đơn giản nào không?

EDIT: Dựa trên gợi ý dưới đây - đây là những gì tôi có cho đến nay ....

-(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

có thể là một điều tốt hơn để hỏi là làm thế nào để tạo ra một bối cảnh bitmap và phát lại các bản vẽ của tôi vào đó. – sylvanaar

Trả lời

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

Tôi phải thiếu một cái gì đó đơn giản. Tôi làm điều này trong cuộc gọi drawRect. Chạy trên trình giả lập iPhone - tôi không thấy bất kỳ tệp nào được tạo. – sylvanaar

+0

Bạn có thể phải chỉ định đường dẫn đầy đủ đến thư mục Documents thay vì chỉ image.png. – indragie

+0

Tôi đã cập nhật mã ví dụ ở trên - nhưng không có tệp nào được tạo trong trình mô phỏng. Cảm ơn sự giúp đỡ của bạn. – sylvanaar

1

Gọi UIGraphicsGetImageFromCurrentImageContext để có được một UIImage.
Sau đó, gọi UIImagePNGRepresentation để nhận NSData của UIImage được mã hóa bằng PNG.
Cuối cùng, hãy gọi -writeToFile:… để lưu NSData.

6
CGImageRef imgRef = CGBitmapContextCreateImage(context); 

UIImage* img = [UIImage imageWithCGImage:imgRef]; 

CGImageRelease(imgRef); 
+1

Không chỉ đăng mã dưới dạng câu trả lời, hãy cố gắng giải thích một chút về lý do tại sao điều này sẽ hữu ích. – Dutts

Các vấn đề liên quan