指定用于图像捕获的CGRect(iPhone)

时间:2011-03-20 06:48:56

标签: iphone image ipad screen-capture

我有一些代码,我从互联网上抓取了一个屏幕截图到相机胶卷,它很棒,这里是:

 CGRect screenRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.bounds.size.width, self.view.bounds.size.height);
UIGraphicsBeginImageContext(screenRect.size);

CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);

[self.view.layer renderInContext:ctx];

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);
UIGraphicsEndImageContext();
一切都适合iPhone,但现在我正在为iPad改变一些东西,我需要捕获一个不同于整个屏幕的矩形,所以我指定了一个不同的矩形:

CGRect screenRect;
switch (runningOniPad) {
    case 0: // running on iPhone..
        screenRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.bounds.size.width, self.view.bounds.size.height);
        break;

    default: // yes, running on iPad..
        screenRect = CGRectMake(56, 478, 662, 262);

        break;
}

我在相机胶卷中得到的矩形是SIZE im指定的,但它的原点似乎是(0,0)...也许是[self.view.layer renderInContext:ctx] ;? ?

如果有人可以提供帮助我肯定会感激,非常感谢你:)。

1 个答案:

答案 0 :(得分:2)

杰夫,只是对那里发生的事情的解释:

“ctx”制作了一个“屏幕外工作区”。

将其视为记事本或草图块......

OK?

事实上,“ctx”可以让你引用那个记事本或草图块。

现在你问,草图块有多大?实际上,原始代码编写器使草图块与当前屏幕的大小相同。

请注意,名为“screenRect”的变量命名为。它应该被称为howBigWillOurSketchBlockBe。

到目前为止有道理吗?

因此,首先要完成代码并将screenRect更改为howBigWillOurSketchBlockBe。一切都完成了。

现在 - 正如您现在所看到的,您使用新代码所做的只是更改草图块的大小

有道理吗?

现在,你会看到一行“renderInContext”......它提到了第一件事,就是self.view.layer,将它呈现给你的草图块

当然,它开始使用self.view.layer的左下角。

由于你的草图块现在很小(看你的变量howBigWillOurSketchBlockBe),你会看到发生了什么!

所以要理解的重要一点是“howBigWillOurSketchBlockBe”(之前命名为“screenRect”)只是简单而且只是你设置为涂鸦的SKETCHBLOCK 的大小。

所以现在你想知道如何解决这个问题!我想你需要在这个页面上看看公鸡,

http://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_affine/dq_affine.html

应用一点变换有帮助吗? CGContextTranslateCTM ......

希望它有所帮助!