Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to take a screenshot of a view and email it?

Can I make my app take a screenshot of the contents of a view and attach it to an email? How?

like image 693
Randall Avatar asked Jul 13 '11 20:07

Randall


3 Answers

You can convert your view to an image, then you could create an email with it.

This code (from here) will allow you to send an email with an attachment:

    - (void)emailImageWithImageData:(NSData *)data
    {
      MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
      picker.mailComposeDelegate = self;

      // Set the subject of email
      [picker setSubject:@"Picture from my iPhone!"];

      // Add email addresses
      // Notice three sections: "to" "cc" and "bcc" 
      [picker setToRecipients:[NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil]];
      [picker setCcRecipients:[NSArray arrayWithObject:@"[email protected]"]];   
      [picker setBccRecipients:[NSArray arrayWithObject:@"[email protected]"]];

      //    Fill out the email body text
      NSString *emailBody = @"I just took this picture, check it out.";

      // This is not an HTML formatted email
      [picker setMessageBody:emailBody isHTML:NO];

      // Attach image data to the email
      // 'CameraImage.png' is the file name that will be attached to the email
      [picker addAttachmentData:data mimeType:@"image/png" fileName:@"CameraImage"];

      // Show email view    
      [self presentModalViewController:picker animated:YES];
      //if you have a navigation controller: use that to present, else the user will not
      //be able to tap the send/cancel buttons
      //[self.navigationController presentModalViewController:picker animated:YES];


      // Release picker
      [picker release];
    }

    - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
     {
       // Called once the email is sent
       // Remove the email view controller  
       [self dismissModalViewControllerAnimated:YES];
     }

To convert your view graphical representation to an image, use the code (from here):

UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);

[self emailImageWithImageData:data];
like image 50
sergio Avatar answered Nov 13 '22 19:11

sergio


From this site:

 // CREATING MAIL VIEW
 MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
 controller.mailComposeDelegate = self;
 [controller setSubject:@"Check this route out"];
 [controller setMessageBody:@"Attaching a shot of covered route." isHTML:NO];

 // MAKING A SCREENSHOT
 UIGraphicsBeginImageContext(_mapView.frame.size);
 [_mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
 UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

 // ATTACHING A SCREENSHOT
 NSData *myData = UIImagePNGRepresentation(screenshot);
 [controller addAttachmentData:myData mimeType:@"image/png" fileName:@"route"]; 

 // SHOWING MAIL VIEW
 [self presentModalViewController:controller animated:YES];
 [controller release];
like image 30
highlycaffeinated Avatar answered Nov 13 '22 19:11

highlycaffeinated


Yes you can please check the below code may help you

UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* image = [GMSScreenshot screenshotOfMainScreen];
UIGraphicsEndImageContext();
data = UIImagePNGRepresentation(image);
[picker addAttachmentData:data mimeType:@"image/jpg" fileName:@"Screenshot"];
like image 1
sarit bahuguna Avatar answered Nov 13 '22 21:11

sarit bahuguna