मैं पृष्ठभूमि सेवा से एक स्क्रीनशॉट कैप्चर करना चाहता हूं। निजी एपीआई ठीक है क्योंकि मुझे ऐप स्टोर में जमा करने की आवश्यकता नहीं है। मैंने पहले से ही UIGetScreenImage की कोशिश की है और यह पृष्ठभूमि ऐप से काम नहीं करता है।आईओएसयूफ़ेस - आईओएस प्राइवेट एपीआई - पृष्ठभूमि में स्क्रीनशॉट कैप्चर करें
मैं निम्नलिखित कोड का उपयोग कर रहा हूं जो मुझे एसओ से मिला है। IOSurfaceCreate मेरे लिए शून्य वापस आती है। किसी भी मदद की सराहना की।
CFMutableDictionaryRef dict;
IOSurfaceRef screenSurface = NULL;
char pixelFormat[4] = {'A','R','G','B'};
dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
uint32_t width ;
uint32_t height;
void *pitch;
void *bPE;
void *size;
CFDictionarySetValue(dict, kIOSurfaceIsGlobal, kCFBooleanTrue);
CFDictionarySetValue(dict, kIOSurfaceBytesPerRow, CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &pitch));
CFDictionarySetValue(dict, kIOSurfaceBytesPerElement, CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &bPE));
CFDictionarySetValue(dict, kIOSurfaceWidth, CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &width));
CFDictionarySetValue(dict, kIOSurfaceHeight, CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &height));
CFDictionarySetValue(dict, kIOSurfacePixelFormat, CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, pixelFormat));
CFDictionarySetValue(dict, kIOSurfaceAllocSize, CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &size));
IOSurfaceRef destSurf = IOSurfaceCreate(dict);
IOSurfaceAcceleratorRef outAcc;
IOSurfaceAcceleratorCreate(NULL, 0, &outAcc);
CFDictionaryRef ed = (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: nil];
IOSurfaceAcceleratorTransferSurface(outAcc, screenSurface, destSurf, ed, NULL);
uint32_t aseed;
IOSurfaceUnlock(screenSurface, kIOSurfaceLockReadOnly, &aseed);
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, IOSurfaceGetBaseAddress(destSurf), (width*height*4), NULL);
CGImageRef cgImage=CGImageCreate(width, height, 8, 8*4, IOSurfaceGetBytesPerRow(destSurf), CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little, provider, NULL, YES, kCGRenderingIntentDefault);
UIImage *image = [UIImage imageWithCGImage: cgImage];
UIImageWriteToSavedPhotosAlbum(image, self_object, nil, nil);
CGImageRelease(cgImage);
CFRelease(destSurf);
क्या आपको यह आईओएस 7 पर काम करना पड़ा? मुझे IOMobileFramebufferOpen पर एक लिंकर त्रुटि मिल रही है। क्या आप कृपया साझा कर सकते हैं कि कौन से ढांचे/lib वास्तव में लिंक करने के लिए और आपने हेडर को कहाँ पकड़ लिया? – Frank
त्रुटियों को हटाने के लिए इस टर्मिनल cmd को जोड़ने के साथ आईओएसयूफ़ेस > सीडी/एप्लीकेशन/एक्सकोड.एप/सामग्री/डेवलपर/प्लेटफार्म/आईफोनओएस/प्लेटफार्म/डेवलपर/एसडीके/आईफोनओएस 7.0.sdk/सिस्टम/लाइब्रेरी/फ्रेमवर्क/आईओकिट से त्रुटियों को हटाने के लिए। ढांचा > सुडो एलएन-संस्करण/ए/आईओकिट – HDNZ
क्या किसी के पास आईओएस 8 के लिए एक कामकाजी डेमो प्रोजेक्ट है? या मुझे बता सकता है कि इस ढांचे का उपयोग कैसे करें/हेडर की पकड़ कैसे प्राप्त करें? – Max