2012-01-17 10 views
5

पर कैप्चर व्यू संदर्भ की निम्न गुणवत्ता मुझे विशिष्ट UIView कैप्चर करने की आवश्यकता है, लेकिन नतीजा कम गुणवत्ता में है और इसे कैसे ठीक किया जा सकता है?आईपैड

UIGraphicsBeginImageContext(captureView.bounds.size); 
    [captureView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil); 
    UIGraphicsEndImageContext(); 
+2

आप इसके साथ भी UIGraphicsBeginImageContextWithOptions (view.bounds.size, view.opaque, 0.0) के साथ प्रयास कर सकते हैं; –

+0

धन्यवाद लेकिन कुछ भी नहीं बदला! –

+2

जब आप "कम गुणवत्ता" कहते हैं तो आपका क्या मतलब है? छवि स्क्रीन पर क्या दिखती है उतनी ही नहीं दिखती है? क्या आप रेटिना डिस्प्ले का उपयोग कर रहे हैं लेकिन कैप्चर की गई छवि तेज नहीं है? क्या छवि दानेदार या विकृत है? इसके साथ वास्तव में क्या गलत है? – TigerCoding

उत्तर

22

मैं तुम्हें रेटिना संकल्प (960x640 या 2048x1536) में एक पर कब्जा एक UIView/UIWindow जरूरत है लगता है UIGraphicsBeginImageContextWithOptions का उपयोग करना और सेट अपने पैमाने पैरामीटर 0.0f यह देशी संकल्प में कब्जा (4 iPhone के लिए रेटिना बना देता है और बाद में या iPad 3)।

इस कोड को देशी संकल्प

CGRect rect = [captureView bounds]; 
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[captureView.layer renderInContext:context]; 
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

यह एक पूर्ण स्क्रीन (कुंजी खिड़की)

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
CGRect rect = [keyWindow bounds]; 
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[keyWindow.layer renderInContext:context]; 
UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

इस में 95% गुणवत्ता के साथ जेपीजी फार्मेट में UIImage की बचत होती है के लिए एक ही करता है में अपने UIView पर कब्जा एप्लिकेशन की दस्तावेज़ फ़ोल्डर

NSString *imagePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/capturedImage.jpg"]];  
[UIImageJPEGRepresentation(capturedImage, 0.95) writeToFile:imagePath atomically:YES]; 
+0

सही! मेरे लिए काम! – frank

1

Technical Q&A QA1703 वास्तव में एक अच्छा नमूना रखती है एक स्क्रीनशॉट बनाने के लिए कोड।

मुझे नहीं पता कि मैं इसे यहां पोस्ट कर सकता हूं लेकिन यह लिंक पर उपलब्ध है।