2010-04-02 8 views
8

Wciągnąłem CGContext z UIView.Jak zaoszczędzić to, co rysowałem w CGContext

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

Chciałbym zapisać to, co narysowałem, do pliku PNG.

Czy istnieje proste rozwiązanie?

EDIT: W oparciu o sugestie poniżej - oto co mam tak daleko ....

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

może lepszym rozwiązaniem jest poprosić o jak stworzyć kontekst bitmapy i odtworzyć swoje rysunki do tego. – sylvanaar

Odpowiedz

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

Muszę zabraknąć czegoś prostego. Robię to w ramach wywołania drawRect. Działa na symulatorze iPhone'a - nie widzę żadnego utworzonego pliku. – sylvanaar

+0

Być może trzeba będzie podać pełną ścieżkę do katalogu Dokumenty, a nie tylko image.png. – indragie

+0

Zaktualizowałem mój przykładowy kod powyżej - ale w emulatorze nie utworzono pliku. Dzięki za pomoc. – sylvanaar

1

połączeń UIGraphicsGetImageFromCurrentImageContext uzyskać UIImage.
Następnie wywołaj UIImagePNGRepresentation, aby pobrać NSData z UIImage zakodowanego w PNG.
Na koniec zadzwoń pod numer -writeToFile:…, aby zapisać NSData.

6
CGImageRef imgRef = CGBitmapContextCreateImage(context); 

UIImage* img = [UIImage imageWithCGImage:imgRef]; 

CGImageRelease(imgRef); 
+1

Nie umieszczaj kodu jako odpowiedzi, spróbuj wyjaśnić, dlaczego to pomoże. – Dutts