Cocos2dx-截屏并设置图片尺寸

发表于2015-12-03
评论0 1.3k浏览

几天添加微信图片分享的时候,发现全屏截图超出了微信的数据包大小,所以截屏的时候可以考虑缩小尺寸到0.5倍。
下面的截屏代码:

  1. void LHUtil::screenShoot()  
  2. {  
  3.     Size visibleSize = Director::getInstance()->getVisibleSize();  
  4.       
  5.     //定义一个屏幕大小的渲染纹理  
  6.     RenderTexture* renderTexture = RenderTexture::create(visibleSize.width * .5, visibleSize.height * .5, Texture2D::PixelFormat::RGBA8888);  
  7.   
  8.     Scene* curScene = Director::getInstance()->getRunningScene();  
  9.     Point ancPos = pCurScene->getAnchorPoint();  
  10.   
  11.     //渲染纹理开始捕捉  
  12.     renderTexture->begin();  
  13.   
  14.     // 缩小屏幕截屏区域  
  15.     curScene->setScale(.5);  
  16.     curScene->setAnchorPoint(cocos2d::Point(0, 0));  
  17.   
  18.     //绘制当前场景  
  19.     curScene->visit();  
  20.   
  21.     //结束  
  22.     renderTexture->end();  
  23.   
  24.     //保存png  
  25.     renderTexture->saveToFile("screenshoot.png", Image::Format::PNG);  
  26.   
  27.     // 恢复屏幕尺寸  
  28.     curScene->setScale(1);  
  29.     curScene->setAnchorPoint(ancPos);  
  30.     CC_SAFE_DELETE(curScene);  
  31. }  


上面是cocos2dx的获取截屏的方法。


我顺便写下如何用OC的UIGraphicsBeginImageContext获取UIView转化成UIImage.
下面是ios方法:


  1. -(void)screenShot:(CGRect)rect{  
  2.     // 开始设置截屏区域  
  3.     UIGraphicsBeginImageContextWithOptions(rect.sizeYES0);  
  4.     [[self.view layer] renderInContext:UIGraphicsGetCurrentContext()];  
  5.     UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();  
  6.     UIGraphicsEndImageContext();  
  7.       
  8.     // 获取image,可以根据需要进行尺寸修改  
  9.     CGImageRef imageRef = viewImage.CGImage;  
  10.     CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect);  
  11.     UIImage *image = [[UIImage alloc] initWithCGImage:imageRefRect];  
  12.       
  13.     // 保存图片到相册, 这里会提示用户授权,不需要保存的话,可以取消  
  14.     UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);  
  15.       
  16.     // 获取Documents目录  
  17.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  18.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  19.     NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"temScreenShot.png"];  
  20.       
  21.     // 保存image到Documents目录  
  22.     NSData *imageData = UIImagePNGRepresentation(image);  
  23.     [imageData writeToFile:savedImagePath atomically:YES];  
  24.     CGImageRelease(imageRefRect);  
  25. }  

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论