사용자에게 현재 화면의 ScreenShot 을 만들어서 Email에 첨부하고 싶다면..
CALayer의 -renderInContext를 이용해서 화면을 그대로 이미지로 만들 수 있다.
(출처: https://developer.apple.com/library/ios/qa/qa1703/_index.html)
먼저 스크린의 크기를 가져와야 되는데, iOS4부터 Retina Display가 나오면서, Scale로 구분을 하도록 변경이 되었다. 그래서, scale을 고려해서 화면 Size를 가져와야 한다.
화면크기를 확보를 했으면, 이제 UIContextRef를 가져오고, 이미지를 읽어 온다.
Source Code
- (UIImage*)screenshot { // Create a graphics context with the target size // On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration // On iOS prior to 4, fall back to use UIGraphicsBeginImageContext CGSize imageSize = [[UIScreen mainScreen] bounds].size; if (NULL != UIGraphicsBeginImageContextWithOptions) UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); else UIGraphicsBeginImageContext(imageSize); CGContextRef context = UIGraphicsGetCurrentContext(); // Iterate over every window from back to front for (UIWindow *window in [[UIApplication sharedApplication] windows]) { if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) { // -renderInContext: renders in the coordinate space of the layer, // so we must first apply the layer's geometry to the graphics context CGContextSaveGState(context); // Center the context around the window's anchor point CGContextTranslateCTM(context, [window center].x, [window center].y); // Apply the window's transform about the anchor point CGContextConcatCTM(context, [window transform]); // Offset by the portion of the bounds left of and above the anchor point CGContextTranslateCTM(context, -[window bounds].size.width * [[window layer] anchorPoint].x, -[window bounds].size.height * [[window layer] anchorPoint].y); // Render the layer hierarchy to the current context [[window layer] renderInContext:context]; // Restore the context CGContextRestoreGState(context); } } // Retrieve the screenshot image UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }(출처: https://developer.apple.com/library/ios/qa/qa1703/_index.html)
위 함수를 이용해서 이미지를 읽어오면, 디바이스의 화면 크기에 맞는 이미지가 생성이 된다.
이것을 그대로 Email로 첨부를 하게 되면, 5.4MB정도 크기가 되어서 보내기 부담스러워 진다.
그렇게 되면 이미지의 크기를 변경해서 이미지를 표시를 하고, 그 이미지를 바탕으로 data를 가져오면 될 것이다.
큰이미지를 작은 이미지로 리사이징 하는 것은 이전 블로그(http://hidavidbae.blogspot.kr/2012/12/ios6.html)를 참고하여 주시길..
댓글 없음:
댓글 쓰기