我有一个UIView
同时使用UIKit
control 和OpenGL
. 我想以编程方式获取该视图的屏幕截图。
如果我使用UIGraphicsGetImageFromCurrentImageContext()
,则OpenGL
内容为空白;如果我使用该glReadPixels(...)
方法,则 UIKit 内容为空白;
我对如何截取完整的屏幕截图感到困惑。谢谢!
我有一个UIView
同时使用UIKit
control 和OpenGL
. 我想以编程方式获取该视图的屏幕截图。
如果我使用UIGraphicsGetImageFromCurrentImageContext()
,则OpenGL
内容为空白;如果我使用该glReadPixels(...)
方法,则 UIKit 内容为空白;
我对如何截取完整的屏幕截图感到困惑。谢谢!
使用以下代码截屏
-(UIImage *) screenshot
{
CGRect rect;
rect=CGRectMake(0, 0, 320, 480);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context=UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
好吧,以编程方式捕获 iPhone 屏幕的方法很少
使用 UIKIT http://developer.apple.com/library/ios/#qa/qa1703/_index.html
使用 AVFoundation 框架http://developer.apple.com/library/ios/#qa/qa1702/_index.html
使用 OpenGL ES http://developer.apple.com/library/ios/#qa/qa1704/_index.html
从 iOS 7 开始,您还可以使用为什么我以编程方式创建的屏幕截图在 iOS 7 上看起来如此糟糕?
使用 UIWindow
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);
[self.window.layer renderInContext:ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
使用 UIView
UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
在这 6 个选项中,我发现第一个选项对于复制粘贴和应用压缩级别非常方便,因为第一种方法可以提供具有真实像素数据的图像。我也喜欢选项 4,因为 API 带有 SDK。
-(UIImage *) screenshot
{
CGImageRef UIGetScreenImage(void);
CGImageRef screen = UIGetScreenImage();
UIImage* screenImage = [UIImage imageWithCGImage:screen];
CGImageRelease(screen); // you need to call this.
return screenImage;
}
你得到结果 Uiimage 而不会失去图像质量
- (UIImage *)captureView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *data = [UIImagePNGRepresentation(image) retain];
UImage *screenShot = [UIImage imageWithData:data];
也许..你能用这里的东西吗
- https://stackoverflow.com/questions/12413460/cocos2d-2-0-screenshots-on-ios-6
和这里...
以下是如何以编程方式截取UIImage
. 如果你想要它为任何其他对象替换UIImage
它。
在.h
文件中添加 NSData *Data;
,然后在您的.m
文件中将其添加到您的代码中
UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *attachimage = [[UIImage alloc]initWithData:Data];
UIImage *viImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
attachimage = viImage;
UIImageWriteToSavedPhotosAlbum(viImage, nil, nil, nil);
您知道 OpenGL 内容在您的视图中的位置。所以应该很容易将结果复制glReadPixels
到 UIKit 的快照中。