1

I am having problem in taking a screenshot with specific area. I have a tabbar at the bottom and a toolbar at the top. I would like to take a screenshot of the screen between those two bars. Below is my code. How can i improve my code to crop out the bars?

Thanks

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(); UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil); 
1

2 Answers 2

3

I suppose you could try cropping out the part you need after creating the final UIImage.

CGRect contentRectToCrop = CGRectMake(0, 44, 320, 392); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], contentRectToCrop); UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks, sounds good, but where can i place this code? I tried to put in before the saving method, but seems does not work.
Try replacing the single line UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); in your code with this block and be sure to pass 'croppedImage' instead of 'image' to the UIImageWriteToSavedPhotosAlbum method.
For retina image cropping, you need to add scaling factor to contentRectToCrop
0

Untested sugestion:

imageSize.origin.y+=44; //toolbar size imageSize.size.height-=88; //tabbar+toolbar size 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.