我有一些代码,我从互联网上抓取了一个屏幕截图到相机胶卷,它很棒,这里是:
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] ;? ?
如果有人可以提供帮助我肯定会感激,非常感谢你:)。
答案 0 :(得分:2)
杰夫,只是对那里发生的事情的解释:
“ctx”制作了一个“屏幕外工作区”。
OK?
事实上,“ctx”可以让你引用那个记事本或草图块。
现在你问,草图块有多大?实际上,原始代码编写器使草图块与当前屏幕的大小相同。
请注意,名为“screenRect”的变量命名为。它应该被称为howBigWillOurSketchBlockBe。
到目前为止有道理吗?
因此,首先要完成代码并将screenRect更改为howBigWillOurSketchBlockBe。一切都完成了。
现在 - 正如您现在所看到的,您使用新代码所做的只是更改草图块的大小。
有道理吗?
现在,你会看到一行“renderInContext”......它提到了第一件事,就是self.view.layer,将它呈现给你的草图块。
当然,它开始使用self.view.layer的左下角。
由于你的草图块现在很小(看你的变量howBigWillOurSketchBlockBe),你会看到发生了什么!
所以要理解的重要一点是“howBigWillOurSketchBlockBe”(之前命名为“screenRect”)只是简单而且只是你设置为涂鸦的SKETCHBLOCK 的大小。
所以现在你想知道如何解决这个问题!我想你需要在这个页面上看看公鸡,
应用一点变换有帮助吗? CGContextTranslateCTM ......
希望它有所帮助!