2011-05-21 14 views
7

मुझे पता चला कि कुछ नमूना आपको आईफोनआईफोन: छवि के रूप में दृश्य को कैसे सहेजना है ??? (ex.save जो आप आकर्षित करते हैं)

पर आकर्षित करने के लिए सिखाता है लेकिन यह नहीं कहता कि छवि के रूप में दृश्य को कैसे सहेजना है?

क्या किसी को भी विचार आया ???

या किसी भी नमूने उपयोगी होगा:)

वास्तव में, मैं एक छवि के रूप में उपयोगकर्ता के हस्ताक्षर बचाने के लिए और सर्वर पर अपलोड करने के लिए कोशिश कर रहा हूँ।

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

जहां पथ स्थान आप के लिए सहेजना चाहते है -

धन्यवाद

वेबर

उत्तर

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

इस छवि को जो आप उपयोग कर स्टोर कर सकते हैं देता है।

+0

खेद, तो आप इस कोड के बारे में और अधिक विस्तार से बता सकते हैं ... मेरे पास है इसका उपयोग करने का कोई विचार नहीं है ... –

+3

विचार इस दृश्य के लिए 'UIImage' ऑब्जेक्ट उत्पन्न करना है ताकि टी टोपी हम इसे एक छवि के रूप में सहेज सकते हैं। इसके लिए हम 'कोर ग्राफिक्स' का थोड़ा सा उपयोग करते हैं। हम दृश्य की परत लेते हैं (प्रत्येक दृश्य में एक परत होती है जो दृश्य के दृश्य पहलू का प्रतिनिधित्व करती है) और इसे एक छवि संदर्भ में खींचें (चित्र को ड्राइंग बोर्ड के रूप में कल्पना करें)। एक बार ड्राइंग समाप्त हो जाने के बाद, हम संदर्भ के 'UIImage' ऑब्जेक्ट उत्पन्न करते हैं। यह हम एक फ्रेमवर्क फ़ंक्शन 'UIImageJPEGRepresentation (छवि, 1.0)' का उपयोग करके जेपीईजी प्रतिनिधित्व में डेटा में कनवर्ट करते हैं। ध्यान दें कि '1.0' आपकी छवि की गुणवत्ता' 1.0' के साथ सबसे अच्छी –

+0

होने की गुणवत्ता है, एक बार हमारे पास 'एनएसडीटा' ऑब्जेक्ट हो जाने के बाद, हम वांछित फ़ाइल 'पथ' पर छवि को सहेजने के लिए अपनी विधि' लिखेंToFile: atomically 'का उपयोग करते हैं। आशा है कि आपको इसी की तलाश थी। –

0

MonoTouch/सी # एक विस्तार पद्धति के रूप में में:

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

यहां एक त्वरित विधि किसी भी UIView छवि के रूप में प्रस्तुत करने के लिए है। यह ध्यान में रखता है कि डिवाइस आईओएस संस्करण चालू है और UIView की छवि प्रस्तुति प्राप्त करने के लिए प्रासंगिक विधि का उपयोग करता है।

अधिक विशेष रूप से, अब आईओएस 7 या बाद के संस्करणों पर चल रहे उपकरणों पर UIView के स्क्रीनशॉट लेने के लिए बेहतर तरीका है (यानी, DrawViewHierarchyInRect: AfterScreenUpdates :), जो मैंने पढ़ा है, जिसे मैंने पढ़ा है, माना जाता है "renderInContext" विधि की तुलना में अधिक प्रदर्शन करने वाला तरीका।

अधिक यहाँ जानकारी: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW217

के उपयोग का उदाहरण:

#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. 

कोड:

#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; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे