//
//  ScreenCapture.m
//
//  Created by AIG-Soft on 2012/02/24.
//  Copyright (c) 2012-13 AIG-Soft. All rights reserved.
//

#import "ScreenCapture.h"
#import "libs.h"
#import "QuartzCore/CALayer.h"

// viewキャプチャ
// view上にあるすべてのビューが自動的に合成されるが、ナビゲーションバーまで入る
// Retina対応
UIImage *viewCapture(UIView *view,BOOL fblack)
{
	printFunc();
	printf("fblack=%d/",fblack);
	UIImage *capture;
	CGRect rect = view.frame;
	printf("view=%f,%f:%f,%f\n",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
	
	UIColor *col;
	if (fblack) {
		// ファイルに落とすときは、背景色を黒にしないと「見た目」正しい色でキャプチャーされない
		//	「見た目」正しい色でない；透明(故にclearColorで設定してもだめ)なので、ファイルに落としたときはビューワーの透明の処理され方によってしまう。
		// そのため、キャプチャーする間だけ色を変更する
		// ファイルに落とさず、UIImageに入れて表示するときは不要
		col=view.backgroundColor;
		view.backgroundColor=[UIColor blackColor];
	}
#if 0	// Retina非対応
	UIGraphicsBeginImageContext(rect.size);
	[view.layer renderInContext:UIGraphicsGetCurrentContext()];
	capture = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
#else
	// Retina対応
//	CGRect retinaRect=getRetinaSize(rect);
//	UIGraphicsBeginImageContext(rect.size);	// これはscale=1.0;でRetinaを無視する
	UIGraphicsBeginImageContextRetina(rect.size);
	CGContextRef ctx=UIGraphicsGetCurrentContext();
	[view.layer renderInContext:ctx];
//	CGContextConvertRectToDeviceSpace(ctx, retinaRect);
	capture = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
#endif
	if (fblack) {
		// 色を戻す
		view.backgroundColor=col;
	}
	
#ifdef DEBUG
	{
		static int cnt=0;
		NSData *imgdata=UIImageJPEGRepresentation(capture,1.0);
		[imgdata writeToFile:[NSString stringWithFormat:TestFile(@"viewCapture%02d.jpg"),cnt++] atomically:YES];
	}
#endif
	
	return capture;
}

UIImage *screenCapture(void)
// 全画面をキャプチャーする
// Windowの上にあるすべてのビューが自動的に合成されるが、ステータスバーやナビゲーションバーまで入る
// Retina対応
{
	printFunc();

	UIImage *capture;
	CGRect rect = [[UIScreen mainScreen] bounds];
	printf("screen=%f,%f:%f,%f\n",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
	
	// こちらは色はおかしくならない
	UIGraphicsBeginImageContextRetina(rect.size);
	[[UIApplication sharedApplication].keyWindow.layer renderInContext:UIGraphicsGetCurrentContext()];
	capture = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
	
#ifdef DEBUG
	{
		static int cnt=0;
		NSData *imgdata=UIImageJPEGRepresentation(capture,1.0);
		[imgdata writeToFile:[NSString stringWithFormat:TestFile(@"screenCapture%02d.jpg"),cnt++] atomically:YES];
	}
#endif
	
	return capture;
}
