IOS 各种截屏方法及保存图片

-(void)fullScreenshots{
    UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
      UIGraphicsBeginImageCont ext(screenWindow.frame.size); //全屏截图,包括window
      [screenWindow.layer renderInContext:UIGraphicsGetCurrentCont ext()];
      UIImage *viewImage = UIGraphicsGetImageFromCu rrentImageContext();
      UIGraphicsEndImageContex t();
      UIImageWriteToSavedPhoto sAlbum(viewImage, nil, nil, nil);//保存到相册
}

- (UIImage*) glToUIImage

{

   GLint backingWidth, backingHeight;

   glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);

   glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

   CGRect s =CGRectMake(0,0, backingWidth, backingHeight);

    

    uint8_t *buffer = (uint8_t *)malloc(s.size.width * s.size.height *4);

   glReadPixels(0,0, s.size.width, s.size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    CGDataProviderRef ref =CGDataProviderCreateWithData(NULL, buffer, s.size.width * s.size.height *4,NULL);

    CGImageRef iref =CGImageCreate(s.size.width, s.size.height,8,32, s.size.width *4,CGColorSpaceCreateDeviceRGB(),

                                    kCGBitmapByteOrderDefault, ref,NULL,true,kCGRenderingIntentDefault);

    

    size_t width =CGImageGetWidth(iref);

    size_t height =CGImageGetHeight(iref);

   size_t length = width * height *4;

   GLubyte *pixels = (GLubyte *)malloc(length);

   CGContextRef cgcontext =CGBitmapContextCreate(pixels, width, height,8, width *4,

                                                   CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst |kCGBitmapByteOrder32Big);

    //把图像转成正像

    CGAffineTransform transform =CGAffineTransformIdentity;

    transform = CGAffineTransformMakeTranslation(0.0f, height);

    transform =CGAffineTransformScale(transform,1.0, -1.0);

   CGContextConcatCTM(cgcontext, transform);

   CGContextDrawImage(cgcontext,CGRectMake(0.0f,0.0f, width, height), iref);

    CGImageRef outputRef =CGBitmapContextCreateImage(cgcontext);

   UIImage* outputImage = [UIImageimageWithCGImage:outputRef];

    //保存到相册

    UIImageWriteToSavedPhotosAlbum(outputImage,nil,nil,nil);

    

    CGDataProviderRelease(ref);

    CGImageRelease(iref);

   CGContextRelease(cgcontext);

   CGImageRelease(outputRef);

   free(pixels);

   free(buffer);

   NSLog(@"Screenshot size: %d, %d", (int)[outputImagesize].width, (int)[outputImagesize].height);

    

   return outputImage;

}


//缩放image

-(void) glToUIImage {

    

   NSInteger myDataLength =1024 * 768 *4 //1024-width768-height

   GLubyte *buffer = (GLubyte *)malloc(myDataLength);

   glReadPixels(0,0,768, 1024, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

   GLubyte *buffer2 = (GLubyte *)malloc(myDataLength);

   for(int y =0; y <1024; y++)

    {

       for(int x =0; x <768 *4; x++)

        {

            buffer2[(1023 - y) *768 *4 + x] = buffer[y *4 *768 + x];

        }

    }

    

   int bitsPerComponent =8;

   int bitsPerPixel =32;

   int bytesPerRow =4 * 768;

    CGColorSpaceRef colorSpaceRef =CGColorSpaceCreateDeviceRGB();

    CGBitmapInfo bitmapInfo =kCGBitmapByteOrderDefault;

    

    CGDataProviderRef provider =CGDataProviderCreateWithData(NULL, buffer2, myDataLength,NULL);

    CGColorRenderingIntent renderingIntent =kCGRenderingIntentDefault;

    

    CGImageRef imageRef =CGImageCreate(768,1024,

                                        bitsPerComponent, bitsPerPixel, bytesPerRow,

                                        colorSpaceRef, bitmapInfo, provider,NULL,NO, renderingIntent);

    

   CGSize size =CGSizeMake(240,320);

    UIGraphicsBeginImageContext(size);

    [[UIImage imageWithCGImage:imageRef] drawInRect:CGRectMake(0,0,size.width,size.height)];

    UIImage* myImage =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    

    UIImageWriteToSavedPhotosAlbum(myImage,nil,nil, nil);

    

    CGDataProviderRelease(provider);

   CGImageRelease(imageRef);

   free(buffer);

   free(buffer2);

}



//保存图片
   UIImage* myImages = [UIImage imageNamed:@"IMG_1435.JPG"];
    UIImageWriteToSavedPhotosAlbum(myImage, nil, nil, nil);//保存图片到照片库
    
    NSData *imageViewData = UIImageJPEGRepresentation(myImage, 1);
//沙盒文档目录路径
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
//文档目录内容
   NSArray *contents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error];
    NSLog(@"Documents directory: %@", contents);

    NSString *pictureName= @"screenShow.png";
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:pictureName];
    [imageViewData writeToFile:savedImagePath atomically:YES];//保存照片到沙盒目录
    
    //从手机本地加载图片
    UIImage *bgImage2 = [[UIImage alloc]initWithContentsOfFile:savedImagePath];

-(BOOL)writeImage:(UIImage*)image

{

    // Create paths to output images

    NSString  *pngPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/Test.png"];

    NSString  *jpgPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/Test.jpg"];

    

    // Write a UIImage to JPEG with minimum compression (best quality)

    // The value 'image' must be a UIImage object

    // The value '1.0' represents image compression quality as value from 0.0 to 1.0

    [UIImageJPEGRepresentation(image,1.0) writeToFile:jpgPath atomically:YES];

    // Write image to PNG

    [UIImagePNGRepresentation(image)writeToFile:pngPath atomically:YES];

    // Let's check to see if files were successfully written...

  

    // Create file manager

   NSError *error;

    NSFileManager *fileMgr = [NSFileManagerdefaultManager];

    

    // Point to Document directory

    NSString *documentsDirectory = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];

   

    // file size

   NSDictionary *fileAttributeDic=[fileMgr attributesOfItemAtPath:jpgPath error:nil];

   NSLog(@"jpgPath:%@ size:%llu", jpgPath, fileAttributeDic.fileSize);


    // Write out the contents of home directory to console

   NSArray *contents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error];

    NSLog(@"Documents directory: %@", contents);

}




后续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值