2011-05-21 10 views
7

Bazı örnek iphoneiPhone: Bir görüntüyü görüntü olarak nasıl kaydeder ??? (ne çizdiğini ex.save)

nasıl çizileceğini öğretiyor, ancak görüntü olarak nasıl bir görünüm kaydedileceğini söylemiyor?

Hiç kimse bir fikri var mı?

Veya herhangi bir örnek yararlı olacaktır:)

aslında, bir görüntü olarak kullanıcının imzasını kaydedip sunucuya yüklemek çalışıyorum. yol, kaydetmek istediğiniz konumu

NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 
[imageData writeToFile:path atomically:YES]; 

-

Teşekkür

Webber

cevap

31
UIView *view = // your view  
UIGraphicsBeginImageContext(view.bounds.size); 
[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Bu kullandığınız saklayabilirsiniz görüntüyü verir. Uzatma yöntemi olarak MonoTouch/C#

+0

dilerim, ben ... Bu kod hakkında daha fazla ayrıntı söyleyebilir Bunu kullanmak için bir fikir yok ... –

+3

Fikir bu yüzden bir UIImage' nesnesini oluşturmak için t şapka bir görüntü olarak kaydedebiliriz. Bunun için biraz "Çekirdek Grafik" kullanıyoruz. Görüş katmanını alırız (her görünümde görüntünün görsel yönünü temsil eden bir katman vardır) ve onu bir resim bağlamına çizin (Bir çizim panosu olarak bağlamı düşünün). Çizim bittiğinde, bağlamın UIImage nesnesini oluştururuz. Bu, jpeg gösterimi içindeki bir veri fonksiyonunu 'UIImageJPEGRepresentation (image, 1.0) 'kullanarak dönüştürüyoruz. '' 1.0'ın en iyi –

+0

olmasıyla istediğiniz görüntünün kalitesidir. Bir 'NSData' nesnesine sahip olduğumuzda, 'write'Dosyası' yöntemini kullanarak' istenen dosyayı' istenen dosyaya kaydedebiliriz. Umarım aradığın şey budur. –

0

: Burada

public static UIImage ToImage(this UIView view) { 
    try { 
     UIGraphics.BeginImageContext(view.ViewForBaselineLayout.Bounds.Size); 
     view.Layer.RenderInContext(UIGraphics.GetCurrentContext()); 
     return UIGraphics.GetImageFromCurrentImageContext(); 
    } finally { 
     UIGraphics.EndImageContext(); 
    } 
} 
4

görüntü olarak herhangi UIView işlemek için hızlı bir yöntemdir. Cihazın çalıştığı iOS versiyonunu dikkate alır ve UIView'in bir görüntü temsili elde etmek için ilgili yöntemi kullanır.

Daha spesifik olarak, şimdi daha iyi yöntem (yani drawViewHierarchyInRect vardır: i okuduğunuz kitap, bir olarak kabul dan olduğu iOS 7 veya sonraki sürümleri, çalışan cihazlarda bir UIView ekran görüntüsü almaya ilişkin afterScreenUpdates :) "renderInContext" yöntemine kıyasla daha performanslı bir yol. Burada

diğer bilgiler: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW217

KULLANIM ÖRNEĞİ:

#import <QuartzCore/QuartzCore.h> // don't forget to import this framework in file header. 

UIImage* screenshotImage = [self imageFromView:self.view]; //or any view that you want to render as an image. 

KODU:

#define IS_OS_7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 

- (UIImage*)imageFromView:(UIView*)view { 

    CGFloat scale = [UIScreen mainScreen].scale; 
    UIImage *image; 

    if (IS_OS_7_OR_LATER) 
    { 
     //Optimized/fast method for rendering a UIView as image on iOS 7 and later versions. 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, scale); 
     [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; 
     image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
    else 
    { 
     //For devices running on earlier iOS versions. 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES, scale); 
     [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
    return image; 
}