分享高分辨率图像

时间:2013-07-26 04:17:47

标签: objective-c uiimageview uiimage scale uiactivityviewcontroller

这是我的代码:

 - (void)shareButtonTapped
 {
    CGSize newImageSize = CGSizeMake(850.0, 850.0);
    UIGraphicsBeginImageContextWithOptions(newImageSize, YES, _aImageView.image.scale);
    [self.aImageView.layer renderInContext:UIGraphicsGetCurrentContext()];
    [self.aImageView.image drawInRect:CGRectMake(0, 0, newImageSize.width, newImageSize.height)];
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // UIActivityViewController code here
 }

现在,如果我点击“邮件”按钮,例如,图像是newImageSize,但我的_aImageView.image仅显示在左上角,而图像的其余部分是纯黑色。

如何编辑此代码以将图像缩放到850 x 850或高分辨率尺寸,以便在通过电子邮件或社交媒体分享时看起来很清晰?

谢谢!

编辑 *

仍然卡住了。我觉得我快到了。

这是我的新代码:

 - (void)shareButtonTapped
 {
       _topBarImageView.hidden = YES;
       _bottomBarImageView.hidden = YES;

       CGSize newImageSize = CGSizeMake(600.0, 600.0);
       UIGraphicsBeginImageContextWithOptions(newImageSize, YES, _aImageView.image.scale);
       [_aImageView.layer = renderInContext:UIGraphicsGetCurrentContext()];
       [_aLabel drawTextInRect:CGRectMake(20, 250, 280, 140)];
       UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
       UIImage * newImage = [UIImage imageWithImage:image scaledToSize:newImageSize];
       UIGraphicsEndImageContext();

       _topBarImageView.hidden = NO;
       _bottomBarImageView.hidden = NO;

       // Share Code
 }

所以我隐藏了这个屏幕上的几个自定义imageView。我唯一想要分享的是aImageView和aLabel。

现在,当我打开我的电子邮件时,我可以看到newImageSize,但是大部分的盒子仍然是黑色的。我仍然无法弄清楚我错过了什么。

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

+ (UIImage*)imageWithImage:(UIImage*)image 
               scaledToSize:(CGSize)newSize;
{
   UIGraphicsBeginImageContext( newSize );
   [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
   UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return newImage;
}

将新尺寸指定为(850,850)并传递原始图像,但请确保原始图像的高度和宽度比率与转换后的图像比率相同。

希望它对你有用。谢谢

编辑:

要捕获视图的屏幕截图,请按照以下代码进行操作:

- (UIImage*)captureView:(UIView *)yourView {
    CGRect rect = [[UIScreen mainScreen] bounds];
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [yourView.layer renderInContext:context];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}