`

iPhone几种截屏的代码

 
阅读更多

方法一:

 UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomScale);
        [pageView.page.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *uiImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

 方法二:

- (UIImage *) glToUIImage {
    
    DWScrollView *pageView = [self getActivePageView];
       pageView.page.backgroundColor = [UIColor clearColor];
  //  self.backgroundColor=[UIColor clearColor];
    NSInteger myDataLength = 320 * 308 * 4;
    
    // allocate array and read pixels into it.
    GLubyte *buffer = (GLubyte *) malloc(myDataLength);
    glReadPixels(0, 0, 320, 308, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
    
    // gl renders "upside down" so swap top to bottom into new array.
    // there's gotta be a better way, but this works.
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength);
    
    for(int y = 0; y <308; y++)
    {
        for(int x = 0; x <320 * 4; x++)
        {
            if(buffer[y* 4 * 320 + x]==0)
                buffer2[(307 - y) * 320 * 4 + x]=1;
            else
                buffer2[(307 - y) * 320 * 4 + x] = buffer[y* 4 * 320 + x];
        }
    }
    
    // make data provider with data.
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL);
    
    // prep the ingredients
    int bitsPerComponent = 8;
    int bitsPerPixel = 32;
    int bytesPerRow = 4 * 320;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
    
    // make the cgimage
    CGImageRef imageRef = CGImageCreate(320, 308, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
    
    // then make the uiimage from that
    UIImage *myImage = [UIImage imageWithCGImage:imageRef];
    UIImageWriteToSavedPhotosAlbum(myImage, nil, nil, nil);
    return myImage;
}

 方法三:

// get screen
- (void)grabScreen {
    unsigned char buffer[320*480*4];
    glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer);
    
    CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer, 320*480*4, NULL);
    CGImageRef iref = CGImageCreate(320,480,8,32,320*4,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault);
    CGFloat width = CGImageGetWidth(iref);
    CGFloat height = CGImageGetHeight(iref);
    size_t length = width*height*4;
    uint32_t *pixels = (uint32_t *)malloc(length);
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, 320*4, CGImageGetColorSpace(iref), kCGImageAlphaLast | kCGBitmapByteOrder32Big);
    CGContextTranslateCTM(context, 0.0, height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), iref);
    CGImageRef outputRef = CGBitmapContextCreateImage(context);
    UIImage *outputImage = [UIImage imageWithCGImage:outputRef];
    
    UIImageWriteToSavedPhotosAlbum(outputImage, nil, nil, nil); 
    
    CGContextRelease(context);
    CGImageRelease(iref);
    CGDataProviderRelease(ref);
} 

 方法四:

CGImageRef UIGetScreenImage();
void SaveScreenImage(NSString *path)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    CGImageRef cgImage = UIGetScreenImage();
        void *imageBytes = NULL;
        if (cgImage == NULL) {
                CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
                imageBytes = malloc(320 * 480 * 4);
                CGContextRef context = CGBitmapContextCreate(imageBytes, 320, 480, 8, 320 * 4, colorspace, kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);
                CGColorSpaceRelease(colorspace);
                for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
                        CGRect bounds = [window bounds];
                        CALayer *layer = [window layer];
                        CGContextSaveGState(context);
                        if ([layer contentsAreFlipped]) {
                                CGContextTranslateCTM(context, 0.0f, bounds.size.height);
                                CGContextScaleCTM(context, 1.0f, -1.0f);
                        }
                        [layer renderInContext:(CGContextRef)context];
                        CGContextRestoreGState(context);
                }
                cgImage = CGBitmapContextCreateImage(context);
                CGContextRelease(context);
        }
    NSData *pngData = UIImagePNGRepresentation([UIImage imageWithCGImage:cgImage]);
    CGImageRelease(cgImage);
        if (imageBytes)
                free(imageBytes);
    [pngData writeToFile:path atomically:YES];
    [pool release];
}

 方法五:

 + (UIImage *)imageWithScreenContents
{
     CGImageRef cgScreen = UIGetScreenImage();
     if (cgScreen) {
         UIImage *result = [UIImage imageWithCGImage:cgScreen];
         CGImageRelease(cgScreen);
         return result;
     }
     return nil;
} 
 转自:http://www.cocoachina.com/newbie/basic/2011/1205/3664.html
分享到:
评论

相关推荐

    一步一步教你如何创建一个iPhone应用

    nib 文件是一种资源文件,其中包含了预冻结的对象,可以使用 Interface Builder 创建和编辑这些文件。 在 MoveMe 应用中,主要的 nib 文件 (`MainWindow.xib`) 包含了一个 `MoveMeAppDelegate` 类的实例,将其与...

    android 类似Iphone AssistiveTouch的手势代码

    在Android平台上实现类似iPhone的AssistiveTouch手势功能,是一种为用户提供便捷操作的途径,它可以在屏幕边缘或浮动窗口上提供一系列快捷操作。这个开源项目是开发者为了满足这一需求而创建的,使得Android用户也能...

    CSS3仿苹果手机iPhone桌面文件夹特效

    【CSS3仿苹果手机iPhone桌面文件夹特效】是一种利用CSS3技术实现的网页交互效果,旨在为用户模拟出苹果手机iPhone的桌面体验。这个特效主要包括了iPhone的图标展示、文件夹的开启和关闭动画,以及图标与文件夹的交互...

    iPhone游戏编程实例

    iPhone游戏开发主要涉及到以下几个方面: 1. **平台与工具**:iOS是苹果公司为iPhone设计的操作系统。开发者通常使用Xcode作为开发环境,它是一款由苹果提供的集成开发环境(IDE),支持Swift和Objective-C两种编程...

    iPhone应用开发从入门到精通

    通过以上几个方面的详细介绍,我们可以看出,iPhone应用开发不仅需要掌握扎实的基础知识,还需要不断学习新的技术和方法,才能开发出高质量的应用程序。希望每位开发者都能在这个过程中不断提升自己,最终成为iPhone...

    Android应用源码仿Iphone抖动效果Shake Icon.zip

    同时,`QQ截图20131122153212.jpg`可能是对效果的展示或关键代码的截图,帮助理解实现过程。 `双击访问白杨工作室查看更多程序源码~.url`则可能是一个链接,指向更多由白杨工作室提供的Android开发资源和示例,对于...

    iPhone开发之UIPageControl示例程序

    在这个“PageControl”压缩包文件中,很可能是包含了源代码文件、资源文件以及可能的示例截图,帮助开发者更直观地理解和学习UIPageControl的使用。通过对这些文件的查看和分析,开发者可以深入理解示例程序的实现...

    iPhone手机应用软件模板是一款适合手机客户端开发企业网站模板 .rar

    " - 这个文件名可能是重复的描述,也可能是一个包含模板详细信息的文件,比如设计特点、兼容性、示例代码或截图等。 基于以上信息,我们可以深入探讨以下几个相关知识点: 1. **iOS应用开发**:iOS应用通常使用...

    snapshot, 在每个设备上,自动获取你的iOS应用程序的本地化截图.zip

    这个工具使得开发者能够更高效地管理应用的多语言展示效果,而无需手动在每种设备和语言设置下进行截图。 快车道(fastlane)是这个过程中的关键组件,它是一个强大的开源工具集合,旨在简化iOS和Android应用的部署...

    类似iphone密码输入效果

    提供的压缩包文件中,"源码说明.htm"可能是关于代码实现的详细解释,"应用宝截屏2014010801.png"到"应用宝截屏2014010804.png"是应用的截图,展示实际效果,"帮助文档.url"和"更多海量源码下载.url"可能是指向更详细...

    苹果推MAC 脚本代码

    【苹果推MAC脚本代码】相关的知识点主要集中在苹果的iMessage服务和如何通过脚本实现自动化消息发送。iMessage是苹果公司为Mac、iPhone、iPad等设备提供的即时通讯服务,它允许用户在设备间免费发送文本、图片、音频...

    简洁iPhone应用软件介绍网页模板

    描述部分没有提供额外的信息,但我们可以推断这个网页模板可能是为那些希望创建自己iPhone应用介绍页面的个人或团队设计的,可能包括应用截图、功能概述、用户评价和下载链接等元素。 标签进一步细化了主题,涉及到...

    iphon开发秘笈

    分段控件允许用户在几个选项之间切换,常用于过滤或分类功能。 **3.6 秘诀: 在导航栏中添加UIToolbar** 在导航栏中添加工具栏可以提供额外的操作选项。 **3.7 秘诀: 在视图控制器之间导航** - **返回根**:返回...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    5.jquery实现鼠标划过网址名称显示网站截图功能 6.jQuery带Tips动画提示通用表单验证插件下载(jquery validate),动画效果漂亮 7.jQuery鼠标移到下载地址滑出气泡提示效果的插件 8.又一款jquery实现链接Tip...

    ios-safeKeyBoard.zip

    这可能涉及到屏幕截图的禁用,防止通过截屏工具获取用户输入的内容。另外,可能还会采用加密技术来保护数据,确保即使在内存中,用户输入的信息也是加密状态。 6. **动画和过渡效果(Animations and Transitions)*...

    node-screenshots

    使用`node-screenshots`进行网页截图主要涉及以下几个步骤: 1. 引入模块: ```javascript var screenshot = require('node-screenshots'); ``` 2. 调用`screenshot`函数,传入截图的URL和保存图片的路径: ``...

    android开发资料大全

    Android游戏开发系列源码+CHM+书籍截图+目录】 Android developer guide中文翻译文档 Android开发开发技巧之 EditText 属性、 ProgressBar 各种样式大全 android用户界面之EditText教程实例汇 android用户界面之...

Global site tag (gtag.js) - Google Analytics