0

私は自分のアプリにある小さなUIViewもののスクリーンショットを撮るこの機能を持っています、私の問題はこの画像に私の画像フォルダにある背景を追加したいということです。追加したい背景が現在のビューに表示されていません。画像を保存する前に、プログラムでスクリーンショット画像の後ろに貼り付けたいだけです。出来ますか?

(背景を含む新しいビューを作成したくないので、スクリーンショット画像を追加して、スクリーンショットをもう一度撮ります。多すぎます)

これが撮影された画像であるとしましょう:

  ______
 /      \
/        \
\        /
 \______/

そして、これは背景画像と画像を合わせたものです。

 _________________
|                 |
|     ______      |
|    /      \     |
|   /        \    |
|   \        /    |
|    \______/     |
|                 |
|_________________|

これは私のコードです:

- (void)takeScreenShotAndSaveIt:(CGPoint)center
{
    // IMPORTANT: using weak link on UIKit
    if(UIGraphicsBeginImageContextWithOptions != NULL)
    {
        UIGraphicsBeginImageContextWithOptions(smallview.frame.size, NO, 0.0);
    } else {
        UIGraphicsBeginImageContext(smallview.frame.size);
    }

    [smallview.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // Save image to iPhone documents directory
    NSData * imgData = [[NSData alloc] initWithData:UIImagePNGRepresentation(viewImage)];
    NSString * filename = [NSString stringWithFormat:@"MeasureScreenShot.png"];
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentsDirectory = [paths objectAtIndex:0];
    NSString * path = [documentsDirectory stringByAppendingPathComponent:filename];
    [imgData writeToFile:path atomically:YES];
}
4

1 に答える 1

1

私があなたがやろうとしていることを正しく理解しているなら、これを試してください:

- (void)takeScreenShotAndSaveIt:(CGPoint)center
{
  ...
  [backgroundImageView.layer renderInContext:UIGraphicsGetCurrentContext()];
  [smallview.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  ...

ここで、backgroundImageViewは背景画像を含むUIImageViewです。2つのビューを同じコンテキストでレンダリングするだけです。背景をビューではなく画像として処理したい場合は、次を使用できます。

[bckImage drawAtPoint:CGPointZero blendMode:kCGBlendModeNormal alpha:1.0];
于 2012-11-05T08:42:49.083 に答える