猴子原創,歡迎轉載。轉載請注明: 轉載自Cocos2D開發網–Cocos2Dev.com,謝謝!
原文位址: http://www.cocos2dev.com/?p=522
前幾天添加微信圖檔分享的時候,發現全屏截圖超出了微信的資料包大小,是以截屏的時候可以考慮縮小尺寸到0.5倍。
下面的截屏代碼:
void LHUtil::screenShoot()
{
Size visibleSize = Director::getInstance()->getVisibleSize();
//定義一個螢幕大小的渲染紋理
RenderTexture* renderTexture = RenderTexture::create(visibleSize.width * .5, visibleSize.height * .5, Texture2D::PixelFormat::RGBA8888);
Scene* curScene = Director::getInstance()->getRunningScene();
Point ancPos = pCurScene->getAnchorPoint();
//渲染紋理開始捕捉
renderTexture->begin();
// 縮小螢幕截屏區域
curScene->setScale(.5);
curScene->setAnchorPoint(cocos2d::Point(0, 0));
//繪制目前場景
curScene->visit();
//結束
renderTexture->end();
//儲存png
renderTexture->saveToFile("screenshoot.png", Image::Format::PNG);
// 恢複螢幕尺寸
curScene->setScale(1);
curScene->setAnchorPoint(ancPos);
CC_SAFE_DELETE(curScene);
}
上面是cocos2dx的擷取截屏的方法。
我順便寫下如何用OC的UIGraphicsBeginImageContext擷取UIView轉化成UIImage.
下面是ios方法:
-(void)screenShot:(CGRect)rect{
// 開始設定截屏區域
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0);
[[self.view layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 擷取image,可以根據需要進行尺寸修改
CGImageRef imageRef = viewImage.CGImage;
CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect);
UIImage *image = [[UIImage alloc] initWithCGImage:imageRefRect];
// 儲存圖檔到相冊, 這裡會提示使用者授權,不需要儲存的話,可以取消
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
// 擷取Documents目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"temScreenShot.png"];
// 儲存image到Documents目錄
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:savedImagePath atomically:YES];
CGImageRelease(imageRefRect);
}