4

UIView を UIImage に変換したい

- (UIImage *)renderToImage:(UIView *)view {
  if(UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
  } else {
    UIGraphicsBeginImageContext(view.frame.size);
  }

  [view.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return image;
}

2 つの質問:

  1. ビューにサブビューがあります。サブビューなしでビューのイメージを作成する方法はありますか? 理想的には、後で追加するためだけにそれらを削除する必要はありません。

  2. また、Retina デバイスで画像を適切にレンダリングしていません。ここのアドバイスに従って、オプションでコンテキストを使用しましたが、役に立ちませんでした。Retinaディスプレイで品質を落とさずにUIViewをUIImageにキャプチャする方法

4

2 に答える 2

2

ビューのイメージになりたくないサブビューを非表示にする必要があります。以下は、Retina デバイス用のビューの画像をレンダリングするメソッドです。

- (UIImage *)imageOfView:(UIView *)view
{

  // This if-else clause used to check whether the device support retina display or not so that   
  // we can render image for both retina and non retina devices. 

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
       {
               UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
       } else {
                UIGraphicsBeginImageContext(view.bounds.size);
       }


    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}
于 2013-09-05T06:59:58.803 に答える
0
- (CGImageRef)toImageRef
{
    int width = self.frame.size.width;
    int height = self.frame.size.height;
    CGContextRef ref = CGBitmapContextCreate(NULL, width, height, 8, width*4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast);
    [self drawRect:CGRectMake(0.0, 0.0, width, height) withContext:ref];
    CGImageRef result = CGBitmapContextCreateImage(ref);
    CGContextRelease(ref);
    return result;
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    // move your drawing commands from here...
    [self drawRect:rect withContext:context];
}

- (void)drawRect:(CGRect)rect withContext:(CGContextRef)context
{
    // ...to here
}
于 2014-01-17T13:56:58.120 に答える