I would like to take the screenshot of device camera and CClayer with image at the same time.
But as I wrote the following code, the result is that:
I can only take the screenshot of CClayer, not both of them.
The macro 'UIGetScreenImage' can solve this problem but as I heard that Apple rejects that code because of it's illegal.
Any ideas/links/details on how to solve this problem?
I've reviewed that link but it doesn't help me to solve the problem.
PS I use Cocos2D 2.1 but I'm the beginner.
//in AppDelegate.h
@property (nonatomic, retain) UIView *overlay;
//in AppDelegate.m
[CCDirector sharedDirector].view.backgroundColor = [UIColor clearColor];
[CCDirector sharedDirector].view.opaque = NO;
//director_.view.opaque=NO;
//director_.view.backgroundColor= [UIColor clearColor];
glClearColor(0.0, 0.0, 0.0, 0.0);
// prepare the overlay view and add it to the window
self.overlay = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.overlay.opaque = NO;
self.overlay.backgroundColor = [UIColor clearColor];
[window_ addSubview:self.overlay];
[window_ bringSubviewToFront:overlay];
self.overlay.hidden = YES;
//in CameraScene.m
-(id) init
{
#define CAMERA_TRANSFORM 1.24299
if( (self = [super init])) {
UIView* overlay = self.appdelegate.overlay;
overlay.hidden = NO;
@try {
uip = [[[UIImagePickerController alloc] init] autorelease];
uip.sourceType = UIImagePickerControllerSourceTypeCamera;
uip.showsCameraControls = NO;
uip.toolbarHidden = YES;
uip.navigationBarHidden = YES;
uip.wantsFullScreenLayout = YES;
uip.cameraViewTransform = CGAffineTransformScale(uip.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM);
}
@catch (NSException * e) {
[uip release];
uip = nil;
}
@finally {
if(uip) {
[overlay addSubview:[uip view]];
[overlay release];
}
}
// ask director the the window size
self.touchEnabled=YES;
_state=kIdle;
[self createGUI];
[self createAndAnimateModel];
}
return self;
}
//for screeshot
- (UIImage*)makeaShot {
/*CGImageRef screen = UIGetScreenImage();
UIImage* screenImage = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
return screenImage;*/
/*UIGraphicsBeginImageContext(self.winSize);
[[CCDirector sharedDirector].view renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;*/
/*[CCDirector sharedDirector].nextDeltaTimeZero = YES;
CGSize winSize = [CCDirector sharedDirector].winSize;
CCRenderTexture* rtx = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];
[rtx beginWithClear:0 g:0 b:0 a:1.0f];
[[[CCDirector sharedDirector] runningScene] visit];
[rtx end];
return [rtx getUIImage];*/
//return [AWScreenshot takeAsImage];
/*CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[[CCDirector sharedDirector].view.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;0*/
/*CGImageRef screen = [AWScreenshot takeAsCGImage];
UIImage* screenImage = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
return screenImage;*/
[CCDirector sharedDirector].nextDeltaTimeZero = YES;
CGSize winSize = [CCDirector sharedDirector].winSize;
CCLayerColor* whitePage = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 0) width:winSize.width height:winSize.height];
whitePage.position = ccp(winSize.width/2, winSize.height/2);
CCRenderTexture* rtx = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];
[rtx begin];
[whitePage visit];
[[[CCDirector sharedDirector] runningScene] visit];
[rtx end];
return [rtx getUIImage];
}