2012-04-04 19 views
9

मेरे ऐप में मैं एक स्क्रीनशॉट विधि का उपयोग कर रहा हूं। मेरे आईपैड 2 पर यह विधि निष्पादित करने के लिए बहुत तेज़ (लगभग 130 एमएस) है। लेकिन नए आईपैड पर (निश्चित रूप से उच्चतम रिज़ॉल्यूशन और एक ही सीपीयू के कारण) यह 700 एमएस की तरह ले रहा है! क्या मेरी विधि को अनुकूलित करने का कोई तरीका है? शायद ग्राफिक कार्ड के साथ सीधे काम करने का कोई तरीका है?आईपैड 3 धीमी स्क्रीनशॉट

- (UIImage *)image { 
CGSize imageSize = self.bounds.size; 

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale); 
else UIGraphicsBeginImageContext(imageSize); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSaveGState(context); 
CGContextTranslateCTM(context, [self center].x, [self center].y); 
CGContextConcatCTM(context, [self transform]); 
CGContextTranslateCTM(context, -[self bounds].size.width * [[self layer] anchorPoint].x, -[self bounds].size.height * [[self layer] anchorPoint].y); 
[[self layer] renderInContext:context]; 
CGContextRestoreGState(context); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return image; 

}

आपकी मदद के लिए धन्यवाद:

यहाँ मेरी स्क्रीनशॉट विधि है।

+0

यहां आपकी सहायता नहीं कर सकता। लेकिन मुझे लगता है कि 700 एमएमएस वास्तव में धीमा है। यह 130ms * 4 = 520ms की तरह नहीं होना चाहिए? –

+0

'UIGraphicsBeginImageContextWithOptions (imageSize, NO, 0.0f) का उपयोग करने का प्रयास करें;' 'UIGraphicsBeginImageContextWithOptions (छवि आकार, नहीं, [यूआईस्क्रीन मुख्यस्क्रीन]। स्केल) के बजाय ''। यह 1: 1 स्क्रीनशॉट के लिए बना देगा। या क्या वहां एक विशिष्ट कारण है जिसे आपको '[यूआईस्क्रीन मुख्यस्क्रीन]' स्केल 'की आवश्यकता है? –

+0

@ जेनॉक्स हाँ यह निर्भर करता है लेकिन यह 700ms की तरह है। – Pierre

उत्तर

3

मुझे लगता है कि यह पॉडकास्ट पर इस मुद्दे के बारे में बात करते हुए फ्लिपबोर्ड का डेवलपर था। यह आईपैड 3 के साथ एक वास्तविक मुद्दा है, क्योंकि उन्होंने पिक्सेल चौगुनी कर दी है।

वह क्या कर रहा था पृष्ठभूमि में समय से पहले स्क्रीनशॉट ले रहा था, न कि जब उपयोगकर्ता ने कार्रवाई शुरू की - उसके मामले में जब उपयोगकर्ता पृष्ठ को "फ़्लिप" करता था।

मुझे नहीं पता कि इससे आपके मामले में आपकी मदद मिलेगी, लेकिन यह निश्चित रूप से कई मामलों के लिए एक व्यवहार्य दृष्टिकोण है।

0

यह आपके एप्लिकेशन के लिए पर्याप्त हो सकता है या नहीं भी हो सकता है लेकिन एक विकल्प स्क्रीनशॉट को स्केल करना है, उदाहरण के लिए पर आपके स्केल फैक्टर के रूप में 0.5 पास करें UIGraphicsBeginImageContextWithOptions। 4x तेज लेकिन ट्रेडऑफ विस्तार/संकल्प का नुकसान है।

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