2012-08-14 21 views
6

मैं जानना चाहता हूं कि छवि को देखने के लिए कोई तरीका है? बस एक स्क्रीनशॉट की तरह, लेकिन मैं उस विधि को कोई भी दृश्य निर्दिष्ट कर सकता हूं। मुझे पता है कि आईओएस में इसे कैसे किया जाए। Saving view content, लेकिन मैं इसे मैक ओएस में कैसे कर सकता हूं?कोको: छवि को देखने के लिए कैसे प्रस्तुत करें?

उत्तर

13

कई तरीके हैं, लेकिन उनमें से कोई भी सही काम नहीं करता है। परत समर्थित बैक वाले दृश्यों से कई समस्याएं जुड़ी हैं।

यदि आप परत समर्थन या होस्टिंग विचारों की जरूरत नहीं है आप इस कोड का उपयोग कर सकते हैं:

NSData* data = [mainView dataWithPDFInsideRect:[mainView bounds]]; 
    NSImage *img = [[NSImage alloc] initWithData:data]; 

यदि आप परत आधारित विचारों के साथ काम करते हैं:

10.8 तक मेरे लिए सबसे अच्छा तरीका है

था
 NSSize mySize = mapImage.bounds.size; 
     NSSize imgSize = NSMakeSize(mySize.width, mySize.height); 
     NSBitmapImageRep *bir = [mapImage bitmapImageRepForCachingDisplayInRect:[mapImage bounds]]; 
     [bir setSize:imgSize]; 
     [mapImage cacheDisplayInRect:[mapImage bounds] toBitmapImageRep:bir]; 
     caheImg = [[NSImage alloc]initWithSize:imgSize]; 
     [caheImg addRepresentation:bir]; 

लेकिन 10.8 bitmapImageRepForCachingDisplayInRect में परत समर्थित विचारों के साथ काम करना बंद कर दिया।

+ (NSImage*) screenCacheImageForView:(NSView*)aView 
{ 
    NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]]; 

    NSRect rect = originRect; 
    rect.origin.y = 0; 
    rect.origin.x += [aView window].frame.origin.x; 
    rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height; 
    rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height; 

    CGImageRef cgimg = CGWindowListCreateImage(rect, 
              kCGWindowListOptionIncludingWindow, 
              (CGWindowID)[[aView window] windowNumber], 
              kCGWindowImageDefault); 
    return [[NSImage alloc] initWithCGImage:cgimg size:[aView bounds].size]; 
} 
+0

+1 पूरी तरह उत्तर – Vervious

+0

आपको बहुत धन्यवाद !!! – NOrder

+0

bitmapImageRepForCachingDisplayInRect के साथ आपका संस्करण एक परत समर्थित दृश्य के लिए 10.7 पर मेरे लिए ठीक काम करता है और मैंने 10.8 के लिए अपनी स्क्रीन कैश इमेज फॉरव्यू जोड़ा - कुछ दिनों से 10.8.3 तक अपग्रेड किया गया, लेकिन स्क्रीन कैश इमेजफोर व्यू मेरे दृश्य में समस्याएं उत्पन्न करता है (जिसमें शीर्ष पर 2 अतिरिक्त एनएसटीक्स्टफ़िल्फ़ लेबल हैं और दृश्य के स्क्रीन शॉट में गलती से शामिल)। लेकिन: 10.8.3 पर बिटमैप ImageRepForCachingDisplayInRect ठीक काम करता है - क्या यह 10.8.3 से पहले नहीं था? – konran

1

मैं अपने ऐप है, जो अच्छा काम करता है में इस कोड का उपयोग कर रहा:

अपनी स्क्रीन के एक स्क्रीनशॉट बनाने के लिए और आपके विचार काट के लिए एक विकल्प नहीं है।

हालांकि, यदि मैं ऐप को द्वितीयक मॉनीटर पर खींचता हूं तो स्क्रीन कैप्चर फेंक दिया जाता है और मुझे गलत आयत मिल जाती है।

निम्नलिखित कोड को ठीक करता है कि इस मुद्दे को मामले में किसी को भी भविष्य में इस भर आता है (मैं भी गणना से कुछ बेमानी गणित, जहां एक क्षेत्र घटाया जा रहा था और उसके बाद जोड़ा हटा दिया है):

NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]]; 

NSArray *screens = [NSScreen screens]; 
NSScreen *primaryScreen = [screens objectAtIndex:0]; 

NSRect rect = originRect; 
rect.origin.y = 0; 
rect.origin.x += [aView window].frame.origin.x; 
rect.origin.y = primaryScreen.frame.size.height - [aView window].frame.origin.y - originRect.origin.y - originRect.size.height; 
संबंधित मुद्दे